Friedrich Schiller-Universität Jena Institut für Informatik Temporale Erweiterungen des relationalen Datenmodells Ausarbeitung zum Proseminar: “Grundlagen von DBMS“ Wintersemester 2000/2001 Leitung : Dipl. Inf. Lufter Prof. Dr. Küspert vorgelegt von: Stefan Scheidewig MN 38784 Daniel Lempe MN 39481 3. Semester, Diplom Informatik Jena den 21.03.2001 2 Inhalt Seite 1. Einleitung 3 2. Zeit 4 2.1 Zeitmodelle 4 2.2 Zeitfolgetypen 4 2.3 Zeitdatentypen 4 3. Temporale Daten 5 3.1 Snapshotdaten 6 3.2 Gültigkeitszeitdaten 6 3.3 Transaktionszeitdaten 7 3.4 Bitemporale Daten 7 4. Temporale Datenmodelle 7 4.1 Gültigkeitszeitmodell 7 4.2 Transaktionszeitmodell 8 4.3 Bitemporales Modell 9 5. BCD – Modell 10 5.1 Eigenschaften 10 5.2 Fallbeispiel 11 5.3 Änderungsoperatoren 11 6. TSQL2 13 6.1 Zeit in TSQL2 13 6.2 Sprachkonstrukte in TSQL2 14 6.2.1 Der CREATE TABLE - Befehl 14 6.2.2 Der INSERT - Befehl 15 6.2.3. Der UPDATE - Befehl 18 6.2.4. Der DELETE - Befehl 18 6.2.5 Die SELECT – Anweisung 19 6.3 Ein Vergleich 22 6.4 Weitere temporale Datenbanken 23 7. Zusammenfassung Literaturverzeichnis Temporale Datenbanken © Stefan Scheidewig & Daniel Lempe 23 24 3 1. Einleitung Das Gebiet der temporalen Datenbanken wird erst seit etwa 15 Jahren erforscht, daher 1500 ist dieses Gebiet noch relativ jung. Die 1000 Anzahl der Veröffentlichungen zu diesem 500 Thema hat aber während der letzten Jahre sehr zugenommen, sind es 1988 noch 214 gewesen, so konnten 0 1988 1991 1994 1996 1996 schon 1096 Erscheinungen und Publikationen verzeichnet werden. In vielen Anwendungen ist es einfach erforderlich, nicht nur Informationen über Objekte, sondern auch die zeitlichen Änderungen dieser Informationen, über ihren Gültigkeitszeitraum hinaus, festzuhalten. Beim Löschen oder Ändern von Daten, die für diese Anwendungen in bestimmten Datenbanken abgelegt wurden, müssen Überspeicherungen verhindert werden. Konventionelle Datenbanksysteme sind nur beschränkt geeignet, diese Datenhaltung zu organisieren. Existierende Sprachkonstrukte sind bei Recherchen über Zeitverläufe nicht ausreichend. Damit sind Untersuchungen etwa über neue Datenmodelle, Datenbanksprachen oder anzulegende Speicherstrukturen notwendig. Einige dieser Sprachvorschläge werden im späteren Verlauf vorgestellt werden, wobei aber das Hauptaugenmerk auf dem Sprachvorschlag TSQL2 liegen wird. Wo aber sollen diese neuen temporalen Datenbanken eingesetzt werden? Zum Beispiel in der Medizin, denn hier ist die Wahl der Behandlungsmethode des Patienten von früheren und aktuellen Diagnosen abhängig. Auch in der Buchhaltung von Firmen, sind Informationen über die Gehaltsentwicklung eines Angestellten hilfreich, oder Angaben über die Ausgaben der Firma im Vergleich zum Vorjahr, wobei temporale Datenbanken genutzt werden können. Es lassen sich viele solcher Beispiele aufzählen, aber realisieren lassen sie sich erst seit kurzer Zeit, da temporale Datenhaltung immens speicheraufwendig ist. Daher war sie früher ein teueres Unterfangen, aber zur heutigen Zeit, in der Speichermedien immer größer und schneller werden, ist sie in den Bereich des Finanzierbaren gekommen. Die folgende Ausarbeitung wird sich zuerst mit den theoretischen temporalen Grundlagen und Modellen beschäftigen und dann insbesondere auf TSQL2, aber auch andere temporale Sprachvorschläge, eingehen. Aus Gründen der Verständlichkeit, wie auch des Umfangs, haben wir auf temporale Algebra verzichtet. Temporale Datenbanken © Stefan Scheidewig & Daniel Lempe 4 2. Die Zeit 2.1 Zeitmodelle Def. : Zeit ist eine Existenzform der Materie in der alle ihre Änderungen und Bewegungen ablaufen [Meyers Lexikon] Def. : allg.: Abfolge eines Geschehens, die im menschlichen Bewußtsein als Vergangenheit, Gegenwart und Zukunft am Entstehen und Vergehen der Dinge erfahren wird. Die Gegenwart läßt sich als Grenze zwischen Noch-nicht (Zukunft) und Nicht-mehr (Vergangenheit) bestimmen. [Meyers Lexikon] Es gibt drei grundlegende Modelle der Zeit Stetiges Modell: Hierbei ist die Zeit isomorph zum Bereich der reellen Zahlen, sie wird also mit den reellen Zahlen gleichgesetzt. Zeit verläuft in diesem Modell linear. Dichtes Modell: Dabei ist die Zeit isomorph zum Bereich der rationalen Zahlen, sie wird also mit den rationalen Zahlen gleichgesetzt. Zeit verläuft in diesem Modell linear. Diskretes Modell: Hier ist die Zeit isomorph zum Bereich der natürlichen Zahlen, sie wird also mit den natürlichen Zahlen gleichgesetzt. Zeit verläuft in diesem Modell linear. Im Diskreten Zeitmodell gilt das chronon als kleinste Einheit, wobei ein chronon kein Punkt, sondern ein Segment auf der Zeitlinie ist. So wird beispielsweise mit einem schönen Augenblick nicht nur die Millisekunde eines Zwinkerns assoziiert, sondern das gesamte Ereignis, welches damit verbunden wird. Dieses Modell dient als Grundlage für die temporalen Datenbanken, da sich diskrete Zeit in der diskreten Rechnerumgebung leichter implementieren läßt. Temporale Datenbanken © Stefan Scheidewig & Daniel Lempe 5 2.2 Zeitfolgetypen Abb. 1: Zeitfolgen Eine Folge, deren Elemente nach der Gültigkeitszeit(vt) geordnete Daten(t) eines Objektes sind, wird als Zeitfolge bezeichnet. Die aktuelle Zeitfolge enthält Daten, die nach gegenwärtigem Wissensstand gültig sind, andernfalls wird sie als nichtaktuell charakterisiert. Gilt ein Fakt in zeitlicher Richtung fort, bis er später durch einen anderen ersetzt wird, handelt es sich um eine zustandsstabile Zeitfolge (Abb 1a). Ein Beispiel für eine zustandsstabile Zeitfolge ist die Positionen von Mitarbeitern in einer Firma oder auch der Kontostand. Ist ein Fakt nur zu einem bestimmten Zeitpunkt gültig, sprechen wir von einer ereignisorientierten Zeitfolge (Abb 1b). Als Beispiel hierzu kann man eine Unfallbilanz der Polizei betrachten. Wenn ein Fakt fortlaufend über die Zeit gültig ist, sprechen wir von einer kontinuierlichen Zeitfolge (Abb 1c). Die Pegelstände an Gewässern sind ein Beispiel für kontinuierliche Zeitfolgen. Notwendige Bedingung einer kontinuierlichen Zeitfolge ist, daß die vorhandenen Stützstellen den Kurvenverlauf eindeutig darstellen. Ansonsten ist sie den anderen beiden Zeitfolgetypen zuzuordnen. Wird beispielsweise bei einem Patienten mehrere Male pro Tag die Temperatur gemessen, ist sie über einen Zeitraum als Kurve darstellbar. Erfolgt die Messung gelegentlich, zum Beispiel einmal pro Woche, kann man nur von einer ereignisorientierten Zeitfolge sprechen. 2.3 Zeitdatentypen Es gibt bereits verschiedene Zeitdatentypen, mit deren Hilfe sich einfache temporale Gegebenheiten in SQL92 darstellen lassen können. Ein instant ist ein spezieller chronon auf der Zeitlinie, ein event ist ein Ereignis, welches zu einem instant geschieht und die event occurence time ist die Zeit, in der der event in der realen Welt passiert ist. So unterstützt SQL92 drei Arten von instant Datentypen, und zwar: DATE (Datum), TIME (Tageszeit) und TIMESTAMP (Datum und Zeit zusammen). Temporale Datenbanken © Stefan Scheidewig & Daniel Lempe 6 Der Typ TIME PERIOD, also eine Zeitspanne zwischen zwei instants, wird von SQL92 nicht unterstützt, dies soll aber in SQL3 geschehen. In SQL92 werden zwei Arten unterstützt, zum einen, das month - year interval und zum anderen, das second - day interval. Dies kommt daher, da month (engl. Monat) und year (engl. Jahr) in einem festen Verhältnis zueinander stehen, also 12:1. Dasselbe gilt auch für second (engl. Sekunde) und day (engl. Tag). Aber durch den Fakt des Schaltjahres ist ein second - year interval nicht möglich, da das Verhältnis nicht fest bestimmt ist. 3.Temporale Daten Es gibt verschiedene Arten temporaler Daten, die im folgenden Teil charakteriesiert werden. Abb. 2: Schematische Darstellung 3.1 Snapshotdaten Dies sind nicht temporale Daten oder die wie die meisten Datenbanken keine explizite Zeitinformationen enthalten. Weiterhin sind es nur zweidimensionale Informationen, die von den Dimensionen Objekt und Eigenschaft definiert werden (Abb. 2a). Als Modell hierfür kann die klassische Datenbank angesehen werden. 3.2 Gültigkeitszeitdaten Jene temporalen Daten werden durch die Gültigkeitszeit (valid time) sowie den Eigenschaften der betrachteten Objekte wärend dieser Zeit charakterisiert (Abb. 2b). Durch die explizite Gültigkeitszeit wird bestimmt, wann ein Tupel in der modellierten Welt wahr ist. Außerdem kann die gewisse Zeit sowohl begrenzt als auch unbegrenzt sein, da angenommen werden kann, daß ein Fakt erst in der Zukunft gültig ist. Das Modell hierzu wäre das Gültigkeitszeitmodell (siehe Abschnitt 4.1). Temporale Datenbanken © Stefan Scheidewig & Daniel Lempe 7 3.3 Transaktionszeitdaten Transaktionszeitdaten sind ebenfalls temporale Daten, welchen zu den zwei Dimensionen Objekt und Eigenschaft noch die Transaktionszeit hinzugefügt wurde (transaction time) (Abb. 2b). Durch diese Zeit wird gezeigt, wann das Tupel in der Datenbank gespeichert worden ist. Die Transaktionszeit ist eine implizite Zeitmarke, die von der Systemuhr vorgegeben wird und damit durch die Gegenwart begrenzt ist. Das dazugehörige Modell ist das Transaktionszeitmodell (siehe Abschnitt 4,2). 3.4 Bitemporale Daten Falls Daten sowohl Gültigkeitszeit als auch Transaktionszeit besitzen, sprechen wir von bitemporalen Daten, durch welche es möglich ist, die gesamte Geschichte des Objektes zu rekonstruieren. Die vierte Dimensionen kann durch eine Menge von Würfeln aus Abbildung 2.b veranschaulicht werden, wobei jeder Würfel für eine bestimmte Transaktionszeit steht. Das Modell hierzu wäre das bitemporale Modell ( Abschnitt 4.3) oder BCD-Modell (Abschnitt 5). 4. Temporale Datenmodelle Def. : Ein Datenmodell ist ein formaler Rahmen zur Beschreibung von Datenstrukturen und Operationen auf Daten. Es wird angenommen, daß die abzuspeichernde Information mit Hilfe von Objekten und Beziehungen zwischen Objekten modelliert werden kann. [“Theoretische Grundlagen relationaler Datenbanksystemen“ von Kanzia, 1993] 4.1 Gültigkeitszeitmodell Das Modell von Jones ist im Rahmen der LEGOL2 im Jahre 1979 entstanden. Die Modellierung erfolgt durch die zwei Zeitattribute start und stop, welche ein Intervall definieren in dem der Fakt seine Gültigkeit besitzt. Die Angabe der Zeitwerte ist explizit, das heißt sie wird durch den Benutzer eingegeben. Temporale Datenbanken © Stefan Scheidewig & Daniel Lempe 8 Modell von Jones Name Vorlesung Start Stop Detlef Inf 1 1 2 Franz Inf 1 1 1 Franz Inf 2 3 4 Abb. 3 Modell von Jones Ein anderes Beispiel wäre hierfür das Modell von Clifford, bei welchen sowohl den Tupeln als auch den Attributen die Gültigkeitszeit zugewiesen 4.2 Transaktionszeitmodell Bei einem Transaktionszeitmodell wird immer dann, wenn ein Fakt in der Datenbank gespeichert, geändert oder gelöscht wurde, die exakte Zeit der Operation vermerkt. Dieser Zeitstempel oder auch TIMESTAMP ist implizit, also vom User nicht beeinflußbar, sondern direkt von der Systemuhr bestimmt. Name Gehalt Intervall [a] Name Gehalt Intervall Karl 30000 [1,now] Hugo 40000 [1,now] Name Gehalt Intervall Karl 30000 [1,now] Hugo 40000 [1,3] [b] Name Gehalt Intervall Karl 30000 [1,now] Hugo 40000 [1,now] Detlef 55000 [2,now] Detlef 55000 [2,now] Heinz 27000 [3,now] [c] Abb. 4: Transaktionszeitmodell Besonderer Beachtung gilt hier der now Variable, denn durch sie wird ausgedrückt, daß der Fakt bis zum jetzigen Zeitpunkt aktuell ist. Zur näheren Erklärung ist zu erwähnen, daß die Transaktionszeit auf die Gegenwart beschränkt ist. Beim obigen Beispiel war die Datenbank zu Beginn leer, dann wurden zum Zeitpunkt 1 [a] Hugo und Karl hinzugefügt. Zum Zeitpunkt 2 [b] ist Detlef hinzugefügt worden, welches eindeutig an seinem Zeitstempel [2,now] ablesen werden kann. Zu guter Letzt wird zum Zeitpunkt 3 [c] Heinz hinzugefügt und Hugo gelöscht. Alle veränderten oder gelöschten Temporale Datenbanken © Stefan Scheidewig & Daniel Lempe 9 Informationen bleiben auch weiterhin in der Datenbank verzeichnet, daher ist dieses Modell sehr für Write-Once-Datenträger geeignet. Ein weiteres Beispiel für ein Transaktionszeitmodell wäre das Modell von Jensen, welches neben der Transaktionszeit noch ein zusätzliches Backlog-Feld benutzt. In diesem Feld werden die Operatoren verzeichnet, mit denen das Objekt verändert wurden (insert, delete, update). Damit ist die Geschichte des Objektes durch Backlog nachvollziehbar. 4.3 Bitemporales Modell Ein bitemporales Modell zeichnet sich daher aus, daß es sowohl Gültigkeitszeit als auch Transaktionzeit besitzt. Die obige Tabelle soll verdeutlichen, welche verschiedenen Relationen zwischen diesen Zeitwerten möglich sind. [d] [c] [b] [a] Abb. 5: Zeitverhältnisse im Bitemporalen Modell [a] Information ist sofort gültig (X = Y) [b] Änderung in der Zukunft, Information wird erst noch gültig (X < Y) [c] rückwirkende Änderung, Information war schon gültig (X > Y) [d] Änderung der Gültigkeitszeit, zur Terminierung in der Zukunft Durch die dargestellten, verschieden Möglichkeiten zum Verhältnis von Gültigkeitszeit und Transaktionszeit zueinander, ist es möglich die Geschichte des Objektes bzw der Information über einen bestimmten Zeitraum nachzuvollziehen. Das wohl bekannteste bitemporale Modell ist das BCDM, welches im Anschluß näher vorgestellt wird. Temporale Datenbanken © Stefan Scheidewig & Daniel Lempe 10 5. BCD Modell Das BCDM (bitemporal conceptual data model) wurde 1993 vom TSQL2 Language Design Commitee als Teil und Grundlage des Sprachvorschlages TSQL2 entworfen. Diesem Komitee gehörten unter R. T. Snodgrass anderen R. Snodgrass, J. Clifford, und C. Jensen an. Als konzeptionelles Datenmodell soll es die Semantik temporaler Daten möglichst einfach und deutlich darstellen können, ohne dabei besonderen Wert auf eine möglichst effiziente Realisierung zu legen. Das BCDM ist ein erweitertes relationales Datenmodell, d.h. die Konzepte des relationalen Modells wurden übernommen und erweitert . Christian Jensen Abb.6. - Personen 5.1 Eigenschaften Die Tupel des BCDM besitzen Transaktions- und Gültigkeitszeit, sie sind also bitemporal. Weiterhin basiert dieses Modell auf der diskreten Zeit, und hat als kleinste Einheit das Chronon (c). Die Chronons haben eine implementierungsabhängige Länge, denn je genauer die physische Repräsentationsform gewählt wird, desto kleiner wird die Länge des Chronons. Gültigkeitszeitdomain DGZ = {t1, t2, t3, ...,tk } Transaktionszeitdomain DTZ = {t´1, t´2, t´3, ... , t´k } {UC} Einen gesondert zu behandelnden Wert bezeichnet das Schlüsselwort UC (until changed). Dieser Wert wird im Fallbeispiel 5.2 noch näher erklärt. Tupel einer bitemporalen Relation Tb ⊆ DTZ x DGZ Hierbei muß aber beachtet werden, daß zwei Tupel in einer bitemporalen Relation nie wertegleich sein dürfen. Daher muß die Geschichte in den Tupeln selbst vermerkt sein. Temporale Datenbanken © Stefan Scheidewig & Daniel Lempe 11 5.2 Fallbeispiel Beispiel : „Zum Zeitpunkt 5 wird vom Personalchef eines Kaufhauses festgelegt, daß Herr Meier für das Zeitintervall 11-44 in der Arbeit Spielzeug arbeiten soll. Zum Zeitpunkt 15 meldet ein Mitarbeiter, daß Herr Meier nicht in der Abteilung arbeitet. Der Personalchef verändert daraufhin seine Konzeption und teilt Herr Meier nun im Zeitintervall 20-32 für die Spielzeugabteilung ein. Bei der Feststellung des Mitarbeiters, daß Herr Meier zum Zeitpunkt 15 noch keine Spielzeuge verkaufte, handelte es sich um jedoch um einen Irrtum. Deshalb übernimmt der Personalchef zum Zeitpunkt 25 wieder die ursprüngliche Arbeitseinteilung für Herrn Meier.“ [“Anbindung von TSQL2 an ein objektorientiertes Datenbanksystem“ Arne Lange 1996] Dieses Beispiel kann als Graph (Abb.7) oder als Tabelle (Abb.8) dargestellt werden. Abb. 7: Bitemporale Aussage Abb. 8: Bitemporale Relation mit Tupelstempelverfahren und nicht in erster Normalform In der Tabelle sind bitemporale Elemente dargestellt, d.h. das für jedes gültige Tupel TZ x GZ ein weiteres bitemp. Element hinzugefügt wird. Wenn ein bitemp. Element aber die Form (UC, cv) hat, dann wird mit jedem verstreichenden Transaktionszeitchronon (ct´) ein Tupel mit neuer Transaktionzeit eingefügt. => tbi= (UC,cv) Vergangener Chronon ct´ tbi+1 = (ct , cv) Temporale Datenbanken © Stefan Scheidewig & Daniel Lempe 12 5.3 temporale Änderungsoperatoren Im Rahmen des BCD-Modells, wie auch in TSQL2, sind verschiedene temporale Änderungsoperationen möglich,wie Abbildung 9. verdeutlichen soll. Abb. 9 – Verhältnisse von Gültigkeits – und Transaktioszeit . Temporales Einfügen (Insert) Diese Operation fügt entweder neue Informationen ein oder verlängert Gültigkeitszeit von bereits existierenden Daten. Temporales Ändern (Update) Ein Update verändert die existierenden Informationen und damit auch die Gültigkeitszeit. Wie hier in unserem Beispiel: ABC war gültig bis zum Zeitpunkt X und danach war DEF gültig ab dem Zeitpunkt X. Temporales Löschen (Delete) Die Delete-Operation verringert Gültigkeitsdauer von vorhandenen Informationen. Temporale Datenbanken © Stefan Scheidewig & Daniel Lempe existierender 13 6. TSQL2 6.1 Zeit in TSQL2 Temporale Anfragesprachen sind ein relatives junges Wissenschaftsgebiet und befinden sich noch in den Kinderschuhen. Das kann man besonders daran erkennen, daß der temporale Teil der bislang existierenden temporalen Anfragesprachen lediglich ein Aufsatz auf eine schon existierende Anfragesprache darstellt und immer tunlichst auf Abwärtskompatibilität geachtet werden mußte. Die Zeit wird in TSQL2 linear und an beiden Enden begrenzt dargestellt (zum Beispiel von JETZT bis NÄCHSTE ÄNDERUNG oder vom 23.6.98 bis 25.6.98). Dabei können die Zeitlinien in temporalen Anfragesprachen diskret (isomorph zu den natürlichen Zahlen), dicht (isomorph zu den rationalen Zahlen) und kontinuierlich (isomorph zu den reellen Zahlen) sein, wobei in TSQL2 mit diskreter Zeit gearbeitet wird. Das TSQL2 zugrundeliegende Modell ist das BCD-Modell (bitemporal conceptual data), das im Abschnitt 5 vorgestellt wurde. Die Darstellung der Zeit erfolgt mit „chronons“ (zum Beispiel 1999 oder 10-4 (für 10.4. oder 4.10.) oder 10:23 für Uhrzeiten). Die Granularität der Zeitdarstellung ergibt sich aus der Zahl der chronons pro Zeitraum. Je mehr chronons man also verwendet, desto höher wird die Granularität (zum Beispiel 1999 –jahresgenau- im Gegensatz zu 10-4-1999 10:23 – minutengenau). TSQL2 ist eine Obermenge von SQL92, das bedeutet die Sprache ist ein Aufsatz auf SQL92 und unterstützt deren Befehle und Datentypen mit einer geringfügigen Modifikation – der Zeit. In SQL92 existierten ohnehin schon die Datentypen DATE, TIME, TIMESTAMP und INTERVAL zur Darstellung von Zeit. Diese wurden von TSQL2 adoptiert und um PERIOD ergänzt. Der wesentliche Unterschied zwischen INTERVAL und PERIOD besteht darin, daß INTERVAL eine Zeitdauer ohne Verankerung darstellt, wobei PERIOD eine Zeitspanne mit Anfangs- und Endpunkt darstellt. Temporale Datenbanken © Stefan Scheidewig & Daniel Lempe 14 6.2 Sprachkonstrukte in TSQL2 Wie bereits erwähnt, wurde TSQL2 nur um Zeit modifiziert und das Anliegen dieses Abschnitts besteht darin, die wichtigsten Befehle und deren Veränderung anhand eines Beispieles zu erläutern. 6.2.1 Der CREATE TABLE - Befehl Zunächst werde eine Relation angestellter mit Hilfe des CREATE TABLE – Konstruktes erstellt (siehe Abbildung 10). Diese Relation soll zustandsstabil sein und mit Transaktionszeit versehen werden (bitemporal) und die Granularität Tag haben (z.B. 10-4-99). Die nichttemporalen Attribute der Relation sollen der Name, der Vorname und das Gehalt der Person sein. Neu bei CREATE TABLE ist die AS - Klausel, die den Zeitfolgetyp und die Granularität Abb. 10: Erstellung von angestellter festlegt. Dabei kann der TSQL2 - Benutzer zwischen sechs verschiedenen Zeitfolgetypen auswählen (Abbildung 11). Zeitfolgetypen Dabei hat man auch die Möglichkeit die „normalen“ (sprich die aktuellen) Daten, wie sie in SQL92 vorkommen, zu gebrauchen indem man bei der Deklaration das Schlüsselwort SNAPSHOT angibt. Zusätzlich besteht die Möglichkeit, die Relationen als zustandsstabil (ohne beziehungsweise mit Transaktionszeit), ereignisorientiert (ohne beziehungsweise mit Transaktionszeit) oder gar nur mit Transaktionszeit zu deklarieren (siehe Abbildung 12). Eine kontinuierliche Zeitfolge wird gewährleistet durch ein stetiges Aktualisieren der ereignisorientierten Zeitfolge. 1.) Snapshot 2.) AS VALID STATE zustandsstabil AS VALID STATE 3.) AS VALID EVENT [AND TRANSACTION] 4.) AS TRANSACTION ereignisorientiert AS VALID EVENT 5.) AS VALID STATE AND [AND TRANSACTION] TRANSACTION kontinuierlich AS VALID EVENT 6.) AS VALID EVENT AND [AND TRANSACTION] TRANSACTION (mit hoher Aktualisierung) Temporale Datenbanken © Stefan Scheidewig & Daniel Lempe 15 Abb. 12: Die gebräuchlichsten Zeitfolgetypen Abb. 11: Alle Möglichkeiten 6.2.2 Der INSERT - Befehl In der soeben erschaffenen Relation angestellter soll nun ein Objekt eingefügt werden. Um in eine TSQL2 – Relation ein Objekt einzufügen zu können, benötigt man, genauso wie in Abb. 13. SQL92 den INSERT – Befehl. Ähnlich wie bei CREATE kann man auch bei INSERT eine Veränderung im Gegensatz zu SQL92 erkennen – die VALID PERIOD – Klausel. Diese drückt die Start- und Endzeit aus, in dem das Objekt in der modellierten Welt gültig ist, sprich die Gültigkeitszeit. Läßt man beim Einfügen eines Objektes die VALID PERIOD – Klausel weg, so werden vom DBMS (data base management system) Standardwerte angenommen (sofern die Relation mit Gültigkeitszeit deklariert wurde). Diese wären das aktuelle Datum (Systemzeit, die vom DBMS vergeben wird) als Startzeit und eine ungebundene Variable NOW als Endzeit. Im Vorfeld wurde erläutert, daß TSQL2 auf dem BCD – Modell basiert und die Variable NOW das Pendant zu UNTIL CHANGED (UC) darstellt. Die Transaktionszeit wird vom DBMS implizit vergeben; der Anwender muß sich nicht darum kümmern (sofern die Relation Transaktionszeit enthält). Nach Anwendung des Befehls in Abbildung 14 erhält man die entsprechende Tabelle. NAME VORNAME GEHALT TRANSACTION VALID Meier Rick 3500 [10-5-98 – NOW] [10-5-98 – NOW] Abb. 14: Das erste Objekt wird eingefügt Am 1. August wird in der Firma entschieden, daß Rick Meier ab 1. September ein unbefristetes Gehalt von 5000 Geldeinheiten beziehen soll. Um diese Änderung vorzunehmen, schreibt man in die VALUES – Klausel die entsprechenden nichttemporalen Daten und ist gezwungen die VALID PERIOD – Klausel anzuwenden, die das Intervall für die Gültigkeitszeit des neuen Objekts enthält (siehe Abbildung 15 ). Temporale Datenbanken © Stefan Scheidewig & Daniel Lempe 16 Da Rick Meier ein unbefristetes Gehalt beziehen soll, steht der wirkliche Endpunkt der Gültigkeitszeit noch nicht fest. TSQL2 stellt dafür den Systemwert CURRENT_TIME zur Verfügung . Sobald also das Objekt verändert wird, wird die Startzeit des neuen Objekts eingesetzt. NAME VORNAME GEHALT TRANSACTION VALID Meier Rick 3500 [10-5-98 – 1-8-98] [10-5-98 – NOW] Meier Rick 3500 [1-8-98 – NOW] [10-5-98 – 1-9-98] Meier Rick 5000 [1-8-98 – NOW] [1-9-98 – NOW] Abb. 15: Das alte Objekt (Entity) wird nicht gelöscht (Änderung am 1. August) Auffällig ist, daß das Objekt (Meier, Rick, 3500) zweimal vorkommt. Dies ist ein weiterer Vorteil von TSQL2 und von temporalen Datenbanksystemen generell. Sie gestatten es die Geschichte aufzunehmen. So geschah es, daß das ältere Objekt (Meier, Rick, 3500) nur in der Transaktionszeit verändert wurde (der Tag der Änderung ist der Endpunkt des alten Tupels) und die Gültigkeitszeit unverändert blieb. Dafür erstellte das Datenbanksystem ein neues Objekt, welches die gleichen nichttemporalen Attribute besitzt, dafür aber unterschiedliche Intervalle in der Transaktions- und Gültigkeitszeit. Dabei setzt TSQL2 die NOW - Variable der Transaktionszeit des alten Objekts auf das Datum der Systemzeit (also die Zeit der Änderung) und im neuen Tupel die Systemzeit als Startzeit und UNTIL CHANGED (NOW) als Endzeit. Dies geschieht sowohl im neuen Tupel (Meier, Rick, 3500) als auch im Tupel (Meier, Rick, 5000). In der Gültigkeitszeit erhält das Tupel (Meier, Rick, 5000) als Startzeit den 1. September und eine undefinierte Endzeit. Am 6. August fällt dem Personalbüro auf, das Rick Meier eigentlich schon seit dem 1. Mai des Jahres 98 in der Firma angestellt ist, statt des eingetragenen 10. Mai. Wenn nun der entsprechende INSERT Befehl ausgeführt wird, ergibt sich die Tabelle (Relation) in Abbildung 16. Temporale Datenbanken © Stefan Scheidewig & Daniel Lempe 17 NAME VORNAME GEHALT TRANSACTION VALID Meier Rick 3500 [10-5-98 – 1-8-98] [10-5-98 – NOW] Meier Rick 3500 [1-8-98 – 6-8-98] [10-5-98 – 1-9-98] Meier Rick 3500 [6-8-98 – NOW] [1-5-98 – 1-9-98] Meier Rick 5000 [1-8-98 – NOW] [1-9-98 – NOW] Abb. 16: Die Relation angestellter nach der Änderung am 6. August Das Merkwürdige ist, daß in der VALID PERIOD – Klausel das Intervall vom 1. bis 11. Mai läuft, Rick Meier doch aber ein Gehalt von 3500 Geldeinheiten pro Monat bis zum 1.9. erhält in der Tabelle aber kein Tupel die Gültigkeitszeit von 1.5. bis 11.5. besitzt. Das liegt an der Tatsache, daß TSQL 2 die Fähigkeit hat, Objekte, deren nichttemporale Attribute gleich sind und deren Gültigkeitszeit sich überlappen, zusammenzufassen. So erkennt das System, daß diese Situation vorliegt. Es schließt das alte Tupel mit der Änderungszeit ab (Zeile 2 in der Tabelle von Abbildung 16) und erschafft ein neues, das die vereinigte Gültigkeitszeit enthält. Am 10. August beschließt die Firma einen neuen Mitarbeiter einzustellen, der Kai Schulze heißt und einen befristen Arbeitsvertrag vom 3. September bis zum 5. Oktober für 1500 Geldeinheiten erhalten soll. Dazu wendet man auf die Relation angestellter den in Abbildung 17 dargestellten INSERT - Befehl an, die dann das neue Objekt enthält. NAME VORNAME GEHALT TRANSACTION VALID Meier Rick 3500 [10-5-98 – 1-8-98] [10-5-98 – NOW] Meier Rick 3500 [1-8-98 – 6-8-98] [10-5-98 – 1-9-98] Meier Rick 3500 [6-8-98 – NOW] [1-5-98 – 1-9-98] Meier Rick 5000 [1-8-98 – NOW] [1-9-98 – NOW] Schulze Kai 1500 [10-8-98 – NOW] [3-9-98 – 5-10-98] Abb. 17: Die Relation angestellter nach der Änderung am 10. August Temporale Datenbanken © Stefan Scheidewig & Daniel Lempe 18 6.2.3 Der UPDATE – Befehl Am 11. August beschwert sich der Angestellte Kai Schulze beim Chef, daß er nur lächerliche 1500 Geldeinheiten verdiene und doch die meiste Programmierarbeit mache. Der Chef sieht das ein und weist eine Gehaltserhöhung von 1500 auf 4500 Geldeinheiten an. Da sich die Gültigkeitszeit (sprich die Vertragsdauer) nicht ändert, wendet man den UPDATE – Befehl an, um diese Änderung vorzunehmen. Der UPDATE – Befehl enthält jetzt auch wie der INSERT – Befehl die VALID PERIOD – Klausel. Um also die Datenbank auf den neuesten Stand zu bringen, wendet man den UPDATE - Befehl an und der resultiert in der neuen aktualisierten Relation angestellter, dargestellt in Abbildung 18. NAME Meier VORNAME Rick GEHALT 3500 TRANSACTION [10-5-98 – 1-8-98] VALID [10-5-98 – NOW] Meier Rick 3500 [1-8-98 – 6-8-98] [10-5-98 – 1-9-98] Meier Rick 3500 [6-8-98 – NOW] [1-5-98 – 1-9-98] Meier Rick 5000 [1-8-98 – NOW] [1-9-98 – NOW] Schulze Kai 1500 [10-8-98 – 11-8-98] [3-9-98 – 5-10-98] Schulze Kai 4500 [11-8-98 – NOW] [3-9-98 – 5-10-98] Abb. 18: Änderung am 11. August (keine VALID PERIOD – Klausel im Befehl) Der Befehl bewirkte nun die Erstellung eines neuen Objektes, das sich gegenüber von (Schulze, Kai, 1500) nur im Gehalt und natürlich in der Transaktionszeit unterscheidet. 6.2.4 Der DELETE – Befehl Am 13. August beschließt der Chef, daß Kai Schulze doch nur vom 13. September bis zum 5. Oktober in der Firma benötigt wird und verkürzt unter Einwilligung von Herrn Schulze die Vertragsdauer. Um diese Änderung auch in einer TSQL2 – Datenbank vorzunehmen, benötigt man den DELETE – Befehl, der ebenfalls um die VALID PERIOD – Klausel erweitert wurde. Die WHERE – Bedingungen können durch logische Operatoren, wie Temporale Datenbanken © Stefan Scheidewig & Daniel Lempe 19 man sie aus Hochsprachen kennt, verbunden werden. Um jetzt die Vertragszeit zu verkürzen, muß der Anwender die Zeit eingeben, die abgezogen werden soll. So wird dann die Tabelle (respektive Relation), wie in Abbildung 19 zu sehen, modifiziert. NAME VORNAME GEHALT TRANSACTION VALID Meier Rick 3500 [10-5-98 – 1-8-98] [10-5-98 – NOW] Meier Rick 3500 [1-8-98 – 6-8-98] [10-5-98 – 1-9-98] Meier Rick 3500 [6-8-98 – NOW] [1-5-98 – 1-9-98] Meier Rick 5000 [1-8-98 – NOW] [1-9-98 – NOW] Schulze Kai 1500 [10-8-98 – 11-8-98] [3-9-98 – 5-10-98] Schulze Kai 4500 [11-8-98 – 13-8-98] [3-9-98 – 5-10-98] Schulze Kai 4500 [13-8-98 – NOW] [13-9-98 – 5-10-98] Abb. 19: Änderung am 13. August Dabei kann man erkennen, daß im eigentlichen Sinne überhaupt nicht gelöscht wurde, sondern sogar noch ein neues Tupel hinzugefügt, einfach um die Geschichte nachvollziehen zu können. Die Transaktionszeit des neuen Tupels erhält als Startzeit die Endzeit, des in der VALID PERIOD – Anweisung befindlichen Intervalls. Die Endzeit der Gültigkeitszeit bleibt unverändert, da das Intervall nur bis zum 13. September läuft. 6.2.5 Die SELECT – Anweisung Nachdem wir die Datenbank erschaffen haben, möchten wir jetzt auch auf sie zugreifen können. Um das zu realisieren, bedarf es der SELECT – Anweisung. Der Vorteil von TSQL2 gegenüber SQL92 zeigt sich dann erst richtig. Der Anwender kann nämlich jetzt aussuchen, ob er die aktuellen Daten haben möchte (Snapshot) oder die Daten, wie sie an einem bestimmten Tag waren (historische Betrachtung). Um von unserer Relation angestellter eine Snapshot - Selektion zu machen, führen wir folgende Anweisung aus (siehe Abbildung 20): Dieser einfache Befehl bewirkt, daß das DBMS die Transaktionszeiten aller in der Relation befindlichen Tupel durchforstet und die zur Anfrage Temporale Datenbanken © Stefan Scheidewig & Daniel Lempe 20 gültige Systemzeit mit den Intervallen vergleicht. Befindet sich die Systemzeit in dem Intervall eines speziellen Tupels, so taucht dieses Tupel in der Zielrelation auf (im folgendem Beispiel alle Abb. 20 Tupel mit NOW). Nehmen wir an, wir hätten die Anfrage (Abb. 20) am 4. September gemacht, so würden wir die in Abbildung 21 abgebildete Zielrelation erhalten. (Zur besseren Übersicht wurde die Ausgangsrelation angestellter noch einmal abgebildet) NAME VORNAME GEHALT TRANSACTION VALID Meier Rick 3500 [10-5-98 – 1-8-98] [10-5-98 – NOW] Meier Rick 3500 [1-8-98 – 6-8-98] [10-5-98 – 1-9-98] Meier Rick 3500 [6-8-98 – NOW] [1-5-98 – 1-9-98] Meier Rick 5000 [1-8-98 – NOW] [1-9-98 – NOW] Schulze Kai 1500 [10-8-98 – 11-8-98] [3-9-98 – 5-10-98] Schulze Kai 4500 [11-8-98 – 13-8-98] [3-9-98 – 5-10-98] Schulze Kai 4500 [13-8-98 – NOW] [13-9-98 – 5-10-98] Ursprungsrelation angestellter NAME VORNAME GEHALT TRANSACTION VALID Meier Rick 3500 [6-8-98 – NOW] [1-5-98 – 1-9-98] Meier Rick 5000 [1-8-98 – NOW] [1-9-98 – NOW] Schulze Kai 4500 [13-8-98 – NOW] [13-9-98 – 5-10-98] Abb. 21: Die am 4.9. gestellte Anfrage ergibt die Zielrelation angestellter‘ Diese Anfrage gibt sozusagen die Sicht auf die Datenbank, die zur Anfragezeit aktuell ist. Möchte man jetzt die Gehaltszeitfolge von Rick Meier erfragen, so wendet man den in Abbildung 22 befindlichen SELECT – Befehl an, der ebenfalls am 4.9. benutzt wird. Damit ergibt sich die Relation angestellter‘‘. NAME VORNAME GEHALT TRANSACTION VALID Meier Rick 3500 [6-8-98 – NOW] [1-5-98 – 1-9-98] Meier Rick 5000 [1-8-98 – NOW] [1-9-98 – NOW] Temporale Datenbanken © Stefan Scheidewig & Daniel Lempe 21 Abb. 22: Gehaltszeitfolge von Rick Meier Es gibt natürlich nicht nur die Möglichkeit, die zur Anfragezeit (Systemzeit) gültigen Tupel abzufragen, es ist auch möglich, Anfragen über die modellierte Zeit zu machen. So kann man zum Beispiel anfragen, zu welchen Daten welche Mitarbeiter angestellt sind. In unserem Beispiel aus Abbildung 23 fragen wir, welche Angestellten die Firma zwischen dem 3. September und dem 6. November beschäftigt. NAME VORNAME GEHALT TRANSACTION VALID Meier Rick 5000 [1-8-98 – NOW] [1-9-98 – NOW] Schulze Kai 4500 [13-8-98 – NOW] [13-9-98 – 5-10-98] Abb. 23: zwischen 3. und 6. September beschäftigte Angestellte Wir sehen, daß man in TSQL2 mit Hilfe der Funktion VALID() auf die Gültigkeitszeit zugreifen kann. Natürlich gilt dies auch für die Transaktionszeit, die durch TRANSACTION erreicht werden kann. Zusätzlich haben wir einen Operator angewendet, von welchem wir vorher noch nichts gehört haben. Es handelt sich hierbei um einen Vergleichsoperator, von denen es in TSQL2 insgesamt vier gibt. Die Vergleichsoperatoren sind Operatoren über Intervallen der diskreten Zeit. Das bedeutet, daß die Zeit durch natürliche Zahlen darstellbar sein muß (11-3-98 und 12-3-98, dazwischen ist nichts). In Abbildung 24 sind die Operatoren und eine bildliche Darstellung zu sehen. Abb. 24: Binäre Funktionen in TSQL2 über Zeit Es gibt viele Anwendungsgebiete, bei denen eine geschichtliche Zurückversetzung gefordert wird. Mit Hilfe von TSQL2 ist solch eine Betrachtung möglich. Dabei ist klar, daß man die Transaktionszeit über den SELECT – Befehl explizit ansprechen muß. Als Beispiel soll wieder unsere Relation angestellter dienen. Es soll nun herausgefunden werden, wie die Situation in der Firma an einen gegebenen Tag war, in diesem Fall am 2. August 98 (Abbildung 25). Temporale Datenbanken © Stefan Scheidewig & Daniel Lempe 22 Dabei geschieht ein Zugriff auf die Transaktionszeit mit Hilfe der Funktion TRANSACTION() und es wird kontrolliert, ob die Transaktionszeit die Zeitmarke 2-8-98 überlappt. NAME VORNAME GEHALT TRANSACTION VALID Meier Rick 3500 [10-5-98 – 1-8-98] [10-5-98 – NOW] Meier Rick 3500 [1-8-98 – 6-8-98] [10-5-98 – 1-9-98] Meier Rick 3500 [6-8-98 – NOW] [1-5-98 – 1-9-98] Meier Rick 5000 [1-8-98 – NOW] [1-9-98 – NOW] Schulze Kai 1500 [10-8-98 – 11-8-98] [3-9-98 – 5-10-98] Schulze Kai 4500 [11-8-98 – 13-8-98] [3-9-98 – 5-10-98] Schulze Kai 4500 [13-8-98 – NOW] [13-9-98 – 5-10-98] Ursprungsrelation angestellter NAME VORNAME GEHALT TRANSACTION VALID Meier Rick 3500 [1-8-98 – 6-8-98] [10-5-98 – 1-9-98] Meier Rick 5000 [1-8-98 – NOW] [1-9-98 – NOW] Ergebnisrelation nach Anwendung des SELECT - Befehls Abb. 25 Die Sicht vom 2. August 6.3 Ein Vergleich Im folgenden soll gezeigt werden, was passiert, wenn man versucht, Zeit in SQL92 zu gebrauchen. Um Zeit in SQL92 darzustellen benötigt man zusätzliche Attribute, da es kein PERIOD Datentyp gibt. So benötigt man, um ein Intervall darstellen zu können, zwei Attribute Start und Stop (oder ähnlich) für die Start- und die Endzeit des Intervalls. Außerdem sind Vergleichsoperatoren wie in TSQL2 nicht gegeben und so müssen umfangreiche Selektionen benutzt werden, um die gleichen Ergebnisse zu erzielen für Anfragen, die nur wenige Zeilen Code in TSQL2 erfordern. Möchte man zum Beispiel das aktuelle Gehalt von Temporale Datenbanken © Stefan Scheidewig & Daniel Lempe 23 Rick Meier erfragen, ergeben sich folgende Anfragen in SQL92 (Abbildung 26) und in TSQL2 (Abbildung 27): Abb. 27: TSQL2 Abb. 26: SQL92 - Anfrage Wie man sehen kann, sind temporale Datenbanksysteme ein Fortschritt hinsichtlich der Implementierung von Zeit, doch TSQL2 ist nicht der einzige Ansatz Zeit in ein DBMS einzubinden. 6.4 Weitere temporale Datenbanken In der relativ kurzen Zeit dieser jungen Wissenschaft, gab es schon viele Ansätze. Da temporale Datenbanken besonders geeignet sind zum erfassen von Viehbeständen und anderen agrarischen Dingen, entwickelte die Landwirtschaftsuniversität Athen einen temporalen SQL92 – Aufsatz IXSQL, der auf Intervallen basiert. Ein weiteres auf SQL92 aufbauendes System existiert mit ATSQL, welches auf dem relationalen Datenmodell aufbaut. SQL/Temporal gebraucht Konstrukte von TSQL2 und ATSQL und erlaubt doppelte Tupel. In SQL/TP existiert eine weitere Erweiterung von SQL92 und mit TOQL besteht auch die Möglichkeit für das objektorientierte Datenmodell, die Vorzüge von temporalen Datenbanksystemen auszunutzen. 7. Zusammenfassung Zusammenfassend kann gesagt werden, daß die bitemporale Datenhaltung durchaus eine komplexe Angelegenheit ist,daß sie aber durch den Eisatz geeigneter Mittel effizient und Temporale Datenbanken © Stefan Scheidewig & Daniel Lempe 24 sicher implementiert werden kann. Im Laufe der nächsten Jahre werden auf diesem Gebiet sicherlich noch größere Forschritte zu verzeichen seien, da die temporale Datenhaltung grosse Vorteile beinhaltet,wie wir hoffentlich gezeigt haben. Literaturverzeichnis “Anbindung der temp. Anfragesprache TSQL2 an ein objektorientiertes Datenbanksystem“, Universität Rostock, Diplomarbeit, Arne Lange, 1996 ”TSQL2 Language Specification”, u.a. R.T. Snodgrass Sept., 1994 “Temporale Datenbanken“, Seminar Uni. Rostock, W. Schmidt, SS 1996 “Temporal Databases: theory, design and implementation” Benjamin Cummings 1993 “Das temporale Datenmodell”, Seminar Universität Jena, Alexander Hermann, 2001 “The TSQL2 Temporal Query Language”, Kluwer Academic Publication, R.T. Snodgrass, 1995 “Temporal Database System Implementations,” ACM SIGMOD Record, M.H. Böhlen, 1995 “Temporale Datenbanken und TSQL2“, Universität Rostock, Bernd Griefahn, 1997 Temporale Datenbanken © Stefan Scheidewig & Daniel Lempe