RHEINISCHE FRIEDRICH-WILHELMS- UNIVERSITÄT BONN

Werbung
RHEINISCHE FRIEDRICH-WILHELMSUNIVERSITÄT BONN
INSTITUT FÜR INFORMATIK III
Diplomarbeit
Ein datenbankgestütztes Werkzeug
zur Exploration von ontologischen Daten
und deren Evolution
Tim Sondermann
13. März 2006
Betreuer: Prof. Dr. Manthey
Inhaltsverzeichnis
1. Einleitung ..............................................................................................................5
2. Datenbanken..........................................................................................................7
2.1. Relationale Datenbanken ...............................................................................7
2.2. Microsoft Access............................................................................................9
2.3. Visual Basic for Applications (VBA) ..........................................................10
2.4. SQL ..............................................................................................................11
2.4.1 Data Definition Language (DDL) ..........................................................12
2.4.2 Data Manipulation Language (DML) ....................................................14
2.5. Versionsmanagement ...................................................................................19
2.5.1 Übersicht ................................................................................................19
2.5.2 Differenzspeicherung .............................................................................19
2.5.3 Versionen und Updates in Datenbanken................................................21
3. Ontologien...........................................................................................................23
3.1. Begriffsdefinition .........................................................................................23
3.2. Beispiele für Ontologien ..............................................................................25
3.2.1 Foundational Model of Anatomy (FMA)...............................................26
3.2.2 General Ontology for Linguistic Description (GOLD) .........................26
3.2.3 Semantic Web ........................................................................................26
3.3. Repräsentation von Ontologien in Datenbanken .........................................27
3.3.1 Modellierung von Vererbung.................................................................27
3.3.2 Modellierung von Axiomen ...................................................................29
3.4. Die Gene Ontology ......................................................................................30
4. Konzept eines Versionsmanagement am Beispiel der Gene Ontology ..............32
4.1. Untersuchung des Änderungsverhaltens der Gene Ontology ......................33
4.2. Probleme bei fehlendem Versionsmanagement...........................................36
4.2.1 Ineffizienter Datenaustausch..................................................................36
4.2.2 Mangelnde Informationen über Änderungen.........................................37
4.2.3 Mangelnder Zugriff auf alte Versionen .................................................39
4.3. Konzept eines effizienten Versionsmanagements........................................39
4.3.1 Historisierung.........................................................................................40
4.3.1.1 Gewinnung der Deltadaten..............................................................40
4.3.1.2 Speicherung der Deltadaten ............................................................44
4.3.2 Rekonstruktion .......................................................................................49
4
4.3.3 Analyse der Deltadaten ..........................................................................51
4.4. Das „Schlüsselproblem“...............................................................................51
5. Das System VerIS ...............................................................................................54
5.1. Architektur und Funktionalität.....................................................................55
5.2. Importmanager .............................................................................................58
5.3. Keymanager .................................................................................................58
5.4. Historymanager ............................................................................................59
5.5. Versionmanager ...........................................................................................60
5.6. Querymanager ..............................................................................................62
5.7. Bewertung des Systems................................................................................63
6. Ausgewählte Probleme der Implementierung.....................................................64
6.1. Import des Tabellenschemas ........................................................................64
6.2. Differenzspeicherung ohne Schlüssel ..........................................................65
6.3. Das „UPDATE-Problem“ bei der Rekonstruktion.......................................67
7. Zusammenfassung und Ausblick ........................................................................70
8. Literatur...............................................................................................................72
5
1. Einleitung
Die von Biologen entwickelte Gene Ontology ([GEN07]) ist ein gutes Beispiel
für eine schnell gewachsene und schnell wachsende Ontologie. Sie stellt ein zentrales „Wörterbuch“ für das Indizieren und das Annotieren von Genen und Genprodukten (z.B. Proteinen) unterschiedlichster Arten und Gattungen dar. Diese
Informationen werden durch eine Datenbank repräsentiert. Die Daten der Gene
Ontology sind in verschiedenen Formaten und Release-Kategorien jederzeit im
Internet abrufbar. Da sich diese Daten unter Umständen rasch ändern können
und der Benutzer der Gene Ontology möglichst mit sehr aktuellem Datenmaterial arbeiten möchte, wird täglich eine neue Version der kompletten Datenbasis bereitgestellt und kann in das vom Anwender genutzte Datenbanksystem integriert werden.
Dem Benutzer, der diese Daten anfordert, fehlen jedoch jegliche Informationen,
ob und in welchem Umfang sich die Daten geändert haben. Meist ist ein Austausch der Daten komplett unnötig, da sich gar kein Datensatz geändert hat. Es
ist jedoch auch möglich, dass sich zwischen Versionen zweier Tage relativ viele
Daten ändern und eine neue Version der Daten für den Benutzer unabdingbar ist.
Da Informationen über Änderungen der Daten jedoch nicht zugänglich sind,
muss häufig ein sinnloser Austausch der Daten, die sich bereits auf dem Datenbanksystem des Anwenders befinden, mit den von der Gene Ontologie bereitgestellten Daten im Internet vollzogen werden. Die Gene Ontology bietet nämlich
keine Möglichkeit, nur die geänderten Daten zu erneuern, sondern bietet nur eine
Bereitstellung der gesamten Datenbasis.
Da ontologische Daten häufigen Änderungen unterzogen sind und diese Änderungen für alle Anwender von großem Interesse sind, versucht diese Arbeit am
Beispiel der Gene Ontology Konzepte und Lösungen für OntologieDatenbanken zu entwickeln, bei denen ein Versionsmanagement, also ein effizienter Umgang mit Änderungen der Datenbasis, fehlt. Die erarbeiteten
6
Konzepte und deren technischen Umsetzung lassen sich aber auch
durchaus auf andere große Informationssysteme übertragen, so dass sie nicht
allein auf die Datenbank der Gene Ontology anwendbar sind.
Es wird ein System basierend auf einem relationalen Datenbanksystem entwickelt, welches die Konzepte und Methoden eines Versionsmanagements für Datenbanken verwirklicht. Mit Hilfe des entwickelten Systems VerIS wird aufgezeigt, wie ein Versionsmanagement für die Gene Ontology aussehen könnte. Das
System arbeitet zwar mit Daten aus der Gene Ontology, die entwickelten Methoden lassen sich aber – durch leichte Modifikationen - auch auf andere Datenbanken anwenden.
Das System VerIS wurde mit MS Access entwickelt. Es bietet die Möglichkeit,
Daten aus der Gene Ontology zu integrieren und den Änderungsverlauf dieser
Daten zu protokollieren, so dass der Benutzer dieses Systems diverse Informationen über den Verlauf der Änderungen erhält. Außerdem bietet das System die
Möglichkeit, alte Versionen des Datenbestands zu generieren, ohne dass diese
alten Versionen physisch im System vorhanden sein müssen.
Die Arbeit hat den folgenden Aufbau: In Kapitel 2 werden zunächst die Grundlagen der in der Arbeit verwendeten Datenbankentechnologien vermittelt. Außerdem wird das Prinzip des Versionsmanagements für Datenbanken beleuchtet.
Kapitel 3 gibt einen Überblick über Ontologien mit besonderem Augenmerk auf
die Gene Ontology. In Kapitel 4 wird ein Konzept eines Versionsmanagements
für Datenbanken am Beispiel der Gene Ontology erarbeitet. Kapitel 5 befasst
sich mit der technischen Umsetzung eines solchen Versionsmanagements. Hier
wird die Implementierung und der Aufbau des Systems VerIS beschrieben. Kapitel 6 erörtert einige interessante Probleme der Implementierung. Eine Zusammenfassung und ein kurzer Ausblick in Kapitel 7 schließen die Diplomarbeit ab.
7
2. Datenbanken
In diesem Kapitel sollen die notwendigen Grundlagen zum technischen und
konzeptionellen Verständnis der in dieser Arbeit verwendeten Technologien
vermittelt werden.
In dieser Arbeit wird ein System vorgestellt, das ein Versionsmanagement für
Datenbanken und durch Datenbanken repräsentierte Ontologien ermöglicht, bei
denen ein solches fehlt bzw. nicht ausgereift ist. Dieses System wird mit dem
relationalen Datenbankmanagementsystem Microsoft Access entwickelt und
arbeitet mit Beispieldaten aus der Gene Ontology. Dieses Kapitel enthält somit
alle erforderlichen Voraussetzungen, um die Konzeption und Umsetzung eines
solchen Systems zu verstehen.
In Kapitel 2.1 bis 2.4 wird auf die technischen, datenbankbezogenen Grundlagen
eingegangen. Die notwendigen Voraussetzungen für ein Arbeiten mit dem relationalen Datenbanksystem MS Access sowie dessen Werkzeuge SQL und VBA
werden erläutert. In Kapitel 2.5 werden Intention und Konzeption eines Versionsmanagements für Datenbanken und die damit zusammenhängende Differenzspeicherung erklärt.
2.1. Relationale Datenbanken
Für die Verwaltung und Verarbeitung großer Informationsmengen werden Datenbankmanagementsysteme (DBMS) eingesetzt ([KEM97]). Insbesondere relationale Datenbankmanagementsysteme (RDBMS) haben mit ihrer standardisierten Abfragesprache SQL [DAT97] die weiteste Verbreitung gefunden.
Eine relationale Datenbank ist eine Datenbank, die auf dem relationalen Datenmodell basiert. Grundlage des relationalen Datenmodells ist die Relation, ein im
8
mathematischen Sinn wohldefinierter Begriff. Man kann sich Relationen praktisch als Tabellen vorstellen, die aus einzelnen Datensätzen bestehen, die alle
dieselbe (homogene) Feldstruktur aufweisen ([MAN02]).
Das relationale Datenbankmodell ist heute ein etablierter Standard zum Speichern und Verarbeiten von Daten. Ein entsprechendes Datenbankmanagementsystem wird als relationales Datenbankmanagementsystem (RDBMS) bezeichnet. Ein bekanntes und häufig eingesetztes RDBMS ist MS Access. Zum Abfragen und Manipulieren der Daten wird die deklarative Datenbanksprache SQL
genutzt, auf die in Kapitel 2.4 noch näher eingegangen wird.
In einer relationalen Datenbank werden solche Relationen mittels zweidimensionaler Tabellen repräsentiert. Eine relationale Datenbank ist daher eine Kollektion von Tabellen (den Relationen), in welchen die Datensätze abgespeichert werden. Jeder Datensatz ist somit eine Zeile (Tupel) in einer Tabelle. Jedes Tupel
besteht aus einer Menge von Attributwerten, den Spalten der Tabelle. Operationen auf diesen Relationen werden durch die relationale Algebra bestimmt
([KEM97]). Die Umsetzung dieser Operationen (z.B. Abfragen, Einfügeoperationen, Löschoperationen) erfolgt mittels der deklarativen Datenbanksprache
SQL.
Der Vorteil des relationalen Datenmodells liegt vor allem darin, dass Daten, die
an verschiedenen Stellen benötigt werden, nicht mehrmals gespeichert werden
müssen, da die Tabellen über Beziehungen miteinander verbunden werden können. Dadurch kann man Verbindungen von einmal erfassten Daten zu immer
neuen Informationen aufbauen([BB97]).
Zu den Haupteigenschaften von relationalen Datenbanksystemen gehören :
•
•
•
•
•
•
Speichern großer Datenmengen
Datensicherheit
Mehrbenutzerbetrieb durch Transaktionsverwaltung
Sicherstellung von Datenintegrität
Anfrageoptimierung
Indizierung von Daten
9
2.2. Microsoft Access
Microsoft Access (kurz MS Access) ist ein relationales Datenbankmanagementsystem (RDBMS) der Firma Microsoft ([MIC07]). Es dient der Verwaltung und
Verarbeitung von Daten und ermöglicht die direkte Entwicklung von Datenbankanwendungen. MS Access basiert auf dem relationalen Datenmodell und
unterstützt SQL-92.
Es existieren verschiedene, meist durch einen Jahreszusatz gekennzeichnete
Versionen von MS Access (z.B. Access 97, Access 2000). In dieser Arbeit wird
MS Access 2000 verwendet. Da die Versionen von Access jeweils abwärtskompatibel sind, besteht kein Versionsproblem, so dass das in dieser Arbeit entwickelte System auch von neueren Access-Versionen genutzt und weiterentwickelt
werden kann.
MS Access ist ein weitverbreitetes Datenbanksystem, welches alle Eigenschaften eines RDBMS stabil und effizient erfüllt. In dieser Arbeit wird MS Access
als DBMS verwendet, da es im Gegensatz zu den meisten üblichen DBMS zusätzliche Funktionalitäten wie eine leicht zu handhabende graphische Benutzeroberfläche bietet. Außerdem ermöglicht es einen schnellen und unkomplizierten
automatisierten Import von Textdateien, wie sie bei der Gene Ontology als Datenquelle zur Verfügung gestellt werden. Durch die Bereitstellung von visuellen
Programmierobjekten, die speziell im Hinblick auf den Datenbankzugriff optimiert sind, ist es mit Access möglich, innerhalb von kurzer Zeit
datenbankbasierte Anwendungen zu erstellen ([BB02]).
Die Entwicklungsumgebung von MS Access benutzt als Programmiersprache
VBA (Visual Basic for Applications). Mittels VBA werden z.B. die Funktionen
der graphischen Steuerelemente ausgeführt und Abfragen und Änderungen auf
den Daten gestartet. MS Access verwendet die JET-Engine (Joint Engine Technology) als Datenbank-Backend, über die die Daten verwaltet und als Datenbankoperationen abgewickelt werden.
Im Folgenden wird kurz auf die wichtigsten Werkzeuge zur Entwicklung und
Steuerung eingegangen, die MS Access zur Verfügung stehen und in dieser Arbeit verwendet wurden. Die von MS Access verwendete Programmiersprache
VBA sowie die Abfragesprache SQL werden in den nächsten beiden Unterkapiteln ebenfalls vorgestellt.
10
Abfragen: Microsoft hat mit seiner Implementierung und Erweiterung von QBE
(Query-by-Example) auf sogenannte Aktionsabfragen innerhalb der Entwicklungsumgebung von MS ACCESS einen graduellen Fortschritt bei der
Handhabung von Datenbanken durch einen breiten Nutzerkreis erzielt
([SCH05]). Access übersetzt diese graphischen, beispielhaften Abfragen intern
in den korrespondierenden SQL-Code, welcher dann auf den Daten ausgeführt
wird. Der Benutzer hat jedoch auch die Möglichkeit, seine Abfragen in herkömmlicher SQL-Form abzusetzen, mit welcher sich kompliziertere Abfragen
ausdrücken lassen. Falls sich die SQL-Statements in QBE ausdrücken lassen, ist
eine Ansicht des graphischen QBEs möglich. Darüber hinaus lassen sich in
VBA geschriebene Funktionen in die Abfragen integrieren. Durch diesen Umstand erweitert sich die Mächtigkeit von Datenbank-Anfragen.
Formulare: Formulare werden hauptsächlich zur Eingabe, Anzeige oder Manipulation von Daten der Datenbank verwendet. Sie können direkt an Datenbankobjekte wie Tabellen oder Abfragen gebunden werden, um die entsprechenden Daten anzuzeigen bzw. Benutzereingaben zu verarbeiten. Steuerelemente wie Auswahlboxen, Knöpfe oder Eingabefelder innerhalb der Formulare stellen verschiedene Funktionen zur Verfügung und reagieren auf vom Benutzer ausgelöste
Ereignisse wie neue Eintragungen oder Mausklicks. Diese Ereignisse (z.B. bei
Klick oder beim Verlassen eines Feldes) können an VBA-Prozeduren und Funktionen gekoppelt werden, so dass der Entwickler Einfluss auf den Verlauf und
die Wirkungsweise dieser Ereignisse hat und direkt beeinflussen kann.
Module: Module stellen benutzerdefinierte Erweiterungen von Access dar, die in
der Programmiersprache VBA implementiert werden. Ein Modul besteht aus
Subroutinen und Funktionen (Funktionen geben Werte zurück, Subroutinen führen ausschließlich Code aus). Ebenfalls ist eine Kapselung in Klassen und ein
definierter Einsatzbereich (Private oder Public) der Prozeduren und Funktionen
möglich.
2.3. Visual Basic for Applications (VBA)
Das in MS Access verwendete VBA (Visual Basic for Applications) ist eine von
der Firma Microsoft entwickelte Skriptsprache zur Steuerung von Programmabläufen in MS-Office-Produkten. Es gleicht in der Syntax dem von Microsoft
entwickelten Basic-Dialekt Visual Basic, wurde aber für die Anwendung mit
MS-Office-Produkten optimiert und in seinen Funktionen und der
11
Leistungsfähigkeit gegenüber Visual Basic reduziert ([KOF99]). VBA stellt somit den „Unterbau“ für MS Access-Anwendungen dar.
Mit VBA-Code lassen sich Ereignisse der Steuerelemente wie „bei Klick“ oder
„nach Auswahl“ steuern. Darüber hinaus können VBA-Funktionen in SQLAbfragen integriert werden.
In VBA-Funktionen oder Subroutinen können Abfragen und Views direkt angesteuert werden oder SQL-Statements abgesetzt werden. Darüber hinaus hat der
Entwickler jedoch auch die Möglichkeit, einen Recordset, das heißt eine Kopie,
bestehend aus einer Tabelle oder Abfrage, direkt im Code zwischenzuspeichern,
ihn mittels Schleifen und Abfragen zu ändern und zurück in die Datenbank zu
schreiben. Dieser Vorgang ist natürlich längst nicht so effizient wie ein SQLStatement, ist aber in besonderen Fällen nicht zu umgehen, da diese Möglichkeit
in SQL zum Teil nicht ausgedrückt werden kann.
2.4. SQL
Die Structured Query Language, kurz SQL, wird verwendet, um relationale Datenbanken anzusprechen. SQL ist dabei sehr umfangreich und umfasst nicht nur
Anweisungen und Befehle zum Abfragen der Daten - wie man aus dem Namen
schließen könnte - sondern auch die Möglichkeit, Daten zu ändern und die Datenbank selbst zu beschreiben ([HES06]). Somit liefert SQL ein geeignetes
Werkzeug zur Administration und Benutzung von Datenbanken.
1986 wurde der erste SQL-Standard von ANSI (American National Standards
Institute) verabschiedet, welcher dann 1987 von der ISO (International Organization for Standardization) ratifiziert wurde. 1992 wurde der Standard deutlich
überarbeitet und als SQL-92 (oder auch SQL2) veröffentlicht. Alle aktuellen
Datenbanksysteme orientieren sich im Wesentlichen an diese Standardversion
([MAT03]).
Durch seine Rolle als Quasi-Standard für die Arbeit mit relationalen Datenbanksystemen ist SQL von großer Bedeutung, da eine weitgehende Unabhängigkeit
von der benutzten Software erzielt werden kann. Die meisten SQLImplementierungen bieten darüber hinaus allerdings noch herstellerspezifische
Erweiterungen, die nicht dem Standard-Sprachumfang entsprechen, was zur
Folge hat, dass von den Herstellern parallel entwickelte gleiche Funktionen unterschiedliche Sprachelemente benutzen ([WIK07]). Diese meist leichten
12
Abwandlungen des SQL-Standards werden häufig auch als SQL-Dialekte bezeichnet. Es handelt sich dabei aber in der Regel nur um geringfügige syntaktische Abweichungen. In den folgenden Abschnitten wird daher die Syntax des
von MS Access verwendeten Dialektes Jet-SQL verwendet. Außerdem liegt das
Hauptaugenmerk auf den in der Arbeit verwendeten Konstrukten von SQL.
SQL hat eine relativ einfache Syntax, die an die englische Umgangssprache angelehnt ist. Die beiden Hauptbestandteile sind die Data Definition Language
(DDL), die verwendet wird, um Datenstrukturen zu beschreiben, zu ändern oder
zu entfernen, und die Data Manipulation Language (DML), die einerseits für
Abfragen auf den Daten zuständig ist, anderseits für das Ändern, Hinzufügen
und Löschen von Daten benutzt wird. Diese beiden Teilaspekte von SQL werden
in den folgenden beiden Abschnitten kurz eingeführt und sind im Wesentlichen
an [KEM97] und [TEI07] orientiert.
2.4.1 Data Definition Language (DDL)
Die Datendefinitionssprache (Englisch: Data Definition Language oder kurz
DDL) ist der Teil von SQL, der die Datenstrukturen definiert. Im Einzelnen
kann man mit der DDL neue "leere" Datenbankstrukturen wie Tabellen, Indizes,
Views und weitere Objekte einrichten, die Strukturdefinition existierender Datenbank-Objekte verändern und Objekte löschen ([PHI02]).
Wie bereits in Kapitel 2.1 vorgestellt wurde, ist die grundlegende Struktur innerhalb einer Datenbank die Tabelle. Um Daten innerhalb einer Tabelle eindeutig
identifizieren zu können, wird die Tabelle mit einem Primärschlüssel (primary
key) ([HES06]) versehen. Der Primarschlüssel wird über ein oder mehrere Attribute der betreffenden Tabelle definiert, mit der Folge, dass die Datensätze innerhalb der Tabelle bei diesen Attributen, den Primärschlüsselattributen, keine
Duplikate enthalten dürfen. Die Identifikation der Datensätze kann daher über
diese Primärschlüsselattribute stattfinden. Häufig werden für Primärschlüssel
sogenannte Autowerte benutzt. Hierbei handelt es sich um Zahlenwerte, die von
DBMS verwaltet werden und autoinkrementell sind.
Man spricht von einem Fremdschlüssel (foreign key) bei einer Tabellenspalte,
wenn sie die Werte des Primärschlüsselattributs einer anderen Tabelle enthält.
Über den Fremdschlüssel einer Tabelle können also Datensätze einer anderen
Tabelle identifiziert werden. Durch einen Fremdschlüssel werden Relationen
zwischen Tabellen ausgedrückt.
13
Im Folgenden werden die wichtigsten Befehle zur Definition der Tabellenstruktur kurz beschrieben. Die Beispiele sind zum Teil aus dem der Arbeit zugrunde
liegenden System VerIS entnommen und damit besonders praxisnah.
CREATE TABLE: Mit diesem Befehl werden die Tabellen angelegt und dadurch ihr Schema bestimmt. Eine Tabelle besteht aus dem Tabellennamen sowie
den Attributen der Tabelle, welche unterschiedliche Datentypen (z.B. INT für
Ganzzahlen oder VARCHAR(x) für ein Textfeld mit der maximalen Länge x)
besitzen können. Die dem Datentyp hinten angestellte Integritätsbedingung NOT
NULL bedeutet, dass leere Einträge für dieses Attribut unzulässig sind. Der Befehl PRIMARY KEY hinter einem Attribut legt dieses als Primärschlüssel der
Tabelle an. Im Beispiel wird das Schema der Tabelle term definiert. Eine Tabelle
kann man mit dem Befehl DROP TABLE (Syntax: DROP TABLE [Tabellenname]) wieder aus der Datenbank entfernen.
CREATE TABLE [term](
myid INT PRIMARY KEY,
id INT NOT NULL ,
name VARCHAR(255) NOT NULL,
term_type VARCHAR(55) NOT NULL,
acc VARCHAR(255) NOT NULL,
is_obsolete LONG NOT NULL,
is_root LONG NOT NULL);
ALTER TABLE: Um nach der Erstellung einer Tabelle ihre Datenstruktur zu
ändern, wird dieser Befehl genutzt. Spalten lassen sich hinzufügen (ADD) und
löschen (DROP). Außerdem kann der Datentyp der Spalte geändert werden
(ALTER, siehe Beispiel).
ALTER TABLE [Tabellenname] ALTER COLUMN [Spaltenname] INT
Ist bei der Konzeption einer Datenbank oder in deren späterem Einsatz klar, dass
gewisse Spalten einer Tabelle häufig zu Abfragezwecken genutzt werden, ist es
möglich, auf diese Attribute einen Index zu setzen. Dabei werden die Werte des
14
entsprechenden Attributs in einer speziellen Indexstruktur, wie zum Beispiel
einem B+-Baum, abgelegt. Damit kann sich der Zeitaufwand für die Suche nach
Werten des mit einem Index belegten Attributs von linear (O(n)) auf logarithmisch (O(log n)) reduzieren. Dadurch wird die Suche nach diesen Feldern zum
Teil enorm bescheunigt. Indizes werden vom DBMS verwaltet. Das folgende
Beispiel erläutert die Erstellung eines Index:
CREATE INDEX: Hiermit wird ein Index auf ein bestimmtes Argument einer
Tabelle gesetzt, um spätere Abfragen zu beschleunigen. Im Beispiel wird ein
Index mit Namen t1 auf das Argument name der Tabelle term gesetzt. Ein Index
kann mit dem Befehl DROP INDEX wieder entfernt werden. Durch das Schlüsselwort UNIQUE wird sichergestellt, dass es sich um einen eindeutigen, also
duplikatfreien Index handelt.
CREATE
([name]);
INDEX
[t1]
ON
[term]
2.4.2 Data Manipulation Language (DML)
Mit der Datenmanipulationssprache von SQL (Englisch: Data Manipulation
Language oder kurz DML) werden Datensätze in die Datenbank eingefügt, in ihr
geändert oder aus ihr gelöscht. Außerdem können die Inhalte der Datenbank ermittelt werden, wobei es möglich ist, über Selektionsbedingungen gezielt Datensätze zu filtern.
Das Einfügen von Datensätzen in die Datenbank kann auf zwei Arten geschehen: entweder durch Angabe der Werte, die ein neuer Datensatz enthalten soll,
oder aber über die Selektion anderer Inhalte der Datenbank. Bei der Einfügeoperation sind vorhandene Integritätsbedingungen zu beachten. So müssen beispielsweise solche Attribute zwingend belegt werden, die entweder als Primärschlüsselattribut oder mit einer Integritätsbedingung NOT NULL definiert sind,
bei den restlichen Attributen darf ein Wert fehlen und wird in der Regel als
NULL-Wert angesehen. Außerdem darf der neu eingefügte Datensatz nicht zu
einer Verletzung der Primärschlüsseleigenschaft führen, das heißt, dass bei Primärschlüsselattributen keine zwei Datensätze identische Inhalte haben dürfen.
Die Verletzung einer Integritätsbedingung führt zum Abbruch der Einfügeoperation.
15
Bei einer Änderung von bereits in der Datenbank gespeicherten Datensätzen
kann der Wert für ein Feld oder für mehrere Felder durch einen neuen, eindeutigen Wert ersetzt werden. Über eine Selektionsbedingung wird dabei eine Menge
von Datensätzen einer Tabelle ausgewählt, deren Feldinhalte dann geändert werden. Sollte mit dieser Selektionsbedingung kein vorhandener Datensatz ermittelt
werden, dann wird die Operation ohne Datenänderung beendet. Für die Änderungsoperation gilt ebenso wie für das Einfügen neuer Datensätze, dass Integritätsbedingungen beachtet werden müssen, was zur Folge hat, dass deren Verletzung auch bei einer Änderung zum Abbruch der Operation führt.
Mit der Löschoperation können vorhandene Datensätze einer Tabelle aus der
Datenbank entfernt werden. Diese Datensätze können ebenfalls über eine Selektionsbedingung ausgewählt werden, ansonsten werden alle Datensätze der genannten Tabelle aus der Datenbank gelöscht. Die Operation wird ohne Änderung
der Datenbasis beendet, wenn keine vorhandenen Datensätze für das Löschen
ermittelt werden können, sei es durch die Angabe einer Selektionsbedingung
oder auch, weil die Tabelle leer ist.
Der folgende Abschnitt zeigt die SQL-Definitionen der bisher beschriebenen
Operationen:
INSERT : Mit diesem Kommando wird eine Menge von Datensätzen in eine
Tabelle der Datenbank eingefügt. Im folgenden Beispiel wird ein einzelner Datensatz in die Tabelle term eingefügt, wobei die Werte der einzelnen Felder vorgegeben werden. Wie bereits geschildert wurde, kann das Einfügen von Datensätzen auch mit Hilfe einer Selektion anderer Inhalte der Datenbank erfolgen –
dies wird hier nicht weiter aufgezeigt.
INSERT INTO term
(myid, id, name, term_type, acc, is_obsolete, is_root)
VALUES
(1, 1, ‘Name’, ‘Type’, ‘acc’, 1, 1);
UPDATE : Über das UPDATE-Kommando kann eine Menge von bereits in der
Datenbank vorhandener Datensätze einer Tabelle geändert werden. Das Beispiel
zeigt die Änderung des Inhalts für das Feld is_obsolete eines Datensatzes der
Tabelle term:
UPDATE term SET is_obsolete = 0 WHERE myid = 1;
16
DELETE: Über das DELETE können in einer Tabelle vorhandene Datensätze
gelöscht werden. Mit der Angabe einer Selektionsbedingung lassen sich die zu
löschenden Datensätze einschränken. Wenn keine Selektionsbedingung verwendet wird, dann wird die entsprechende Tabelle komplett geleert. Das Beispiel
zeigt das Löschen eines Datensatzes (was durch die Verwendung eines Primärschlüsselattributs in der Selektionsbedingung sichergestellt ist) der Tabelle term:
DELETE * FROM term WHERE myid = 1;
Ein weiterer, umfangreicher Einsatzbereich von SQL ist die Formulierung von
Abfragen auf der Datenbank. Bei diesen Abfragen können Felder verschiedener
Tabellen wiedergegeben und komplexe Selektionen formuliert werden. Die
Möglichkeiten werden im Folgenden mit Hilfe von Beispielen aufgezeigt:
SELECT: Über das SELECT-Kommando werden Abfragen von Datenbankinhalten formuliert. Das Ergebnis eines solchen Kommandos ist eine Menge von
Datensätzen, der Ausgabemenge bzw. Ergebnismenge der Abfrage. Die Grundstruktur sieht wie folgt aus:
SELECT <Feldliste>
FROM <Tabellenliste>
WHERE <Selektionsbedingung>;
Die Tabellenliste führt die Tabellen auf, auf die sich die Anfrage bezieht. Mit
der Feldliste werden die Felder benannt, die in der Ausgabemenge aufgeführt
werden sollen. Die benannten Felder müssen sich dabei auf Tabellen der Tabellenliste beziehen, die Werte der Felder können dabei aber auch über Aggregation
gewonnen werden. Über die Selektionsbedingung wird eine Auswahl der Datensätze getroffen, die in die Ausgabemenge übernommen werden sollen. Dabei
können auch mehrere Bedingungen über logische Operatoren (AND, OR) verknüpft werden.
17
Das Beispiel zeigt eine einfache Anfrage, mit der die ID’s aller Datensätze der
Tabelle D_Term ausgegeben werden, deren Eigenschaft Delta_typ den Wert ‚P’
oder den Wert ‚M’ hat:
SELECT ID
FROM D_Term
WHERE Delta_typ = ‘P’ OR Delta_typ = ‘M’;
Aggregationsfunktionen: Wie bereits bei der Beschreibung des SELECTKommandos aufgeführt wurde, kann die Ausgabemenge einer Datenbankabfrage
auch aggregierte Werte enthalten. Hierfür stehen in SQL verschiedene Aggregationsfunktionen zur Verfügung. Damit lassen sich beispielsweise die Anzahl von
Datensätzen, aber auch die Summe oder das Maximum eines Feldes für die selektierten Datensätze ermitteln. Als Beispiel wird eine Abfrage formuliert, die
den höchsten Datumswert (also das letzte Datum) der Spalte datum in der Tabelle D_Term für Datensätze mit dem Wert ‚P’ für das Feld Aenderungstyp angibt:
SELECT MAX([datum]) as Max_Datum
FROM D_term
WHERE Delta_typ = 'P';
JOIN: Bei einer Abfrage über die Inhalte mehrerer Tabellen kann sich die Selektion auf einzelne Attribute der beteiligten Tabellen beziehen, es ist aber auch
möglich, die Relationen von zwei Tabellen mit Hilfe eines Joins auszuwerten.
Dabei werden die Inhalte der entsprechenden Attribute der beteiligten Tabellen
miteinander in Beziehung gebracht. Zum Beispiel findet eine Selektion auf die
Datensätze der beiden beteiligten Tabellen statt, die eine Übereinstimmung in
den für den Join verwendeten Attributen haben. Ohne die Formulierung eines
derartigen Joins würde bei der Anfrage über zwei Tabellen deren Kreuzprodukt
in die Ergebnismenge aufgenommen.
18
Als Beispiel wird die Selektion über die Tabellen term und D_Term auf die Datensätze eingeschränkt, die eine Übereinstimmung für das Feld ID haben:
SELECT term.Name, D_Term.Name_old, D_Term.Name_new
FROM term INNER JOIN D_term
ON term.ID = D_term.ID;
UNION: Wie bereits erwähnt wurde, besteht das Ergebnis einer Abfrage aus
seiner Ergebnismenge. Man kann eine Abfrage aber auch strukturieren und die
Zwischenergebnisse einzelner Unterabfragen, die aus voneinander unabhängigen
SELECT-Kommandos bestehen, über Mengenoperationen miteinander zu einer
einzelnen Ergebnismenge verknüpfen. Dabei wird die Mengen-Vereinigung über
einen UNION-Operator ermöglicht. Voraussetzung für dessen Anwendung ist,
dass die Ergebnismengen der beteiligten Unterabfragen jeweils die gleichen Felder enthalten. Als Beispiel wird hier die Vereinigung aller Datensätze der Tabelle D_Term des Änderungstyps ‚P’ mit denen des Änderungstyps ‚M’ ermittelt:
SELECT D_Term.Name_old as Name
FROM D_Term
WHERE D_Term.Delta_typ= ‘M’
UNION
SELECT D_Term.Name_new as Name
FROM D_Term
WHERE D_Term.Delta_typ= ‘P’;
IN / NOT IN: Eine weitere Form der Mengenoperation ist die Bedingung, dass
ein Wert in einer Menge, beispielsweise der Ergebnismenge einer Unterabfrage,
enthalten ist, bzw. über die logische Verneinung, dass ein Wert in einer Menge
nicht enthalten ist. Als Beispiel werden die Namen aller Datensätze der Tabelle
term ausgegeben, die nicht in der Tabelle D_term enthalten sind:
SELECT term.Name
FROM term
WHERE term.ID NOT IN
(SELECT D_term.ID
FROM D_term);
19
2.5. Versionsmanagement
2.5.1 Übersicht
Ein Versionsmanagement dient allgemein dazu, einen historischen Verlauf über
gleichartige, veränderbare ‚Einheiten’ beschreiben zu können. Über ein Versionsmanagement lassen sich beispielsweise im Rahmen der Softwareentwicklung
die Quelldateien für ein Computer-Programm verwalten. Dabei werden die von
den Programm-Entwicklern freigegebenen Entwicklungsstände einzelner Quelldateien in einem Versionsmanagement-System (auch version control system)
verwaltet. Dies ist damit ein wesentlicher Bestandteil des SoftwareKonfigurations-Managements.
Jede über das Versionsmanagement verwaltete Einheit kann in mehreren Versionen vorliegen, wobei eine einzelne Version jeweils eine zeitliche Gültigkeit hat.
Bei der Software-Entwicklung liegt beispielsweise eine Quelldatei in mehreren
Versionen vor. Der Gültigkeitsbeginn der Version einer Quelldatei ist dann der
Moment, an dem ein Entwickler den Stand der Quelldatei, der seine Änderungen
enthält, in das Repository des Versionsmanagements eingefügt hat, und das Gültigkeitsende liegt an dem Zeitpunkt, an dem eine neue Version der Quelldatei
eingefügt wurde.
Mit dieser Abfolge der einzelnen Versionen lassen sich über ein Zeitintervall
jeweils eindeutige Zustände der verwalteten Einheiten feststellen. Das verfügbare Zeitintervall kann dabei beispielsweise bei der Softwareentwicklung von dem
Beginn der Entwicklung bis in die Gegenwart laufen. Auch eine Reproduktion
alter Versionen der Quelldateien, das heißt durch neuere Versionen bereits ersetzte Zustände, ist mit Hilfe des Versionsmanagements möglich.
2.5.2 Differenzspeicherung
Um den Speicherverbrauch eines Versionsmanagement-System gering zu halten,
werden für die einzelnen verwalteten Einheiten, sofern deren Art dies erlaubt,
nicht alle vorhandenen Versionen jeweils komplett gespeichert, da dies zu einem
extrem großen Bedarf an Speicherplatz führen würde. Ein gängiges Verfahren,
den Speicheraufwand zum Beispiel von textuellen Informationen erheblich zu
20
reduzieren, ist die Delta-Kodierung oder auch Differenzspeicherung (ebenfalls
delta encoding oder delta compression).
Bei der Differenzspeicherung handelt es sich um eine Möglichkeit der Datenkompression. Hierbei liegt nur die aktuelle Version einer Daten-Einheit,
beispielsweise einer Textdatei, in ihrem vollen Umfang vor, darüber hinaus werden die Differenzen zwischen jeweils zwei aufeinander folgenden Versionen der
Daten-Einheit gespeichert. Praktische Einsatzbereiche der Differenzspeicherung
sind beispielsweise die bereits erwähnten Versionsmanagement-Systeme für die
Software-Entwicklung, aber auch Komprimierungsverfahren von Filmdateien
wie MPEG-Formate nutzen dieses Vorgehen.
Mit Hilfe der Differenzspeicherung ist die Rekonstruktion alter Versionen der
Daten möglich. Ausgehend von einem vorhandenen Datenstamm und unter
Ausnutzung der gespeicherten Differenz-Informationen kann die Version eines
beliebigen Zeitpunkts wiederhergestellt werden.
In dem Bereich von Datenbanken kann man mittels der Differenzspeicherung die
Änderungen einzelner Datensätze innerhalb einer Datenbank erfassen. Dazu
wird zu einer einzelnen Tabelle zusätzlich eine so genannte Delta-Tabelle eingerichtet, die allein der Aufnahme von Datenänderungen innerhalb ihrer Referenztabelle dient. Eine solche Delta-Tabelle enthält neben einem Attribut für einen
Zeitstempel, an dem also die Änderung wirksam wurde, auch Informationen über die Art der Datenänderung (Einfüge-, Änderungs- oder Löschoperation) sowie die Inhalte der Änderung, also die Inhalte der geänderten Attribute im Zustand vor und nach der Änderung.
Delta-Tabellen dienen aber nicht nur der platzsparenden Speicherung
sequenzieller Daten (=Daten, die in mehreren Versionen vorliegen), denn mit
Hilfe der Delta-Tabellen erhält der Benutzer zudem Informationen über Art und
Ausmaß aller vorgenommenen Änderungen. Durch gezielte Abfragen auf diesen
Tabellen wird es dem Benutzer zum Beispiel ersichtlich, wie viele Datensätze
sich in einem bestimmten Zeitraum geändert haben und um welchen Typ von
Änderung (hinzugefügte Daten, gelöschte Daten, modifizierte Daten) es sich
hierbei handelt.
Im folgenden Schaubild wird an einem Beispiel veranschaulicht, wie eine solche
Differenzspeicherung aussehen könnte. Es gibt jedoch verschiedenste Möglichkeiten, eine Differenzspeicherung und eine Rekonstruktion alter Versionen der
Daten durchzuführen. Sie werden im Kapitel 4 genauer erläutert.
21
Abbildung : Differenzspeicherung
2.5.3 Versionen und Updates in Datenbanken
Für das Versionsmanagement von Datenbanken müssen zwei Versions-Arten
unterschieden werden: der Versionsstand einer gesamten Datenbasis und der
Versionsstand eines einzelnen Datensatzes innerhalb der Datenbank. Während
eine Datenbasis beispielsweise täglich einen neuen Gültigkeitsstand repräsentieren kann, ist es möglich, dass die Anzahl der Datensätze, die zwischen zwei aufeinander folgenden Tagen geändert wurden, gering ist. Ein einzelner Datensatz
kann also einen größeren Gültigkeitszeitraum haben, als dies durch das Versionierungsinterval der Datenbasis nahegelegt wird.
Bei unterschiedlichen Versionen einer Datenbasis handelt es sich um vollkommen voneinander getrennte Daten. Der Benutzer erhält keine Informationen darüber, ob und in welchem Ausmaß sich die Daten geändert haben. Wenn also eine
lokale Datenbank mit einer solchen Datenbasis synchronisiert werden soll, dann
müssen die bereits existierenden Daten im vollen Umfang durch die aktuelle
Version der Daten ersetzt werden. Dies hat natürlich einen erheblichen und unnötigen Mehraufwand zur Folge, da die Daten immer im Ganzen ersetzt werden
müssen.
Wenn hingegen eine Datenbank Updates ihrer Daten zur Verfügung stellt, dann
wird eine vorhandene Datenbasis alleine durch das Einspielen dieser Aktualisie-
22
rungen auf den neuesten Stand gebracht. Es werden dabei nur die Datensätze
ausgetauscht, hinzugefügt oder gelöscht, welche von tatsächlichen Änderungen
betroffen sind. Mittels des Zeitstempels der Änderungen und der Datenbasis
lässt sich genau bestimmen, bis zu welchem Zeitpunkt die Änderungen auf den
Daten erfolgen müssen.
Im Falle der Gene Ontology liegen die Daten lediglich in Form von Versionen
vor. Updates für vorhandene Daten sind nicht erhältlich. Der Anwender hat die
Möglichkeit zwischen Datensätzen zu wählen, die täglich, wöchentlich oder monatlich neu erstellt und im Internet verfügbar gemacht werden, aber unabhängig
von vorherigen Daten für sich alleine stehen. Um ein Versionsmanagement zu
konzipieren und zu erstellen, ist also zunächst ein Vergleich zwischen zwei bzw.
mehreren Versionen notwendig, um die Unterschiede zwischen diesen Versionen sichtbar und nutzbar zu machen. Hierzu wird in der vorliegenden Arbeit die
Differenzspeicherung mit Zeitstempeln verwendet.
23
3. Ontologien
In diesem Kapitel wird der Begriff Ontologie definiert und näher erläutert. Insbesondere wird dabei auf die Gene Ontology eingegangen, die als Datengrundlage für das im Rahmen dieser Diplomarbeit entwickelte Versionsinformationssystem (VerIS) dient und an deren Beispiel ein Konzept für ein Versionsmanagement entwickelt werden soll. Des Weiteren werde ich in diesem Abschnitt
Beispiele anderer Ontologien vorstellen und die Repräsentation von Ontologien
in relationalen Datenbanken bzw. die Abbildung einer Ontologie auf ein ERSchema beschreiben.
3.1. Begriffsdefinition
Der Begriff Ontologie stammt aus dem Griechischen und bezeichnet wörtlich
übersetzt die Lehre vom Seienden. Die philosophische Disziplin Ontologie erklärt die Grundstrukturen des Seienden [PÖG82]. Methodisch geht diese Richtung der Philosophie meist den Weg, allgemeine Strukturen der Wirklichkeit
mittels Sprachanalyse zu erfassen, die Wirklichkeit also durch Kategorien wie
Ding, Eigenschaft oder Ereignis und Attribute der Kategorien wie Teil oder
Ganzes darzustellen. Dabei kommt man zu Fragen wie „Ist eine Entität nur ein
Bündel ihrer Attribute?“
In der Informatik wird der Begriff Ontologie entsprechend verwendet, um einen
Teil der Wirklichkeit durch eine Menge von Begriffen und Beziehungen dieser
Begriffe untereinander darzustellen. Dem liegt folgendes Problem zugrunde:
Der Mangel an einem gemeinsamen Verständnis (shared understanding) führt oft
zu Kommunikationsproblemen zwischen Menschen, Organisationen, Systemen
24
und kann die Interoperationsfähigkeit, die Wiederverwendbarkeit und die gemeinsame Nutzung von Daten behindern oder gar verhindern ([UG96]).
Ein gemeinsames Verständnis meint in diesem Zusammenhang eine verständliche Terminologie und ein einheitliches Konzept. Eine Ontologie wird gekennzeichnet durch folgende Merkmale:
•
•
•
•
•
Formale Spezifikation
Definiertes Basisvokabular
Explizite Definition von Entitäten und deren Attributen, Eigenschaften
Festlegung der Beziehungen, Relationen zwischen den Entitäten
Definition von Axiomen, d.h. Aussagen, die innerhalb der Ontologie immer wahr sind
• Angabe von Vererbungsbeziehungen zwischen den Entitäten: Eine Entität
erbt alle Attribute und Relationen einer anderen Entität
Eine Definition des Begriffs Ontologie hat Tom Gruber gegeben:
„An ontology is a specification of a conceptualization.“ [GRU93]
Eine andere Definition geben Professor Dr. Rudi Studer et al.:
„Eine Ontologie stellt [..] ein formalisiertes Modell der Welt oder eines Teils
der Welt dar [...].“ [STU01]
Nachfolgende Abbildung aus [WIK07] zeigt an einem Beispiel den Aufbau einer
Ontologie und den Unterschied zwischen Instanzen einer Ontologie und der Ontologie selbst.
25
Abbildung : Aufbau einer Ontologie
Der Erstellung einer Ontologie liegt immer ein Zweck zugrunde, so dass zwei
Ontologien zum gleichen Bereich sich nicht nur durch eine verschiedene Terminologie, sondern auch durch eine unterschiedliche Konzeptualisierung auszeichnen können. So können beispielsweise einige Attribute oder Entitäten für einen
bestimmten Zweck sinnlos oder überflüssig sein.
3.2. Beispiele für Ontologien
In einigen Bereichen haben sich de facto Standardontologien etabliert. Sie sollen
an dieser Stelle kurz beschrieben werden.
26
3.2.1 Foundational Model of Anatomy (FMA)
Die FMA Ontologie ([FMA07]) wird von der medizinischen Fakultät der University of Washington entwickelt und verfolgt das Ziel, ein Modell der Struktur
des menschlichen Körpers zu erstellen. Die Ontologie selbst kann dazu verwendet werden nicht nur die Instanz Mensch darzustellen, sondern auch jedes andere
Lebewesen.
Die Ontologie besteht aus vier Grundkomponenten:
• Den anatomischen Entitäten mit ihren Attributen
• Den Relationen der Entitäten untereinander, d.h. die part-of-Beziehungen
(z.B. ein bestimmter Knochen oder Muskel ist Teil des Unterarms) und
den räumlichen Beziehungen der Entitäten untereinander (z.B. der Kopf
ist über und verbunden mit dem Hals)
• Zeitlichen Veränderungen der Entitäten (z.B. die Veränderungen der Organe im Verlauf der Entwicklung des Fötus im Mutterleib)
• Prinzipien und Regeln, die die anderen drei Komponenten betreffen.
Die FMA enthält momentan über 120000 Entitäten und 2.1 Millionen Relationen.
3.2.2 General Ontology for Linguistic Description (GOLD)
Die Idee GOLD wurde 2003 im Rahmen seiner Dissertation von Scott Farrar
erdacht, um die Struktur von aussterbenden Sprachen festzuhalten. Die erste
Version von GOLD entwickelte Will Lewis an der Universität Arizona. Seit November 2004 wurde GOLD stetig von der neu gegründeten GOLD Community
([GOL07]) weiterentwickelt. GOLD bildet die Struktur einer Sprache auf die
Aspekte Fall, Geschlecht, Zeit, Aussprache, Vokabeln, etc. ab. Jede Sprache
kann als Instanz dieser Ontologie dargestellt werden.
3.2.3 Semantic Web
Das Semantic Web ist eine Erweiterung des WWW. Neben für Menschen lesbarem Text enthalten Web-Seiten auch maschinenlesbare Informationen, die die
Semantik der Seite automatisch auch für Programme verarbeitbar macht. Diese
27
Daten werden in der Wissens-Repräsentationssprache Web Ontology Language
(OWL) ausgedrückt. Das Semantic Web und OWL wurden vom W3C spezifiziert und gehen auf eine Initiative von Tim Berners-Lee zurück.
3.3. Repräsentation von Ontologien in Datenbanken
Entitäten und Relationen sind bekannte Konzepte der relationalen Datenbankmodellierung. Allein das Axiomensystem und das Vererbungskonzept der Ontologien bilden bei der relationalen Modellierung ein Problem.
3.3.1 Modellierung von Vererbung
Die Abbildung von Vererbung in relationalen Datenbanken wurde im Rahmen
der EJB3.0 Spezifikation [MK06] eingehend untersucht. Es gibt grundlegend
drei Strategien, Vererbung in einem Datenbankschema zu persistieren. Die verschiedenen Strategien werden nachfolgend an einem Beispiel verdeutlicht. Gegeben sei folgende Ontologie und diese soll in einem Datenbankschema abgebildet werden :
String
Farbe
Fahrzeug
Fahrrad
Gänge
Integer
Auto
PS
Integer
Schiff
BRT
Integer
28
Ein-Tabellen-Strategie
Bei Anwendung dieser Strategie werden alle Instanzen, die zu einer Vererbungshierarchie gehören, in einer Tabelle abgelegt.
Farbe
Gänge
PS
BRT
Typ
Die Spalte „Typ“ gibt an, welche Entität die jeweilige Zeile vertritt. Der Typ
kann Fahrzeug, Fahrrad, Auto oder Schiff sein.
Tabelle-pro-Enität-Strategie
Für jede Entität wird eine eigene Tabelle erzeugt.
Tabelle Fahrzeug
Farbe
Tabelle Fahrrad
Farbe
Gänge
Tabelle Auto
Farbe
PS
Tabelle Schiff
Farbe
BRT
29
Join-Strategie
Jede Entität kann nur mittels eines Joins abgefragt werden. Die Eltern-KindKind-Beziehung wird über einen Fremdschlüssel realisiert.
Tabelle Fahrzeug
PrimaryKey_FahrzeugID
Fahrzeug
Tabelle Fahrrad
Gänge
ForeignKey_FahrzeugID
Tabelle Auto
PS
ForeignKey_FahrzeugID
Tabelle Schiff
BRT
ForeignKey_FahrzeugID
Jede der drei Strategien hat Vor- und Nachteile, die den Speicherplatzverbrauch,
die Abfragegeschwindigkeit und Wartbarkeit betreffen. Eine Diskussion dieser
Strategien soll an dieser Stelle vermieden werden, da hier nur die grundsätzliche
Realisierung der Abbildung von Ontologien in eine relationale Datenbank gezeigt werden soll.
3.3.2 Modellierung von Axiomen
Axiome einer Ontologie können durch Kreuztabellen und Constraints in die relationale Welt überführt werden. Gerade weil Axiome in einer gegebenen Ontologie unveränderbar sind, ist es stets möglich, ein relationales Schema so zu realisieren, dass ein Verstoß gegen die Axiome unmöglich gemacht wird.
30
3.4. Die Gene Ontology
Das Human Genome Project und andere Projekte zur Entschlüsselung des Erbguts verschiedener Arten erfordern die Zusammenarbeit zwischen Biochemie
und Genetik, die aufgrund der großen Datenvolumina in erheblichem Maße
durch automatisierten Datenaustausch unterstützt werden muss [SK].
Deswegen ist gerade in diesem Bereich eine standardisierte Ontologie, die Begriffe wie Art, Spezies, Prozess, Sequenz etc. definiert, wichtig. Das Gene Ontology Consortium hat mit dem Aufbau der Gene Ontology [GEN07] einen Beitrag zur Integration der gesamten Biologie und Genetik geleistet. Die Gene Ontologie umfasst Termini und Definitionen, die unabhängig von Spezies sind,
sich auf zentrale biologische Kategorien wie Zellen, Wachsen, Sterben, … beziehen.
Die Gene Ontology ist in drei Domänen unterteilt:
• Cellular Component (ca. 1900 Terme),
• Biological Process (ca. 11000 Terme) und
• Molecular Function (ca. 8000 Terme).
Alle Begriffe dieser drei Domäne können durch die zwei Relationen „part_of“
und „is_a“ verknüpft werden. Verknüpfungen zwischen den Domänen existieren
nicht – nur innerhalb einer Domäne. Die Gene Ontology ist auf eine relationale
mySQL Datenbank abgebildet.
Die Betrachtung des Versionierungsproblems bzw. der Verfolgung von Änderungen der Gene Ontology Datenbankeinträge wird sich auf die Haupttabelle
„term“ beziehen, daher wird an dieser Stelle nicht weiter auf das Schema der
Gene Ontology eingegangen. Alle Daten der Gene Ontology sind frei zugänglich
und können kostenlos von der Web-Seite des Gene Ontology Consortiums bezogen werden.
Die Daten der Gene Ontology sind in den Formaten mySQL und GO RDF-XML
verfügbar. Für einen Transfer in eine Access-Datenbank ist das mySQL-Format
am geeignetsten.
31
Die Daten können in drei verschiedenen „Release-Zuständen“ bezogen werden :
Monthly Release: Die Daten werden zu Beginn jedes Monats (gewöhnlich der 6.-8. Tag des Monats) zur Verfügung gestellt. Sie enthalten über
die Basisdaten hinaus noch zusätzliche IEA-Annotationen, die allerdings
für ein Versionsmanagement und daher auch für diese Arbeit nicht von
Interesse sind. Alle monatlichen Veröffentlichungen von Dezember 2002
an sind im Archiv der Website zugänglich.
Weekly Release: Die wöchentlichen Versionen der Daten enthalten die
Basisdaten ohne die IEA-Annotationen. Alle wöchentlichen Versionen
der letzten 6 Monate können im Archiv abgerufen werden. Für die Zeit
davor steht lediglich ein wöchentliches Release pro Monat (meist in der
Monatsmitte) zur Verfügung. Außerdem sind nur Daten bis ca. 2 Jahre
vor dem aktuellen Datum verfügbar.
Daily Release: Auch die täglichen Versionen der Daten beinhalten nur
die Basisdaten. Abrufbar sind die letzten 3-4 Monate. In der Zeit gibt es
pro Woche nur eine tägliche Version. Und dies gilt auch nur für den Zeitraum eines Jahres. Tägliche Versionen, die älter als ein Jahr sind, werden
nicht bereitgestellt.
Unabhängig von Format und Release der Daten ist es aber nur möglich, die
Basisdaten komplett, also als Versionen zu erhalten. Updates der Datenbasis
sind nicht verfügbar.
32
4. Konzept eines Versionsmanagement
Beispiel der Gene Ontology
am
Die Datenbestände großer Ontologien werden dem Anwender meist in verschiedenen Formaten über das Internet zugänglich gemacht. Dieser kann nun die Daten in ein beliebiges Datenbanksystem einspeisen, um mit ihnen zu arbeiten. Da
sich die Datenbestände aber unter Umständen in sehr kurzen Abständen ändern
können und der Benutzer mit möglichst aktuellen Daten arbeiten möchte, ist ein
Abgleich der vorhandenen, bereits eingelesenen Datenbasis mit den neuen, aktuellen Daten notwendig. Verfügt eine Datenbank über ein Versionsmanagement,
werden Informationen über die Änderungen, die zwischen den beiden Versionen
der Datenbank aufgetreten sind, genutzt, um nur diejenigen Daten auszutauschen, die sich tatsächlich geändert haben. Es werden also Updates und Änderungsinformationen für die Daten bereitgestellt.
Bei der Gene Ontology handelt es sich um eine schnell gewachsene und schnell
wachsende Ontologie, die vor allem von Biologen genutzt und entworfen wurde.
Leider treten bei solchen Projekten in der Praxis oftmals konzeptuelle Fehler
bzw. Unzulänglichkeiten auf. Ein Konzept im Umgang mit den verschiedenen
Versionen und Änderungen der Datenbasis ist für eine Ontologie dieser Größenordnung eigentlich unverzichtbar. Die Gene Ontology verfügt jedoch nicht über
ein solches Versionsmanagement.
Es sind nur Versionen der Daten verfügbar. Das heißt, dass der Benutzer ausschließlich dazu gezwungen ist, den gesamten Datenbestand aus der Gene Ontology wieder in das von ihm genutzte Datenbanksystem zu importieren. Oftmals
ist dies aber unnötig, da sich kein Datensatz oder nur eine sehr geringe Anzahl
von Datensätzen geändert hat. Dagegen kann jedoch ein Datenaustausch bei vielen Änderungen auf einmal absolut notwendig sein. Da dem Benutzer aber Informationen über das Änderungsverhalten der Daten (z.B. „Wann haben sich wie
viele Datensätze geändert?“) fehlen, muss ein oft sinnloser Austausch der Daten
33
vorgenommen werden. Dieser Vorgang ist sehr ineffizient, da der gesamte Datenbestand einer großen Ontologie unter Umständen sehr mächtig sein kann. Im
Fall der Gene Ontology hat der komplette Datenbestand die Größe von ca. 9
Megabyte.
Sinnvoller wäre es daher, nur die tatsächlichen Änderungen der Daten neu in das
vom Benutzer verwendete Datenbanksystem zu integrieren. Da sich zwischen
zwei Versionen üblicherweise nur ein geringer Prozentsatz der Daten ändert,
bliebe die Mehrzahl der unveränderten Daten unangetastet. Dies würde zu einem
effizienteren Datenaustausch führen.
In diesem Kapitel wird ein Konzept für eine mögliche Umsetzung eines Versionsmanagements für die Gene Ontology vorgestellt. Es wird herausgearbeitet,
wie ein Abgleich der vorhandenen Daten mit den aktuellen Daten aussehen
kann. Besonderes Augenmerk gilt hierbei der Gewinnung und der Speicherung
der Änderungen, die durch einen solchen Abgleich ermittelt werden. Ziel ist es,
diese Änderungsdaten sinnvoll zu speichern, um daraus nützliche Informationen
über das Änderungsverhalten zu erhalten. Darüber hinaus soll ein schneller
Zugriff auf alte Versionen der Daten möglich gemacht werden, die sich mit Hilfe
der Datenbasis und den Änderungsdaten bestimmen lassen.
Zunächst wird das Änderungsverhalten der Daten der Gene Ontology am Beispiel der Haupttabelle term analysiert (4.1). Die daraus gewonnenen Erkenntnisse motivieren den Abschnitt über die Effizienzprobleme bei Datenbanken, bei
denen ein Versionsmanagement nicht vorhanden ist (4.2). In Kapitel 4.3 wird
dann ein Konzept einer möglichen Umsetzung eines Versionsmanagement erarbeitet. Bei dem „Schlüsselproblem“ in Kapitel 4.4 handelt es sich um ein spezifisches Problem der Gene Ontology, welches im Verlauf der Arbeit deutlich
wurde.
4.1. Untersuchung
Ontology
des
Änderungsverhaltens
der
Gene
Die Gene Ontology besteht aus einer Vielzahl von Tabellen und Relationen zwischen diesen Tabellen. Eine genaue Analyse des Änderungsverhaltens der gesamten Gene Ontology würde daher den Rahmen dieser kurzen Untersuchung
sprengen. An dieser Stelle sei lediglich eine Übersicht über die Anzahl der Datensätze der größten Tabellen der Gene Ontology gegeben :
34
Tabellenname
graph_path
term_dbxref
dbxref
term
term_definition
Anzahl der
Datensätze
1.848.357
91.559
36.123
22.342
21.446
Abbildung : Die größten Tabellen der
Gene Ontology (Stand September 2006)
In diesem Abschnitt soll das Änderungsverhalten der Gene Ontology am Beispiel der Tabelle term genauer untersucht werden. Es handelt dabei um die
Haupttabelle der Gene Ontology, in der die Termnamen der drei Domänen („biological_process“, „cellular_component“ und „molecular_function“), sowie eine
vierte Gruppe von unterschiedlichen Typen (z.B. „part_of“-Beziehung) abgelegt
sind. Die Tabelle term enthält ca. 20.000 Datensätze.
Abbildung :Auszug der Tabelle term
Diese Tabelle wird auch exemplarisch als Datenquelle für das dieser Arbeit
zugrundeliegende Datenbanksystem VerIS genutzt. Da Informationen über das
Änderungsverhalten der Gene Ontology nicht vorliegen, wurden die Daten für
die folgende Untersuchung durch das System VerIS gewonnen.
35
Einen ersten Überblick über das Änderungsverhalten erhält man, indem
Um einen ersten Überblick zu bekommen, betrachtet man die Versionen von
Beginn der Bereitstellung der Daten bis zum jetzigen Zeitpunkt. Versionen der
Daten der Gene Ontology sind ab dem Stand Januar 2003 im Internet verfügbar.
Unten stehende Tabelle zeigt die Gesamtanzahl der Änderungen seit diesem
Zeitpunkt. Ein Vergleich der Versionen wurde am 1. Januar eines jeden Jahres
durchgeführt.
Jahr
Anzahl der Änderungen
2003
8947
2004
2844
2005
3169
2006
3086
Abbildung : Jährliche Änderungen
Diese Tabelle zeigt jedoch nicht die gesamte Anzahl der Änderungen in diesem
Zeitraum. Ein Datensatz kann sich innerhalb eines Jahres unter Umständen
mehrfach ändern, diese Änderungen würden bei einem jährlichen Abgleich mit
den Daten nur als eine einzige gezählt werden. Da die täglichen Versionen aber
nur im Zeitraum der letzten 3 Monate erhältlich sind, ist eine genaue Bestimmung der gesamten Änderungen nicht möglich. Um dennoch das Vorhandensein
von Mehrfachänderungen der Datensätze zu belegen, wird folgender Vergleich
angestellt: Summiert man die Änderungen in oben genannter Tabelle (jährlicher
Abgleich) auf, so erhält man 18.046 Änderungen. Führt man im gleichen Zeitraum, aber im 3-monatlichen Abgleich, dieselbe Abfrage durch, so beträgt die
Anzahl der Änderungen 45.351. Dies zeigt, dass es zu einer erheblichen Mehrfachänderungen von Datensätzen kommt.
Um den genauen Verlauf der Änderungen zu verfolgen, muss also ein täglicher
Abgleich mit den Daten erfolgen. Folgendes Schaubild zeigt die Anzahl der Änderungen, die im September 2006 durchgeführt wurden.
36
Abbildung : Änderungen im September 2006
Es ist deutlich zu erkennen, dass das Änderungsverhalten der Tabelle term erheblichen Schwankungen unterliegen kann. Dieses Beispiel wurde extra ausgewählt, um zu zeigen, dass es wichtig ist einen täglichen Abgleich mit den Daten
der Gene Ontologie durchzuführen, um stets mit aktuellen Daten zu arbeiten.
Darüber hinaus zeigt dieses Beispiel jedoch auch, dass eine tägliche neue Version der Daten oftmals sinnlos in ein Datenbanksystem eingebunden wird, da an
vielen Tagen keine Änderungen auftreten.
4.2. Probleme bei fehlendem Versionsmanagement
Anhand der im letzten Abschnitt gesammelten Informationen über das Änderungsverhalten der Gene Ontology wird in diesem Abschnitt deutlich gemacht,
zu welchen Problemen bezüglich der Effizienz und des Informationsmangels es
bei fehlendem Versionsmanagement kommen kann. Im Wesentlichen gibt es
drei Hauptprobleme, die im weiteren Verlauf dieses Kapitel kurz skizziert werden sollen.
4.2.1 Ineffizienter Datenaustausch
Nutzt eine Datenbank kein Versionsmanagement, werden nur Versionen und
keine Updates der Datenbank angeboten. Das bedeutet, dass man einzelne Tabellen bzw. die komplette Datenbasis nur als Ganzes und nicht nur die tatsächlich geänderten Datensätze der Datenbank erhält. Falls sich die Daten jedoch
kaum bzw. nur sporadisch ändern, führt dies zu einem unnötigen Aufwand
37
bezüglich der Netzlast für Downloads der Datenbank und vor allem zu einer Flut
sinnloser Datenbankzugriffe. Das Problem wird durch ein kleines Beispiel aus
der Gene Ontology deutlich:
Über einen (statistisch relevanten) Zeitraum von einem Jahr will ein Benutzer
mit den Daten der Gene Ontology in einem eigenen Datenbanksystem arbeiten.
Er möchte stets mit den aktuellsten Daten arbeiten. Daher müssen täglich die
Daten via Internet bezogen werden und in das Datenbanksystem des Nutzers
eingebunden werden. Betrachtet man nun ausschließlich die Haupttabelle term,
so müssen täglich ca. 20.000 Datensätze zunächst gelöscht und dann wieder einfügt werden (also ca. 40.000 Datenbankänderungen pro Tag). Das entspricht im
Jahr ca. 15 Millionen Datensätzen, die verändert werden müssen. Dem gegenüber stehen allerdings nur ca.3.000 bis 8.000 tatsächlich veränderte Datensätze,
die im Falle eines vorhandenen Versionsmanagements hätten geändert werden
müssen, da mit dem Prinzip der Updates nur tatsächlich geänderte Datensätze
ausgetauscht werden.
Das bedeutet, dass über 99 Prozent der Daten sinnlos ausgetauscht wurden bzw.
weniger als ein Prozent der Änderungen notwendig waren. In diesem Zeitraum
wäre zusätzlich eine Netzlast durch Downloads der Datenbank von ca. 3 GB entstanden (für die komplette Datenbank jeweils ca. 9 Megabyte pro Tag), die ebenfalls deutlich und im ähnlichen Verhältnis hätte reduziert werden können. Zu
beachten ist ebenfalls, dass dieses Beispiel sich ausschließlich auf die Tabelle
term bezog. Wenn man diese Betrachtungen auf die komplette Datenbasis der
Gene Ontology erweitern würde, so wäre die Anzahl sinnloser Datenbankzugriffe deutlich höher.
Um also nicht immer die komplette Datenbasis (meist unnütz) auszutauschen
und damit enorme Kosten bezüglich Netzauslastung und Datenbankzugriffen zu
verursachen, sollte man die Änderungen an der Datenbasis so organisieren, dass
möglichst nur die geänderten Datensätze ausgetauscht werden und dem Benutzer
damit die Möglichkeit von Updates der Daten gegeben wird.
4.2.2 Mangelnde Informationen über Änderungen
Dem Benutzer der Daten der Gene Ontology stehen zwar sämtliche Daten zur
Verfügung, Informationen über den Verlauf der Änderungen in Art und Anzahl
werden jedoch gar nicht angeboten. So sind zum Beispiel sämtliche Informationen über Änderungen aus Kapitel 4.1 (Untersuchung des Änderungsverhaltens)
38
nicht aus der Gene Ontology entnommen, sondern wurden mit dem in dieser
Arbeit entwickelten System VerIS ermittelt. Der Benutzer muss also ohne jegliche Kenntnis über den zeitlichen Verlauf der Änderungen arbeiten.
Wie die Untersuchung des Änderungsverhalten gezeigt hat, wird die Datenbasis
nicht kontinuierlich geändert, sondern unterliegt Schwankungen im Änderungsverhalten, die bei Ontologien durchaus üblich sind. An dieser Stelle sei einmal
das Änderungsverhalten der Tabelle term im September 2006 veranschaulicht:
Abbildung : Anzahl der Änderungen im September 2006
An nur 8 Tagen werden die Daten der Tabelle term überhaupt geändert, und dabei ist meistens nur eine sehr geringe Anzahl von Datensätzen betroffen. An einem Tag (19.09.2006) jedoch werden 828 Änderungen vorgenommen, was sogar 25% der Änderungen entspricht, die im gesamten Jahr 2006 stattgefunden
haben.
Da dem Benutzer jedoch diese wichtigen Informationen fehlen, ist nach wie vor
ein täglicher Austausch der Datenbasis nötig, um mit den aktuellsten Daten zu
arbeiten. An zwei Dritteln der Tage ist dies allerdings nicht notwendig. Stünden
dem Anwender also diese und ähnliche Informationen zur Verfügung, könnte er
anhand dieser Informationen selbst entscheiden, wann und ob ein Abgleich mit
der Datenbasis im Internet notwendig ist.
Darüber hinaus sind keine Informationen über die Art der Änderungen verfügbar. Diese wichtigen Angaben sind aber für Informationen über Verlauf und
Entwicklung der Gene Ontology entscheidend.
• Wie viel Datensätze haben sich geändert?
• Welche Arten von Änderungen (Einfügungen, Löschungen, Modifikationen) gab es? Wie viele waren es?
39
• Wurde ein Datensatz mehrmals modifiziert?
• Welches Argument des Datensatzes wurde modifiziert?
Diese und andere Fragen können ohne ein klares Konzept für das Änderungsverhalten nicht beantwortet werden.
4.2.3 Mangelnder Zugriff auf alte Versionen
In manchen Fällen ist es wünschenswert, mit verschiedenen Versionen der Daten
zu arbeiten, um Unterschiede in deren Verhaltensweisen zu ergründen. Diese
unterschiedlichen Versionen der Tabellen muss man ohne Versionsmanagement
stets im Datenbanksystem als materialisierte Tabellen halten. Es ist sehr schwer.
bei der „Flut“ von Versionen den Überblick zu behalten.
Außerdem sind nicht alle täglichen Versionen von Daten der Gene Ontology im
Internet verfügbar. Je weiter das Datum der gewünschten Version zurückliegt,
desto weniger Releases werden angeboten, so können etwa Versionen, die bereits mehr als 6 Monate zurückliegen, nur noch in monatlichen Releases bezogen
werden.
Mit Hilfe eines Versionsmanagements und dadurch einer Speicherung der Änderungsdaten ließen sich alte Datenbestände durch Abfragen und Views rekonstruieren, so dass eine physische, materialisierte Vorhaltung aller Versionen
nicht mehr notwendig wäre. Mit der aktuellen Version der Daten und der
Änderungsspeicherung wäre man in der Lage, eine Version zu einem gewünschten Zeitpunkt wiederherzustellen.
Für das Jahr 2006 etwa benötigt man, um alle täglichen Versionen der Tabelle
term zu rekonstruieren, lediglich einen Datenstamm von 20.000 Datensätzen
sowie eine oder mehrere Tabellen, in denen die Datenänderungen des Jahres
2006 (für das gesamte Jahr ca. 3.000), enthalten sind. Dem gegenüber stehen –
ohne Versionsmanagement – 365 Tabellen mit 20.000 Einträgen.
4.3. Konzept eines effizienten Versionsmanagements
Wie im letzten Abschnitt beschrieben wurde, treten massive Probleme bei fehlendem Versionsmanagement großer Datenbanken auf. Eine durchdachte Organisation der verschiedenen Versionen der Daten sowie ein effizienter Umgang
40
mit den Änderungen dieser Daten sind also für eine große, viel frequentierte und
sich schnell verändernde Datenbank wie der Gene Ontology unablässig.
Im Folgenden wird daher ein Konzept vorgestellt, mit dem man den Verlauf der
Änderungen auf den Daten effizient gewinnen und speichern kann (Kapitel
4.3.1), Informationen über diese Änderungen erhält (Kapitel 4.3.3) und beliebige
Zustände der Datenbank rekonstruieren kann (Kapitel 4.3.2). Ziel ist es, in einem
Datenbankmanagementsystem (DBMS) jeweils nur einen Datenstamm sowie die
Änderungen, die auf diesen Daten durchgeführt wurden, vorzuhalten. Mit diesen
Daten ist es dann möglich, Zustände der Datenbank zu rekonstruieren und weitreichende Informationen über Art, Verlauf und Auswirkungen der Änderungen
zu erhalten.
In diesem Abschnitt sollen vor allem die Vor- und Nachteile möglicher technischer Realisierungen diskutiert werden. Mit Hilfe dieser Ergebnisse wird im Kapitel 5 eine adäquate Umsetzung des Konzepts erläutert.
4.3.1 Historisierung
Unter der Historisierung von Daten versteht man die Speicherung des Verlaufs
der Änderungen, die auf den Daten durchgeführt wurden. Dies sollte in einer
möglichst effizienten und praktikablen Form geschehen. Es handelt sich dabei
um eine Differenzspeicherung, also den Vergleich zweier Versionen einer Tabelle, um die Änderungen, die zwischen diesen beiden Versionen entstanden sind,
herauszufiltern und abzuspeichern. In den Naturwissenschaften und der Mengentheorie wird für die Differenz häufig der griechische Buchstabe Delta (∆) benutzt. Daher werden diese Änderungsdaten meist als Deltas oder Delta-Daten
bezeichnet. Zunächst befasst sich dieses Kapitel mit der Gewinnung der Änderungs- bzw. Deltadaten. Danach wird auf die Speicherung dieser Daten eingegangen.
4.3.1.1 Gewinnung der Deltadaten
Änderungen zwischen zwei Versionen von Daten sind in drei Änderungstypen
aufgeteilt. In Klammern stehen die Datenbankbezeichnung und die wissenschaftliche Notation für die jeweiligen Änderungstypen :
41
Hinzugefügte Datensätze (PLUS, ∆+): Datensätze, die in der neuen Version vorhanden sind, nicht jedoch in der alten Version.
Gelöschte Datensätze (MINUS, ∆-): Datensätze, die in der alten Version vorhanden sind, allerdings nicht mehr in der neuen Version.
Geänderte Datensätze (PLUSMINUS, ∆+/-): Datensätze, die in beiden Versionen
vorhanden sind, bei denen sich aber mindestens Argument geändert hat.
Um die Änderungstypen kurz zu verdeutlichen, sei folgendes Beispiel gegeben.
Es handelt sich um zwei Versionen der Tabelle T. Told ist die alte Version der
Daten, Tnew bezeichnet die neue Version der Daten. Das Schlüsselargument ist
ID, die anderen Attribute sind Name und Ort.
Tabelle Told
ID
1
2
3
4
8
Name
Müller
Schmidt
Meyer
Weber
Holtmann
Tabelle Tnew
ID
1
2
4
5
8
Ort
Bonn
Bonn
Köln
Münster
Essen
Name
Müller
Schmidt
Weber
Schuster
Kemper
Ort
Bonn
Köln
Münster
Dortmund
Essen
PLUS : Datensatz mit der ID 5
MINUS : Datensatz mit der ID 3
PLUSMINUS : Datensätze mit den IDs 2 und 8
Die gesamten Delta-Daten (oder Deltas) zweier Versionen einer Tabelle T lassen
sich als Vereinigung aus den Deltas der drei Änderungstypen, bestehend aus
hinzugefügten Daten, gelöschten Daten und modifizierten Daten, darstellen :
∆ (T) = ∆+ (T)
U
∆- (T)
U ∆+/- (T)
Wichtig für die Gewinnung der Deltadaten ist, dass die betreffenden Tabellen
einen Primärschlüssel besitzen. Dieser Primärschlüssel muss den Datensatz nicht
nur bezüglich einer Version der Tabelle eindeutig identifizieren, sondern darf
auch beim „Übergang“ zwischen den beiden Versionen nicht geändert werden.
Ansonsten kommt es zu Phantomänderungen, die im Abschnitt 4.4 beschrieben
werden. Die Existenz eines Primärschlüssels ist Voraussetzung für die Gewinnung der Deltadaten, da dieser für alle Änderungstypen als Vergleichsargument
42
zu Rate gezogen wird. Existiert ein solcher Primärschlüssel nicht, ist eine Deltaerstellung unmöglich, da nicht festzustellen ist, ob sich ein Datensatz geändert
hat oder hinzugefügt wurde, da eine eindeutige Identifikation eines Datensatzes
nicht möglich ist. Ein Vergleich zweier Tabellen ist somit nicht durchführbar.
Um einen Primärschlüssel formal zu definieren, müssen weitreichende Definitionen (z.B. funktionelle Abhängigkeit) und Erklärungen geliefert werden. An
dieser Stelle sei also eine eher praktische Definition gegeben, die an die formale
Definition aus [KEM97] angelehnt ist:
Die Menge von Attributen primk ist Primärschlüssel, wenn
1. jede Zeile der Tabelle durch primk eindeutig identifiziert werden kann
und
2. die Menge der Attribute von primk nicht mehr verkleinert werden kann,
ohne dass Eigenschaft 1 verletzt wird.
Die Deltas der hinzugefügten und gelöschten Daten ∆+ und ∆- sind diejenigen
Datensätze, die in einer Version der Tabelle vorhanden sind, nicht jedoch in der
anderen. Sie lassen sich also mengentheoretisch als Differenz der beiden Versionen der Tabellen beschreiben. Tnew beschreibt dabei die neue Version der Tabelle T, und Told die alte Version:
∆+ (T) = Tnew - Told
bzw.
∆- (T) = Told – Tnew
Um diesen Ausdruck in der Datenbanksprache SQL auszudrücken und damit
innerhalb einer Datenbank zu verwenden, benötigt man den SQL-Operator
MINUS. Der MINUS-Operator wird allerdings durch den von MS Access verwendeten Jet-SQL-Dialekt nicht unterstützt. Daher werden obige Ausdrücke in
den folgenden äquivalenten Ausdruck transferiert.
„Nimm alle Elemente (Datensätze) aus Tnew, für die es kein Element (Datensatz)
in Told gibt, bei dem der Primärschlüssel gleich dem Primärschlüssel aus dem
Element aus Tnew ist“ (für ∆+ (T), äquivalent wird der Ausdruck für ∆- gebildet)
43
formal:
∆+ (T) = {x | x ∈ Tnew : ¬ (∃ y ∈ Told : primk(x) = primk(y))}
bzw.
∆- (T) = {x | x ∈ Told : ¬ (∃ y ∈ Tnew : primk(x) = primk(y))}
Diese beiden mathematischen Ausdrücke lassen sich nun auch in JET-SQL ausdrücken und daher im Datenbanksystem MS Access verwenden (ID ist dabei der
Primärschlüssel) :
DELTA PLUS
DELTA MINUS
SELECT *
FROM Tnew
WHERE Tnew.ID NOT IN (
SELECT ID
FROM Told)
SELECT *
FROM Told
WHERE Told.ID NOT IN (
SELECT ID
FROM Tnew)
Nachdem formale Definitionen und SQL-Befehle, die Änderungen für hinzugefügte und gelöschte Datensätze abfragen, gefunden wurden, müssen nun die Änderungsabfragen für modifizierte Datensätze erarbeitet werden.
Bei modifizierten Datensätzen (PLUSMINUS, ∆+/-) handelt es sich um Datensätze, bei denen sich mindestens ein Nicht-Schlüsselargument geändert hat. Als
Vergleichsargument wird auch hier wieder der Primärschlüssel der Tabellen genutzt. Modifiziert sind also diejenigen Datensätze aus Tnew, für die es ein Element in Told gibt, welches denselben Primärschlüssel besitzt, aber nicht gleich
dem Element aus Tnew ist (demnach muss also mindestens ein NichtSchlüsselargument unterschiedlich sein):
∆+- (T) = {x | x ∈ Tnew : ∃
y ∈ Told
∧ primk(x) = primk(y)
∧ x ≠ y}
44
Um die PLUSMINUS-Änderungen des Vergleichs in SQL darzustellen, müssen
die Tabellen über das Schlüsselargument gejoint werden und ein Vergleich (mit
„<>“ als Vergleichsoperator) aller restlichen Argumente (durch OR getrennt)
durchgeführt werden. Der SQL-Code für die Tabellen Tnew und Told mit den Primärschlüsseln ID und Nicht-Schlüsselargumenten Arg1 bis Argn sieht wie folgt
aus :
SELECT *
FROM Tnew INNER JOIN Told
ON Tnew. ID = Told. ID
WHERE
(Tnew.Arg1 <> Told.Arg1) OR
(Tnew.Arg2 <> Told. Arg2) OR
...
new
(T .Argn <> Told. Argn)
Wie bereits oben erwähnt wurde, bestehen die gesamten Deltadaten aus einer
Vereinigung der Deltas der einzelnen Änderungstypen. Ein solcher Vereinigungsoperator wird in SQL mit UNION dargestellt. Je nachdem wie die Speicherung der Delta-Daten organisiert ist, wird eine solche Union-Anweisung
entweder im Rahmen der Speicherung der Deltas verwendet, oder sie kommt bei
der Gewinnung von Informationen über die Änderung bzw. Rekonstruktion alter
Versionen zum Einsatz.
4.3.1.2 Speicherung der Deltadaten
Nachdem die SQL-Abfragen für die drei Änderungstypen herausgearbeitet wurden, muss nun über die Speicherung der aus den Abfragen gewonnenen Daten
nachgedacht werden.
Die Ergebnisse der Abfragen zur Deltagewinnung werden in sogenannten DeltaTabellen gespeichert, in denen nur die Änderungen abgelegt werden. Mit den
Daten der Deltatabelle werden später Informationen über das Änderungsverhalten der Tabelle ermittelt und alte Datenstände (zusammen mit einem Datenstamm, z.B. der aktuellen Tabelle) rekonstruiert. Dies sollte man bereits bei einem Konzept für die Speicherung der Deltadaten im Hinterkopf haben, um die
Deltadaten möglichst effizient bezüglich späterer Abfragen zu speichern.
45
Es gibt verschiedene Möglichkeiten für die Konzeption dieser Delta-Tabellen.
Im Folgenden werden drei Möglichkeiten der Speicherung der Änderungsdaten
kurz skizziert und auf Effizienz und Tauglichkeit hin überprüft. Um den Aufbau
der Delta-Tabellen zu verdeutlichen wird Bezug auf das Beispiel aus 4.3.1.1 genommen und die möglichen Umsetzungen der Delta-Tabellen für dieses Beispiel
werden veranschaulicht. Als Vergleichsdatum bzw. dem Datum der neueren
Version sei der 15.09.2006 angenommen.
1.Delta-Plus, Delta-Minus und Delta-Plusminus-Argument :
Bei dieser Organisationsform der Delta-Tabellen gibt es eine Tabelle Delta-Plus
und eine Tabelle Delta-Minus zur Aufnahme der eingefügten und der gelöschten
Datensätze sowie für jedes Nicht-Schlüssel-Attribut eine Delta-PlusminusTabelle, in der Änderungen auf der Ebene des entsprechenden Attributs gespeichert werden.
Die Tabellen Delta-Plus und Delta-Minus, in denen die Änderungstypen PLUS
und MINUS, also Informationen über die neu eingefügten und die gelöschten
Datensätze, gespeichert werden sollen, unterscheiden sich in Art und Beschaffenheit von der ursprünglichen Tabelle nur durch ein eingefügtes Datumsfeld,
welches den Zeitpunkt des aktuellen Vergleichs mitschreibt und mit dem ursprünglichen Schlüssel zusammen den Schlüssel dieser Delta-Tabellen bildet.
Dies ist notwendig, da ein Datensatz gelöscht und zu einem späteren Zeitpunkt
wieder eingefügt werden kann. Der Primärschlüssel der Tabelle, die verglichen
wird, verliert dadurch seine Eindeutigkeit. Zusammen mit dem Zeitstempel (Datum) ist jedoch wieder eine eindeutige Identifizierung des Datensatzes möglich,
da sich ein Datensatz innerhalb eines Vergleich nur höchstens einmal ändern
kann.
Delta-PLUS_T
ID
5
Datum
15.09.2006
Name
Schuster
Ort
Dortmund
Delta-MINUS_T
ID
3
Datum
15.09.2006
Name
Meyer
Ort
Köln
46
Da sich im Gegensatz zu den bisher betrachteten Änderungstypen PLUS und
MINUS bei dem Änderungstyp PLUSMINUS die Argumente ändern, müssen
die beiden Werte (der alte und der neue Wert des Arguments) in irgendeiner
Form in der Datenbank gespeichert werden. Man kann dies durch die Zusätze
„_old“ und „_new“ hinter den Spaltennamen kenntlich machen.
Für jedes (Nicht-Schlüssel-)Argument wird eine eigene Tabelle mit der Endung
des Argumentnamens erstellt. Diese Delta-Plusminus-Tabellen beinhalten nur
den Schlüssel, das Datum, sowie die beiden Werte des jeweiligen Arguments.
Für obiges Beispiel ergeben sich also neben den Tabellen Delta-PLUS_T und
Delta-MINUS_T zwei weitere PLUSMINUS-Tabellen, da es in T zwei NichtSchlüssel gibt.
Delta-PLUSMINUS-Name_T
ID
8
Datum
15.09.2006
Name_old
Holtmann
Name_new
Kemper
Delta-PLUSMINUS-Ort_T
ID
2
Datum
15.09.2006
Ort_old
Bonn
Ort_new
Köln
Fazit: Dies ist die platzsparendste der drei Möglichkeiten, da sie die Speicherungen der Änderungen auf ein Minimum reduziert und keine redundanten Daten
speichert. Diese Art der Speicherung ist aber im Allgemeinen nicht praktikabel,
da Tabellen großer Datenbanken unter Umständen eine sehr große Anzahl an
Spalten besitzen. Für eine Tabelle mit einer Anzahl von 10 (Nicht-Schlüssel)Argumenten, die durchaus nicht selten sind, sondern eher an der unteren Grenze
für große Datenbanken liegen, würden allein 12 Delta-Tabellen entstehen. Diese
Menge an Tabellen ist aber für eine Informationsgewinnung und Rekonstruktion
alter Daten-Versionen nicht effizient, da unzählige UNION-Abfragen nötig sind.
Außerdem wären viele dieser PLUSMINUS-Tabellen leer, da viele Argumente
vorstellbar sind, die sich selten oder nie ändern.
47
2.Delta-Plus, Delta-Minus, Delta-Plusminus :
Hierbei entstehen pro ursprünglicher Tabelle drei Delta-Tabellen, die jeweils für
eine Art von Änderung zuständig sind. Die Tabellen Delta-Plus und Delta-Minus
werden wie in der ersten Möglichkeit beschrieben gebildet.
In der Tabelle Delta-Plusminus kommt es zu einer Verdoppelung der NichtSchlüssel-Argumente. Jedes dieser Argumente wird mit dem Zusatz „_old“ und
„_new“ versehen. In ihnen werden die Werte aus den beiden Versionen der ursprünglichen Tabelle abgelegt. Außerdem wird auch hier ein Datumsfeld des
Vergleichs eingefügt, das zusammen mit dem Schlüssel der ursprünglichen Tabelle den Schlüssel der Delta-Tabelle bildet. Für obiges Beispiel würden sich
also folgende Delta-Tabellen ergeben.
Delta-PLUSMINUS_T
ID
2
8
Datum
15.09.2006
15.09.2006
Name_old
Schmidt
Holtmann
Name_new
Schmidt
Kemper
Ort_old
Bonn
Essen
Ort_new
Köln
Essen
Fazit: Die Anzahl der entstehenden Delta-Tabellen pro verglichener Tabelle ist
konstant (3) und eignet sich daher (im Gegensatz zu Möglichkeit 1) prinzipiell
für die Informationsgewinnung und die Rekonstruktion. Natürlich werden bei
dieser Möglichkeit einige redundante Werte gespeichert (die Argumente, die
sich nicht verändert haben), aber diese Redundanzen lassen sich nur durch eine
Vielzahl von Delta-Tabellen umgehen (Möglichkeit 1).
3.Eine Delta-Tabelle mit Typbezeichnung :
In dieser Umsetzung wird pro Tabelle nur eine Delta-Tabelle angelegt. Sie beinhaltet Schlüssel, Datum sowie die durch „_old“ und „_new“ verdoppelten Argumente. Um kenntlich zu machen, um welchen Änderungstyp es sich handelt,
wird das Feld „Deltatyp“ eingefügt, welches die Werte „P“, „M“ und „PM“
(Abkürzungen der Änderungstypen) haben kann. Es handelt sich also um eine
Zusammenlegung der drei Tabellen aus Möglichkeit 2. Im Falle des Beispiels
entsteht also die Delta-Tabelle:
48
Delta_T
ID
Datum
Name_old
Name_new
Ort_old
Ort_new
Deltatyp
2
3
5
8
15.09.2006
15.09.2006
15.09.2006
15.09.2006
Schmidt
Meyer
Schuster
Holtmann
Schmidt
Meyer
Schuster
Kemper
Bonn
Köln
Dortmund
Essen
Köln
Köln
Dortmund
Essen
PM
P
M
PM
Fazit: In dieser Möglichkeit existiert nur eine Delta-Tabelle pro ursprünglicher
Tabelle. Sie enthält viele redundante Werte, da selbst für Einfügungen und Löschungen neue und alte Werte für die Argumente gespeichert werden, die sich
jedoch bei diesen beiden Änderungstypen überhaupt nicht verändern.
Die letztgenannten Möglichkeiten eignen sich beide zur Speicherung der Deltadaten. Auf den ersten Blick scheint die Möglichkeit mit drei Delta-Tabellen
sinnvoller, weil mit ihr weniger redundante Daten bzw. Nullwerte gespeichert
werden (man könnte auch Nullwerte statt der doppelten Einträge speichern). Der
Umgang mit der späteren Rekonstruktion und vor allem mit der Gewinnung von
Informationen aus den Deltadaten wird in der Regel jedoch sehr komplizierter.
So ist man häufig an der Zahl der Änderungen unabhängig vom Änderungstyp
interessiert. Mit drei Delta-Tabellen muss man dann jedoch stets UNIONAbfragen kreieren, statt einfacher Abfragen. Die Tabellen werden meist über
das Datum abgefragt. Dieser Index (da Schlüssel) wird für jede Tabelle einzeln
vom DBMS verwaltet und kann bei einer Tabelle schneller zugegriffen werden.
Außerdem vergrößert sich natürlich der Aufwand in der Handhabung bei mehreren Tabellen sowie für den Entwickler als auch für das DBMS.
Ich habe mich bei der Entwicklung des Systems VerIS für die Möglichkeit entschieden, alle Änderungen, die auf einer Tabelle wirksam werden in eine einzelne Delta-Tabelle zu schreiben. Daher beziehen sich die folgenden Abschnitte
über die Rekonstruktion und die Analyse der Deltadaten auch für diese Möglichkeit der Speicherung. Die Rekonstruktion und Analyse sind aber durch leichte Modifikationen prinzipiell auch mit Möglichkeit 2 durchführbar.
49
4.3.2 Rekonstruktion
Speichert eine Datenbank die Änderungen, die auf den Tabellen vollzogen wurden, z.B. mittels der Methoden, die im letzten Abschnitt erläutert wurden, so ist
es nicht mehr notwendig, eine Vielzahl von Versionen der Daten vorrätig zu halten. Aus den Deltadaten und einem Datenstamm lassen sich nämlich beliebige
alte (oder neue) Versionen der Daten erzeugen. Zunächst sei zwischen Vorwärtsund Rückwärtsrekonstruktion unterschieden:
• Vorwärtsrekonstruktion: Die Datenbank speichert den „ersten“ bzw. den
ältesten Datenbestand sowie die Änderungsdaten und erzeugt dadurch
Versionen. Diese Rekonstruktionsart geht also von der Vergangenheit
zeitlich gesehen „nach vorne“.
• Rückwärtsrekonstruktion: Die Datenbank hält den jeweils aktuellsten Datenbestand vor und die Änderungsdaten. So lassen sich vom aktuellen
Stand alte Versionen der Datensätze (zeitlich gesehen „rückwärts“) erzeugen.
Im Allgemeinen ist ein Benutzer einer Datenbank vorwiegend an den aktuellsten
Daten interessiert. Da diese Daten im Falle der Vorwärtsrekonstruktion jedoch
nicht materialisiert vorliegen, muss dieser Datenbestand vor jedem Gebrauch
rekonstruiert werden. Das ist natürlich wenig effizient und auch nicht praktikabel. In der Praxis kommen solche Vorwärtsrekonstruktionen daher praktisch
nicht vor. Für das Prinzip der Rekonstruktion spielt diese Unterscheidung der
Rekonstruktionen jedoch keine Rolle. Ich werde mich im Weiteren also auf die
Rückwärtsrekonstruktion beschränken.
Gegeben seien also die Tabelle T mit den aktuellen Daten sowie die DeltaTabelle Delta_T mit den Änderungen, die auf der Tabelle T - mit Zeitstempel
versehen - durchgeführt wurden.
Will man nun die Version der Daten des gewünschten Datums D erhalten, so
müssen alle Änderungen, die vom jetzigen Zeitpunkt bis zum Datum D durchgeführt wurden, in der umgekehrten Reihenfolge der Änderungen, also von „jetzt“
an rückwärts, rückgängig gemacht werden, d.h.
• Einfügungen werden aus der aktuellen Tabelle gelöscht,
• Löschungen werden in die aktuelle Tabelle eingefügt und
• Änderungen werden rückgängig gemacht, indem die Attribute durch die
alten Attributwerte („_old“) ersetzt werden.
50
Wichtig dabei ist, dass man unbedingt die zeitliche Reihenfolge der Änderungen
beachtet, da Datensätze mehrfach geändert werden können und der zeitliche
Verlauf der Änderungen beachtet werden muss. So sollten die Daten der Deltatabelle nach Datum sortiert bzw. gruppiert sein.
Die technische Umsetzung dieses Prinzips kann z.B. erreicht werden, indem die
Deltatabelle nach Datum sortiert wird (Datum größer des gewünschten Datums)
und mittels eines Recordsets mit einer Schleife durchlaufen wird. Je nach Änderungstyp wird dann die dazu korrespondierende Datenbankaktion (INSERT,
DELETE, UPDATE) ausgeführt. Ein kurzes Beispiel soll dieses Prinzip deutlich
machen:
ID
12
12
12
12
Datum
12.12.06
15.11.06
06.09.06
03.06.06
Name_old
Holtmann
Meyer
Müller
Müller
Name_new
Holtmann
Holtmann
Meyer
Müller
Deltatyp
M
PM
PM
P
Der Datensatz mit der ID 12 wurde eingefügt, daraufhin zweimal geändert und
schließlich gelöscht. Möchte man nun eine Version der Daten vom 01.07.06 erhalten, muss man also diesen Datensatz der aktuellen Tabelle hinzufügen, danach das Attribut Name von „Holtmann“ auf „Meyer“ ändern und danach das
Attribut Name von „Meyer“ auf „Müller“ ändern. Der letzte Eintrag wird nicht
beachtet, da das Datum vor dem gewünschten Datum der Version der Daten
liegt.
Dieser „naive Rollback“ der Daten lässt sich jedoch stark verbessern. Es ist nämlich überhaupt nicht nötig, die Änderungen eines Datensatzes auf Attribut-Ebene
(Deltatyp ‚PM’) über den kompletten Zeitraum (von “Jetzt“ bis zu dem gewünschten Datum) zurückzuverfolgen. Lediglich die früheste Änderung ist für
die Rekonstruktion interessant, also die Änderung, die zeitlich gesehen dem gewünschten Datum am nächsten liegt. Änderungen, die danach ausgeführt wurden, sind für die Rekonstruktion dieser einen Version nicht von Bedeutung.
Mit diesem Wissen kann nun eine Abfrage erstellt werden, die für jede ID aus
der Delta-Tabelle jeweils nur den Eintrag einer Argument-Änderung aus der
Delta_Tabelle liefert mit dem dem gewünschten Datum am nächst gelegenen
51
Datum. Mit einer solchen Projektion der Deltatabelle muss nun für jeden Änderungstyp nur ein SQL-Statement (INSERT, DELETE, UPDATE) abgesetzt werden, und nicht wie im Falle des naiven Rollbacks für jeden Eintrag in der Deltatabelle. Im obigen Beispiel muss also nur noch ein Updatebefehl ausgeführt
werden, um das Argument Name zu modifizieren.
Auf eine genaue technische Umsetzung der Rekonstruktionen geht das Kapitel
5.5 ein. Ein Access-spezifisches Problem der Rekonstruktion wird in Kapitel 6.3
beschrieben.
4.3.3 Analyse der Deltadaten
Durch die Speicherung des Änderungsverlaufs in Delta-Tabellen lassen sich
wertvolle Informationen über die Art, den Verlauf und die Bedeutung der Änderungen gewinnen. Im Verlauf dieser Arbeit wurde des Öfteren auf den Mangel
an Informationen über Änderungen geschrieben. Nun können verschiedenste
Fragen mit Hilfe einfacher SQL-Befehle beantwortet werden, wie zum Beispiel:
• Wie viele Datensätze haben sich innerhalb eines bestimmten Zeitraums
geändert?
• An welchem Datum haben die häufigsten Änderungen stattgefunden?
• Wie war der zeitliche Verlauf der Änderungen (in MS Access durch eingebaute Diagrammfunktion sehr einfach zu realisieren)?
• Welche Datensätze wurden modifiziert?
• Welche Attribute wurden modifiziert?
• usw.
Die Antworten auf diese Fragen liefern einfache SQL-Abfragen, sind sehr
schnell umzusetzen sind.
4.4. Das „Schlüsselproblem“
Bei der technischen Umsetzung der Konzepte für ein Versionsmanagement und
bei ersten Versuchen die Änderungen der Tabelle term der Gene Ontology zu
ermitteln, wurde eine ungewöhnlich hohe Anzahl von Änderungen festgestellt.
So änderten sich bereits zwischen zwei aufeinanderfolgenden Tagen ca. 18.000
Datensätze (bei existierenden 20.000 Datensätzen). Nach genauer Analyse der
Datensätze, die geändert wurden, wurde festgestellt, dass sich bei nahezu allen
52
Datensätzen lediglich der Schlüssel geändert hat, alle anderen Argumente aber
gleichgeblieben sind. Folgendes Beispiel der Tabelle term soll dies klarmachen:
Auszug aus term vom 18.09.2006
Auszug aus term vom 19.09.2006
Die Datensätze der alten Version von term mit den IDs 1194 bis 1198 sind (bis
auf den Primärschlüssel ID) genau identisch mit den Datensätzen der neuen Version der IDs 1920 bis 1924. Diese Daten haben sich also semantisch nicht verändert. Aus Datenbanksicht handelt es sich aber dennoch um zwei komplett unterschiedliche Datensätze. Daher wurde diese Menge an „Phantomänderungen“
bei der Differenzspeicherung ausgegeben. Es wird angenommen, dass die Gene
Ontology intern mit anderen Schlüsselargumenten arbeitet und bei der
Bereitstellung der Daten im Internet diese nicht verwendet, sondern den automatisch generierten Schlüssel „id“ hinzufügt.
In der Informatik wird der Primärschlüssel als ein oder mehrere Argumente definiert, die einen Datensatz eindeutig identifizieren. Er kann zwar geändert werden, semantisch meint dies jedoch, dass es sich dann um einen anderen Datensatz handelt. Das Prinzip der Primärschlüssel wurde von der Gene Ontology
(zumindest bezüglich der bereitgestellten Daten) nicht richtig umgesetzt.
Der Schlüssel identifiziert zwar einen Datensatz bezüglich einer Version von
Daten eindeutig, verliert aber seine Schlüsseleigenschaft beim Arbeiten mit
mehreren Versionen. Um eine (sinnvolle) Differenzspeicherung durchzuführen,
wird jedoch unbedingt ein den Datensatz eindeutig identifizierendes Argument
53
zum Vergleich benötigt. Eine Kombination aus mehreren Argumenten, die die
Schlüsseleigenschaft besitzen ist ebenfalls zum Vergleich zweier Versionen von
Tabellen möglich.
Ist ein solcher angenommener Schlüssel gefunden, wird dieser als Vergleichsargument für die Differenzspeicherung verwendet. Vor jeder Durchführung der
Differenzspeicherung muss aber zunächst ein Test erfolgen, ob der angenommene Schlüssel nach wie vor die Schlüsseleigenschaft besitzt, da diese Integritätsbedingung nicht vom DBMS übernommen wird, weil es sich technisch gesehen
nicht um einen Schlüssel handelt.
Es ist sinnvoll statt über den angenommenen Schlüssel selbst, über einen künstlichen Schlüssel zu vergleichen, wenn es sich bei dem angenommenen Schlüssel
um kein Zahlenfeld handelt oder er sich um mehrere Argumente zusammensetzt.
Ein Vergleich wird dadurch effizienter. Eine technische Umsetzung dieses Prinzips der Differenzspeicherung ohne Schlüsselargument findet sich in Kapitel 6.2.
54
5. Das System VerIS
Das Informationssystem VerIS (VersionsInformationsSystem) ist eine in MSAccess entwickelte Anwendung zur Steuerung und Auswertung von Versionen
von Daten. Es soll zeigen, wie ein Versionsmanagement für große Datenbanken
realisiert werden kann und dient als Beispiel für die Implementation der in der
Arbeit entwickelten Konzepte über Historisierung von Daten-Versionen und Rekonstruktion alter Daten.
Die Daten der Gene Ontology dienen als Grundlage für dieses System. Die Gene
Ontology selbst verfügt über kein Versionsmanagement und stellt genannte Daten, die in verschiedenen Formaten vorliegen, in sehr schnellen Releases im Internet bereit. Versionen dieser Daten können nur in ihrer Gesamtheit bezogen
werden. Zunächst ist die Anwendung VerIS also auf die Gene Ontology-Daten
beschränkt. Die entwickelten Methoden und Vorgehensweisen des Systems lassen sich allerdings schnell auf andere Datenbanken erweitern.
VerIS verfügt über einen automatisierten Import der Rohdaten der Gene Ontology, eine effiziente Speicherung der Historie der Änderungen der Daten und einen
Rekonstruktionsmechanismus, um alte Versionen der Daten wiederherzustellen.
Das bedeutet, dass lediglich die aktuellen Daten sowie eine Tabelle mit Änderungen dauerhaft in der Datenbank gespeichert werden müssen, was im Umgang
mit einer Fülle von Versionen zu einer enormen Platzersparnis führt. Darüber
hinaus ist eine Analyse der Historiendaten möglich.
Exemplarisch werden in VerIS die Daten der Tabelle „term“ der Gene Ontology
verwendet. VerIS kann also nicht als Versionsmanagementsystem für die gesamten Daten der Gene Ontology verwendet werden. Anhand der Tabelle „term“
können aber alle Methoden für ein Versionsmanagement gut erklärt und veranschaulicht werden. Diese Tabelle ist die Haupttabelle der Gene Ontology und
unterliegt einer hinreichend großen Menge an Änderungen mit hohem
55
exemplarischem Wert. Darüber hinaus enthält sie eine ausreichende Anzahl von
Datensätzen (ca. 20.000), um Performanzprobleme zu erkennen und zu lösen.
Außerdem tritt in dieser Tabelle das „Schlüsselproblem“ (siehe Kapitel 4.4) auf,
welches auch erst während der Entwicklung von VerIS deutlich und letztlich
gelöst wurde.
5.1. Architektur und Funktionalität
Das System VerIS ist in verschiedene Module (oder manager) aufgeteilt. Diese
Module sind alle durch VBA-Code und mit SQL-Abfragen realisiert und wurden
in MS Access entwickelt. Sie werden in den nächsten Abschnitten genauer erklärt:
• Importmanager: dient zum Einlesen der Daten der Gene Ontology aus
dem Internet in das System VerIS,
• Historymanager: speichert die Änderungen der Daten,
• Keymanager: integriert neue künstliche Schlüssel, die zur Differenzspeicherung benötigt werden,
• Versionmanager: rekonstruiert alte Versionen der Daten,
• Querymanager: ermöglicht Informationsgewinnung aus den Änderungsdaten.
Der Aufbau des Systems VerIS und das Zusammenspiel der einzelnen Module
untereinander mit der Datenbank und dem Benutzer werden an folgendem
Schaubild verdeutlicht:
56
Abbildung : Das System VerIS
Zunächst werden die Daten der Gene Ontology, die vom Benutzer aus dem Internet bezogen wurden, in die Datenbank geschrieben. Dies geschieht im Importmanager (Kapitel 5.2). Aufgrund irreführender Schlüsselbezeichnungen der
Rohdaten müssen künstliche Schlüssel eingeführt werden. Dazu wird der Keymanager (Kapitel 5.3) verwendet. Dieses Modul arbeitet eng mit dem Modul zur
Historienführung (Historymanager, Kapitel 5.4) zusammen, welches für die
Speicherung der Änderungen, die auf den Daten vorgenommen wurden, verwendet wird. Um vorherige Versionen der Daten zu erlangen, rekonstruiert der
Versionmanager (Kapitel 5.5) aus dem aktuellen Datenbestand und der Historientabelle alte Datenstände. Für die Analyse der Historiendaten sowie zur Gewinnung relevanter Informationen aus diesen Daten wird der Querymanager
(Kapitel 5.6) verwendet.
57
Der Anwender interagiert über drei Formulare mit dem System:
Zunächst das Importformular, welches den Importmanager und Historymanager,
der den Keymanager benutzt, zusammenfasst. Der Import und die Erstellung der
Historie läuft nach Angabe der Datenquelle (Ordner, in dem die von der Webseite der Gene Ontology heruntergeladene Text-Datei „term.txt“ liegt) und des Datums der Datei automatisch ab. Ein weiterer Eingriff seitens des Anwenders ist
nicht nötig. Der Fortschritt des Imports und der Historisierung wird über ein Statusfeld angegeben.
Abbildung : Importformular
Der zweite Bereich für den Nutzer ist das Rekonstruktionsformular, welches mit
Hilfe des Versionmanagers alte Versionen der Datenbank wiederherstellt. Möchte man nun einen alten Stand der Datenbank rekonstruieren, ist nur das Datum
der gewünschten Version und eine Tabellenbezeichnung nötig.
Das Queryformular dient zur Analyse der Historiendaten und soll die Einsatzmöglichkeiten der interaktiven Abfragen und Darstellungsformen der Informationen exemplarisch zeigen.
58
5.2. Importmanager
Die Daten der Gene Ontology sind in den Formaten mySQL und GO RDF-XML
verfügbar. Für einen Transfer in eine Access-Datenbank ist das mySQL-Format
am geeignetsten und wird daher verwendet. Um die Tabellenschemata (Schlüssel, Indizes, Datentypen) genau wie von der Gene Ontology vorgesehen auch in
VerIS abzubilden, müssen Tabellenschemata einmalig in VerIS verankert werden. Leider sind die Schemata der Tabellen nur als mySQL-Standard zugänglich. MS-Access benutzt jedoch Jet SQL, was zunächst eine manuelle Transformation des mySQL-Schemas in den Jet SQL-Standard nötig machte. Genauere
Informationen zum Transfer der beiden Schema-Formate werden in 6.1 gegeben.
Zunächst wird eine temporäre Tabelle auf Basis des gespeicherten und in VerIS
verankerten Jet SQL-Schemas angelegt. Danach werden die Daten der Textdatei
mittels des Access-internen Importmechanismus in diese temporäre Tabelle geschrieben. Der Tabelle wird noch ein Feld „myID“ hinzugefügt, welches vorläufig noch leer bleibt, später jedoch als Schlüssel benutz wird.
5.3. Keymanager
Einige Tabellen der Gene Ontology haben Schlüssel, die zwar auf eine Version
bezogen eindeutig sind, in einer Abfolge von Versionen aber ihre Schlüsseleigenschaft verlieren und sich daher nicht als Vergleichsargument für die Historisierung der Daten eignen. Aus diesem Grund wird es nötig, eigene, wirkliche
Schlüssel („myID“) in die Tabelle zu integrieren. Dieses „Schlüsselproblem“
tritt auch in der exemplarisch verwendeten Tabelle „term“ auf.
In der Tabelle „term“ gibt es jedoch ein Argument („acc“), das den Datensatz
eindeutig identifiziert und sich darüber hinaus über verschiedene Versionen
nicht ändert. Da es sich hierbei allerdings technisch nicht um das Schlüsselargument handelt, muss nach jedem Import eine durch eine Abfrage realisierte
Schlüsselverifizierung durchgeführt werden, um zu prüfen, ob das Argument
„acc“ die Schlüsseleigenschaften der Eindeutigkeit erfüllt.
Nach diesem Test werden die neuen Schlüssel („myID“) für die temporäre Tabelle angepasst. Hierzu wird ein Vergleich der temporären Tabelle mit der aktuellen Tabelle durchgeführt. Als Join-Argument wird das angenommene
59
Schlüsselargument „acc“ benutzt. Bei Gleichheit wird der Wert des neuen
Schlüsselarguments „myID“ aus der aktuellen Tabelle übernommen. Den Datensätzen der temporären Tabelle, welche keinen Joinpartner in der aktuellen Tabelle haben (also neu hinzugefügt wurden), werden neue, inkrementelle Schlüsselwerte zugeordnet. Als Startwert wird der maximale Schlüsselwert der aktuellen
Tabelle plus 1 verwendet.
Nachdem nun der temporären Tabelle alle neuen Schlüsselwerte zugeordnet
wurden, wird das Argument „myID“ als Schlüssel dieser Tabelle gesetzt. Nun
sind ein Vergleich der temporären und aktuellen Tabelle und eine daraus resultierende Differenzspeicherung möglich. In Kapitel 6.2 wird der genaue technische Ablauf des Keymanagers erklärt.
5.4. Historymanager
Die Historisierung ist ein Vergleich der gerade importierten, temporären Tabelle
mit der Tabelle, die die aktuellen Daten enthält. Änderungen zwischen diesen
beiden Tabellen (also Änderungen, Einfügungen und Löschungen) werden in der
Delta-Tabelle gespeichert.
Zur Speicherung der Deltadaten wurde das Prinzip mit nur einer Delta-Tabelle
genutzt, das in 4.3.1.2 vorgestellt wurde. Die Tabelle enthält:
• den Schlüssel der ursprünglichen Tabelle („myid“),
• den Zeitstempel der Differenzspeicherung („datum“), der zusammen mit
dem ursprünglichen Schlüssel den Schlüssel der Deltatabelle bildet,
• das Pro Nicht-Schlüssel-Argument, je ein Feld mit den Zusätzen „_old“
und „_new“,
• den Typ der Änderungen („P“, „M“, „PM“).
Die Anfügeabfrage, um die Deltatabelle zu füllen, ist eine Union-Abfrage, bestehend aus drei Teilabfragen, welche die Änderungsdaten für die drei
Änderungstypen (hinzugefügte Daten, gelöschte Daten, modifizierte Daten)
abfragen. Diese drei Teilabfragen wurden nach dem in Kapitel 4.3.1.1
erarbeiteten Schema entwickelt. Das Vergleichsargument für diese Abfragen ist
der im Keymanager integrierte, neue Schlüssel „myid“.
60
Nachdem die Deltatabelle gefüllt wurde, ist es nicht mehr nötig, die (vormals)
aktuelle Tabelle im System vorzuhalten. Sie wird daher gelöscht und die temporäre Tabelle wird durch Umbenennung zur aktuellen Tabelle.
Folgendes Schaubild verdeutlicht den „Weg“ der Gene Ontology Daten durch
den automatisierten Import und die Historisierung:
Gene Ontology
term.txt
Import
term_Temp
+“myID“
1. Differenzspeicherung mit term_Aktuell
Deltatabelle
D_Term
2. wird durch umbenennen zu
term_Aktuell
5.5. Versionmanager
Da ältere Versionen der Datenbank nicht in VerIS gespeichert werden, benötigt
man den Versionmanager, um alte Versionen der Daten zu rekonstruieren. Der
Anwender muss lediglich das Datum angeben, bis zu dem die Rückwärtsrekonstruktion durchgeführt werden soll und eine Endung für den Tabellenname der
Tabelle, die durch die Rekonstruktion entsteht.
61
Abbildung : VerIS Rekonstruktionsformular
Mit Hilfe der aktuellen Daten und der Delta-Tabelle ist eine Rekonstruktion bis
zu einem beliebigen Zeitpunkt möglich. Für jeden Datensatz ist nur die letzte
Änderung, die noch im angegebenen Zeitfester liegt, relevant. Wenn ein Datensatz zum Beispiel mehrfach geändert wurde, ist nur die letzte, vom jetzigen Datum aus rückwärts gesehene Änderung interessant.
Zunächst wird die aktuelle Tabelle kopiert. Auf dieser sogenannten Arbeitstabelle („T_inwork“) werden die Rückwärtsänderungen durchgeführt. Für die Änderungstypen P und M (also Einfügungen und Löschungen) gestaltet sich die
Transformation recht einfach. Mittels zweier Abfragen werden die letzten Änderungen pro Datensatz der Delta-Tabelle ermittelt, die als Deltatyp den Wert „P“
bzw. „M“ in der Spalte „Delta_typ“ haben und das angegebene Datum noch
nicht unterschritten haben. Dann werden sie mit einem einzigen UPDATE- oder
DELETE-Befehl der Arbeitstabelle entweder hinzugefügt oder aus dieser entfernt. Dabei verhält sich das Löschen und Einfügen umgekehrt zum Wert des
Deltatyps. Das bedeutet, dass alle Einträge, die ein „P“ als Deltatyp haben, gelöscht werden, da sie zwischenzeitlich eingefügt wurden, in der alten Version
also noch nicht vorhanden waren.
Bei den geänderten Datensätzen (Deltatyp „PM“) gestalten sich die Änderungen
an der Arbeitstabelle nicht so einfach. In diesem Fall müssen die passenden Datensätze der Delta-Tabelle mittels eines Recordsets durchlaufen werden, um
dann die Änderungen in die Arbeitstabelle durchzuführen. Dieses Problem sowie
die technische Umsetzung werden in Kapitel 6.3 ausführlicher beleuchtet.
62
Sind alle Änderungen an der Arbeitstabelle durchgeführt worden, wird sie in den
vom Benutzer gewünschten Namen umbenannt.
5.6. Querymanager
Der Querymanager soll anhand dreier ausgewählter Beispiele die verschiedenen
Möglichkeiten der interaktiven Abfragen durch den Benutzer und die unterschiedlichen Darstellungsformen der dadurch gewonnenen Informationen deutlich machen. Es werden zwei Möglichkeiten der benutzerinteraktiven Abfragen
sowie eine Möglichkeit der graphischen Darstellung der Ergebnisse der Abfragen aufgezeigt.
Abbildung : VerIS Queryformular
Die Benutzerangaben der interaktiven Abfragen werden in globalen Variablen
gespeichert und dann (mittels Funktionen) in die der Darstellung zugrundeliegenden Abfrage integriert. Durch die Schaltfläche „Wert anzeigen“ werden die
globalen Variablen aktualisiert und die Abfrageergebnisse verändert. Im rechten
Teil des Formulars wird die Darstellungsform durch ein Diagramm gezeigt. Solche Diagramme lassen sich durch in MS Access eingebaute Funktionen sehr
schnell und problemlos erstellen.
63
Es wurde im System VerIS mehr Arbeit darauf verwendet, die Daten zu importieren, historisieren und zu rekonstruieren, als auf die Darstellung der meist
trivialen SQL-Abfragen, die den Informationen zugrunde liegen. Es soll an
dieser Stelle nicht unerwähnt bleiben, dass eine Vielzahl anderer Abfragen und
Darstellungsformen möglich sind, die alle auf einfache Weise realisiert werden
können.
5.7. Bewertung des Systems
Das System VerIS bietet eine gute Möglichkeit, Konzepte und Methoden eines
Versionsmanagement zu verdeutlichen. Natürlich kann ein in einer Diplomarbeit
entwickeltes System nicht ein Versionsmanagement in der Praxis ersetzen. Dies
gilt schon allein deshalb, weil dieses System lediglich anhand einer Tabelle die
Methoden eines Versionsmanagements ausführt. Die entwickelten Methoden zur
Differenzspeicherung und Rekonstruktion sowie die gewonnenen Erkenntnisse
über die Lösung unvorhersehbarerer Probleme wie dem „Schlüsselproblem“ lassen sich jedoch sehr gut als Grundlage für die Entwicklung eines Versionsmanagement nutzen.
Durch die Anwendung der Konzepte zur effizienten Differenzspeicherung sowie
der Verbesserung der Rekonstruktionsabfragen arbeitet das System VerIS zufriedenstellend effektiv. Da es jedoch zu häufigen Einfügungen und Löschungen
beim Import der Tabelle aus der Gene Ontology kommt, sollte die Datenbank
des öfteren komprimiert bzw. eine automatische Komprimierung der Datenbank
(in neueren Access-Versionen) eingestellt werden.
64
6. Ausgewählte Probleme der Implementierung
Im Folgenden sollen drei ausgewählte Probleme und deren Lösungen beschrieben werden, die während der Entwicklung des Versionsmanagementsystems
VerIS aufgetreten sind.
6.1. Import des Tabellenschemas
Ein automatischer Import von mySQL-Daten, wie sie die Gene Ontology anbietet ist mit MS Access problemlos durchführbar. Allerdings werden die Datentypen der entsprechenden Spalten der Tabelle auf Grund ihrer Beschaffenheit von
Access selbst bestimmt, da die Daten keinerlei Informationen über den von der
Gene Ontology vorgesehenen Datentyp in den mySQL-Daten enthalten. Außerdem müssen die Schlüsselargumente vom Benutzer bestimmt werden und vorgesehene Indizes bleiben unbeachtet.
Um das von der Gene Ontology vorgesehene Tabellenschema in einer AccessDatenbank abzubilden, ist also ein Import des mySQL-Tabellenschemas in Access nötig. MS Access bietet aber keinen automatisierten Import von mySQLTabellenschemata an. Da eine automatisierte Einbindung eines mySQL-Schemas
in eine Access Datenbank den Rahmen dieser Arbeit gesprengt hätte, wurden die
Schemata manuell transformiert.
Es mussten lediglich einige syntaktische Unterschiede zwischen der mySQLSchemadefinition und dem von MS Access verwendeten SQL-Dialekt JET-SQL
beachtet werden ( z.B. „CREATE TABLE [term] ...“ statt „CREATE TABLE
term ...„).
65
6.2. Differenzspeicherung ohne Schlüssel
Während der Entwicklung von VerIS wurde herausgefunden, dass das in der
Tabelle term verwendeten Schlüsselargument id über den Verlauf der verschiedenen Versionen seine Eigenschaft einen Datensatz eindeutig zu identifizieren
verliert („Schlüsselproblem“).
Ein solcher versionsunabhängiger Schlüssel ist jedoch Vorrausetzung für die
dem System zugrundeliegende Differenzspeicherung. Daher wurde versucht, ein
anderes Argument zu finden, welches diese versionsunabhängige Schlüsseleigenschaft besitzt. Nach Analyse der Argumente der Tabelle term und den Änderungen, die auf den Daten auftraten, wurde festgestellt, dass das Argument acc
ein Kandidat für einen solchen angenommenen Schlüssel ist.
Bei der Differenzspeicherung ohne Schlüssel wird über den angenommenen
Schlüssel verglichen. Es ist jedoch vor jeder Differenzspeicherung ein Test nötig, ob der angenommene Schlüssel in der neuen Version immer noch die
Schlüsseleigenschaft der Eindeutigkeit besitzt, da dieser Integritätsheck nicht
vom DBMS übernommen wird (da acc im datenbanksinne gar kein Schlüssel
ist). Dieser Test wurde in VerIS durch die Abfrage keycheck_term realisiert:
SELECT acc
FROM term_Temp
GROUP BY term_Temp.acc
HAVING (((Count(term_Temp.acc))>1));
Abfrage keycheck_term
Die Abfrage keycheck_term liefert Werte, wenn das Argument acc mehr als
einmal („> 1“) in der zu importierenden, temporären Tabelle term_Temp vorkommt. Im VBA-Code wird die Anzahl der Ergebnisse dieser Abfrage mit der
Funktion DCount abgefragt. Ist es gleich 0, so enthält die Tabelle keine doppelten Werte von acc und acc erfüllt weiterhin die Eigenschaft der Eindeutigkeit.
If DCount("*", "keycheck_term") = 0 Then keycheck = True
66
Ist der Test auf Eindeutig nicht erfolgreich, so kann keine Historisierung der Daten erfolgen. Während der gesamten Arbeit mit dem System VerIS ist dieser
Test jedoch immer positiv ausgefallen. Daher ist davon auszugehen, dass acc
auch weiterhin die Eigenschaft der Eindeutigkeit besitzt. Da dies jedoch keine
gesicherten Erkenntnisse und acc deshalb nicht im Tabellenschema als Primärschlüssel definiert werden kann, muss der Test weiterhin vor jeder Differenzspeicherung durchgeführt werden.
Bei den Abfragen zur Rekonstruktion alter Daten-Versionen wird die aktuelle
Tabelle über den Schlüssel mit der Deltatabelle verglichen. Da ein solcher Vergleich (z.B. durch JOIN angewendet) mit Interger-Werten um einiges effizienter
durchgeführt werden kann, als mit Text-Werten, in denen das Argument acc definiert ist, wurden in VerIS ein neuer, künstlicher Schlüssel myid mit einem Zahlenwert eingeführt.
Zunächst haben alle späteren Schlüsselargumente myid der zu importierenden
Tabelle term_Temp den Wert 0, da dieser Wert als Standardwert in dem Tabellenschema festgeschrieben wurden und dieses Argument beim Import der Daten
nicht gefüllt wird, da es in der ursprünglicher Tabelle der Gene Ontology nicht
vorkommt.
Danach werden die zu importierende Tabelle term_Temp und die aktuelle Tabelle term_Aktuell über das Attribut acc miteinander verglichen und die korrespondierenden Werte des Arguments myid der aktuellen Tabelle in die Tabelle
term_Temp geschrieben. Dies geschieht mittels folgendem UPDATE-Befehl:
UPDATE term_Temp INNER JOIN term_Aktuell
ON term_Temp.acc =term_Aktuell.acc
SET term_Temp.myid =term_Aktuell.myid;
Falls noch keine aktuelle Tabelle vorhanden ist (kein vorheriger Import von Daten wurde durchgeführt), werden den Attributen myid inkrementelle Werte beginnend mit 1 zugeordnet.
Alle Argumente myid, die nach dieser Änderung immer noch den Wert 0 besitzen, wurden hinzugefügt. Sie erhalten inkrementelle Werte beginnend mit dem
höchsten Wert von myid der aktuellen Tabelle.
67
Nun besitzt die zu importierenden Tabelle einen zu acc korrespondierenden
künstliche Zahlenwert-Schlüssel. Mit dem Befehl
„ALTER TABLE term_Temp ADD constraint [myid] primary key(myid)”
wird dem Attribut myid die Schlüsseleigenschaft zugewiesen.
Anhand dieser Schlüssel kann nun eine effektivere Differenzspeicherung und
Rekonstruktion erfolgen.
6.3. Das „UPDATE-Problem“ bei der Rekonstruktion
Im Rahmen meiner Diplomarbeit bin ich auf eine Unzulänglichkeit von MS Access bezüglich der Bearbeitung von UPDATE-Anweisungen gestoßen. Dieses
Problem soll im Folgenden erläutert werden.
Die Anfüge- und Löschabfragen für die Rekonstruktion alter Daten-Versionen
lassen sich durch einfache INSERT- und DELETE-Befehle in VerIS realisieren.
Als Beispiel sei hier die Abfrage zum Entfernen ehemalig eingefügter Datensätze gegeben :
DELETE * FROM T_inwork
WHERE myid IN
(SELECT myid FROM D_term_P)
Aus der Arbeitstabelle T_inwork werden also diejenigen Einträge gelöscht, deren Schlüssel auch in der Abfrage D_term_P vorhanden sind. Bei der Abfrage
D_term_P handelt es sich um für die Rekonstruktion aufbereitete Daten aus der
Delta-Tabelle (datum größer der gewünschten Daten-Version, nur das kleinste
Datum pro ID, Deltatyp =“P“).
Versucht man nun aber das gleiche Prinzip auf die UPDATE-Anweisung der
Rekonstruktion (also auf die Änderung der Argumente der Arbeitstabelle) anzuwenden, tritt ein Fehler auf. Die folgende Anweisung kann von MS Access nicht
bearbeitet werden (D_term_PM seien auch hier wieder die aufbereiteten Daten
aus der Delta-Tabelle, aus Gründen der Übersichtlichkeit wird nur das Argument
name versucht auszutauschen):
68
UPDATE T_inwork
SET T_inwork.name =
(SELECT D_term_PM.name_old
FROM D_term_PM
WHERE D_term_PM.myid = T_inwork.myid)
WHERE Tabelle_akt.ID=
(select D_term_PM.myid
from D_term_PM
where D_term_PM.myid = T_inwork.myid)
Bei genauer Betrachtung der Anweisung wird klar warum. Es wird versucht das
Element name auf eine Menge bestehend aus der SELECT-Anweisung zu setzen.
Dem Entwickler ist jedoch klar, dass diese SELECT-Anweisung nur einen Wert
zurückliefert, da es sich bei D_term_PM um eine nach myid gruppierte Abfrage
handelt. Eine Idee wäre, mittels einer Aggregatfunktion im SELECT-Teil eine
Ein-Elementigkeit der SELECT-Abfrage zu erzwingen, etwa
„…SELECT MAX(D_term_PM.name_old)…”
Doch auch diese Abfrage führt zum selben Fehler. Es wurde festgestellt, dass
solche SQL Konstrukte in MS Access nicht ausdrückbar sind. So kann selbst
eine UPDATE-Anweisung mit einer Konstanten im SELECT-Teil nicht ausgeführt werden:
UPDATE TabelleA
SET TabelleA.name =
(SELECT 'Müller' FROM TabelleB)
In anderen Datenbanksystemen, wie z.B. Oracle ist aber sowohl eine solche Abfrage, als auch die oben erwähnte Möglichkeit mit einer Aggregatfunktion zulässig([PRI04]).
69
Da die Änderungen der Rekonstruktion mittels SQL-Code in MS Access nicht
zu realisieren waren, wurde das Problem gelöst, indem die Abfrage D_term_PM
mittels eines Recordsets geöffnet und mit eine Schleife durchlaufen wurde. Für
jeden Eintrag in D_term_PM wurde dann ein UPDATE-Befehl abgesetzt, der die
Werte dieses Eintrags des Recordsets enthielt. Diese Variante ist zwar nicht so
effizient, wie ein einziger UPDATE-Befehl, führt aber auch nicht zu merklichen
Verschlechterung der Performanz. Außerdem ließ sich dieser Weg wegen oben
beschriebener Unzulänglichkeiten nicht umgehen.
70
7. Zusammenfassung und Ausblick
In dieser Arbeit wurden Konzepte für ein effizientes Versionsmanagement für
Datenbanken im Allgemeinen und Ontologie-Datenbanken im Speziellen entwickelt. Es wurden Methoden zur effizienten Gewinnung von Änderungsdaten, die
zwischen zwei Versionen von Daten auftreten sowie der effizienten Speicherung
dieser Änderungsdaten diskutiert. Darüber hinaus wurde das Konzept der Rekonstruktion alter Daten-Versionen erörtert, wodurch eine Speicherung vieler
Daten-Versionen überflüssig wird und lediglich eine stark minimierte Anzahl an
Daten gespeichert werden muss.
Diese Konzepte und Methoden wurden in dem mit MS Access entwickelten System VerIS angewendet und verwirklicht. Das System VerIS zeigt exemplarisch,
wie ein Versionsmanagement für Datenbanken mit großen Datenbeständen aussehen kann. Da ontologische Daten häufigen Änderungen unterzogen sind und
diese Änderungen für die Anwender der Ontologie von großem Interesse sind,
arbeitet des Versionierungssystem VerIS auf der Grundlage der Daten der Gene
Ontology. Mit Hilfe dieses Systems wurde es möglich, den Änderungsverlauf
der Daten der Gene Ontology herauszufiltern und abzuspeichern. Unter Verwendung dieser Änderungsdaten konnten alte Datenstände rekonstruiert und nützliche Informationen über den Verlauf und die Art der Änderungen gewonnen
werden. Da die Gene Ontology nicht über ein Versionsmanagement verfügt, waren diese Änderungsdaten und die daraus resultierenden Informationen bisher
nicht abrufbar.
Während der Entwicklung des Systems VerIS wurde ein Problem der Daten der
Gene Ontology offenbar: Die Primärschlüssel einiger von der Gene Ontology im
Internet bereitgestellter Tabellen verlieren über den zeitlichen Verlauf der Versionen ihre Eigenschaft, einen Datensatz eindeutig zu identifizieren („Schlüsselproblem“). Durch diese Unzulänglichkeit entstanden zunächst eine Menge von
„Phantomänderungen“, die zwar aus Datenbanksicht Änderungen sind, jedoch
71
nicht als solche zu verstehen sind. Ohne einen durchgängig gültigen, versionsunabhängigen Primärschlüssel ist aber keine sinnvolle Differenzspeicherung der
Änderungsdaten möglich. Daher wurde eine Methode entwickelt, die mittels eines anderen, den Datensatz identifizierenden Arguments der Tabelle und unter
Einsatz künstlicher Schlüssel die Differenzspeicherung und damit ein Versionsmanagement dennoch möglicht macht.
Das System VerIS arbeitet beispielhaft mit der Haupttabelle „term“ der Gene
Ontology. Diese, im Zuge meiner Diplomarbeit entwickelte Anwendung kann
den Anforderungen eines in der Praxis eingesetzten Versionsmanagementsystems nicht entsprechen. Die Konzepte und Methoden einer effizienten Versionsverwaltung wurden aber verdeutlicht.
Für den Einsatz auf den kompletten Datenbestand der Gene Ontology müssten
die Methoden bezüglich der Historisierung auf alle Tabellen ausgeweitet werden. Eine weitere mögliche Erweiterung von VerIS betrifft die Automatisierung
der in dieser Arbeit vorgestellten Schema-Transformation von mySQL nach
JET-SQL, um manuelle Transformationen zwischen diesen beiden SQLDialekten zu vermeiden. Allgemein sollten die Methoden etwas universeller
einsetzbar gemacht werden und sich nicht nur auf einzelne Tabellen beziehen,
sondern aus den Schemata der Tabellen automatisiert Änderungsabfragen und
Deltatabellen generieren. Darüber hinaus wäre eine direkte Verbindung der Datenbank mit den im Internet zugänglichen Daten sinnvoll, um einen vollautomatisierte Historienführung zu gewährleisten.
Es ist durchaus möglich, dass das „Schlüsselproblem“ der Gene Ontology auch
in anderen Datenbanken auftritt. Daher wäre eine theoretische Herangehensweise an dieses Problem interessant. Eine detaillierte Diskussion der Fragen „Wie
könnte eine Differenzspeicherung ohne Schlüssel im Generellen Aussehen?“
und „Wie kann eine identifizierende Eigenschaft mehrerer Argumente am effizientesten gefunden werden?“ hätte jedoch den Rahmen dieser Arbeit gesprengt.
72
8. Literatur
[BB02]
Irene Bauder, Jürgen Bär : Access 2002 und MS SQL Server.
Hanser Verlag 2000
[DAT97]
C.J. Date : A Guide to the SQL Standard fourth Edition. Addison Wesley 1997
[FMA07]
http://sig.biostr.washington.edu/projects/fm/ (Februar 2006)
[GEN07]
www.geneontology.org (Februar 2006)
[GOL07]
http://www.linguistics-ontology.org/ (Februar 2006)
[GRU93]
T. R. Gruber: A translation approach to portable ontologies.
In: Knowledge Acquisition, Band 5, Nummer 2, Seite 199220, 1993
[HES06]
Prof. Dr. Michael Hess : Kleine Einführung in SQL. 2006
[KEM97]
A. Kemper, A. Eickler : Datenbanksysteme - Eine Einführung (2. Auflage). Oldenburg Verlag 1997
[KOF99]
Michael Kofler : Visual Basic 6. Addison Wesley 1999
[MAN02]
Prof. Dr. Rainer Manthey : Vorlesungsfolien Informationssysteme, Kapitel 2 : Relationale Datenbanken. 2002
[MAT03]
Daniel H Mattes : SQL - Der Einsatz im Intra- und Internet,
C&L. 2003
73
[MIC07]
www.microsoft.com (Februar 2006)
[MK06]
Linda DeMichiel, Sun Microsystems und Michael Keith,
Oracle Corporation :JSR 220: Enter-prise JavaBeansTM,
Version 3.0 Java Persistence API, Kapitel 2.1.10, Mai 2006
[PHI02]
Klaus Rüdiger Phillip : SQL, die Standard-Abfragesprache
für Datenbanken. 2002
[PÖG82]
Otto Pöggeler, M.Heidegger: Sein und Zeit. In: Grundprobleme der großen Philosophen. Philosophie der Gegenwart
IV, (UTB) Göttingen 1982
[PRI04]
Jason Price: Oracle Database 10g SQL. McGraw-Hill, 2004
[SCH05]
Hartmut Schmelling : Access effektiv nutzen. 2005
[SK]
Barry Smith,Bert R.E. Klagges: Philosophie und biomedizinische Forschung. Department of Philosophy, University
Buffalo, Institut für Biologie II – Lehrstuhl für Genetik, Universität Leipzig
[STU01]
Prof. Dr. Rudi Studer, Henrik Oppermann, Hans-Peter
Schnurr : Die Bedeutung von Ontologien für das Wissensmanagement. Institut AIFB, Universität Karlsruhe, Ontoprise
GmbH, 2001
[TEI07]
TEIA Teles European Internet Academy : SQL. 2007
[UG96]
M. Uschold & M. Gruninger Ontologies: Principles, methods
and applications Knowledge Engineering Review, 1996
[WIK07]
www.wikipedia.org (Februar 2006)
74
Erklärung:
Hiermit erkläre ich, dass die vorliegende Diplomarbeit selbständig von
mir durchgeführt wurde und keine anderen als die angegebenen Quellen
und Hilfsmittelbenutzt wurden. Zitate sind durch entsprechende Literaturstellen als solche kenntlich gemacht.
Bonn, 13. März 2007 Tim Sondermann
Herunterladen