Temporale Datenbanken Hanno Eichelberger, Alexander Ruder, Khalid Addakiri Temporale Datenbanken Inhalt: Grundlagen und Konzepte Defintion Probleme, Anforderungen Die Zeit Ereignisse und Fakten Zeitinterpretationen und Relationsarten Zeitreihendaten Temporale Operationen Referent: Hanno Eichelberger Definition Eine temporale Datenbank ist , ein Datenbank Management System mit eingebautem Zeitaspekt, z.B. ein temporales Datenmodell mit einer zeitlichen Abfragesprache. (s. Wikipedia) Betrachtung der zeitlichen Entwicklung eines Objektes Probleme Erweiterung nötig Hoher Speicherbedarf Standardisierung Anforderungen Temporale Zugriffsmodelle für Tupeloder Attributversionen anwendbar Unterstützung von Gültigkeitsund/oder Aufzeichnungszeit Änderung historischer Daten Abfrage von älteren und zukünftigen Versionen Der Zeitstempel Zeitstempel Granularität Chronon Name Gehalt Maier 1000 Euro Stunde Minute Sekunde Chronen = 1 Sekunde (Uhrzeiger) Beispiele für Granularitäten Eigenschaften Granularität Gleichzeitige Ereignisse Verschiedene Länge Gegenwärtiger Zeitpunkt Zeitelemente Zeitintervalle (PERIOD-TSQL2.0) Mengen von Zeitpunkten oder Zeitmarken Zeitpunkt (TIME,DATE,TIMESTAMP) Zeitdauer (INTERVAL) Verschiedene Informationsarten Punktereignisse oder Fakten Einzahlungen s Einzahlungen auf Konto Zeitpunkt t Verschiedene Informationsarten Dauerereignisse oder Fakten Gehalt u Gehaltsstatistik Zeitpunkt t Verschiedene Informationsarten Fieberkurve eines Patienten Fieberwert g Kontinuierliche Ereignisse oder Fakten Zeitpunkt t Zeitinterpretationen Gültigkeitszeit Aufzeichnungszeit Beobachtungszeit Benutzerdefinierte Zeit Relationsunterscheidungen Snapshot Gültigkeitszeitrelation Aufzeichnungzeitsrelation Bitemporale Relation Gültigkeitszeitrelation Beispiel Start- und Endzeitpunkt extra Name Primärschlüssel Gehalt Gültigkeitsstartzeit Gültigkeitsendzeit Müller 123456789 1000,00 01.01.2004 31.12.2004 Müller 123456789 1200,00 01.01.2005 20.03.2005 Müller 123456789 1500,00 21.03.2005 Now Friedrich 777778888 3000,00 01.01.2003 Now Gültigkeitszeitrelation Beispiel Dasselbe mit Gültigkeitszeitintervallen Name Primärschlüssel Gehalt Gültigkeitszeitintervall Müller 123456789 1000,00 [01.01.2004,31.12.2004] Müller 123456789 1200,00 [01.01.2005,20.03.2005] Müller 123456789 1500,00 [21.03.2005,NOW] Friedrich 777778888 3000,00 [01.01.2003,NOW] Gültigkeitszeitrelation Beispiel Aufzeichnung der Gültigkeitszeiten mit einer Menge von Zeitpunkten. Name Entfernung Zeitmarken in Wochen Müller 4 km {(1),(2)} Müller 10 km {(3),(4),(5)} Müller 15 km {(6),(7),(8)} Friedrich 20 km {(1),..,(8)} In bestimmter Granularität Bitemporale Relation Beispiel Aufzeichnungszeitende Aufzeichnungszeitstart Name Arbeitsbereich G. Start G. End A.Start A.End Müller Spielwarenabteilung 11.09.2005 29.09.2005 02.09.2005 UC Gültigkeitszeitstart Gültigkeitszeitende Bitemporale Relation Beispiel Name Arbeitsbereich G. Start G. End A.Start A.End Müller Spielwarenabteilung 11.09.2005 29.09.2005 02.09.2005 05.09.2005 Müller Spielwarenabteilung 11.09.2005 25.09.2005 06.09.2005 UC Bitemporale Relation Beispiel Name Arbeitsbereich Zeitmarken in Tagen Im Monat September Müller Spielwarenabteilung (11,2),..,(11,5),(29,2),...,(29,5), (11,6),...,(11,29),(25,6),..,(25,UC) (Gültigkeitszeitmarke, Aufzeichnungszeitmarke) Zeitfolgen Versionen Name Primärschlüssel Gehalt Gültikeitszeitintervall Müller 123456789 100,00 [01.01.2004,31.12.2004] Müller 123456789 120,00 [01.01.2005,20.03.2005] Müller 123456789 150,00 [21.03.2005,NOW] Wong 777778888 300,00 [01.01.2003,NOW] Ähnlichkeit zu Informationsarten Zeitfolge = Verschiedene Versionen von Objekt Datenmodelle 1NF (1st Normal Form) N1NF(Non 1st Normal Form) N1NF Beispiel Name Gehalt <[01.09.2003,01.09.2004],2000> Müller <[02.09.2004,NOW],2500> Zeitreihendaten Bsp.: Aktienschlusskurse in einer Woche Zeitdatenreihe (100, 200, 150, 125, 300, 400, 500) Tag 1 Tag 2 Tag 3 Tag 4 Tag 5 Tag 6 Tag 7 Vordefinierte Sequenz Temporale Relationsalgebra Projektion zeigt aller zu einer Gültigkeitszeit aktuellen Werte an Bei Selection wird zusätzlich eine Gütigkeitszeit mit angegeben Gültigkeitszeit Tupel 1 Gültigkeitszeit Tupel 2 Bei einem Theta-Join wird mit einem Ausdruck F eine F Gültigkeitszeit für die kombinierten Tupels berechnet Gültigkeitszeit für Ergebnistupel Temporale Relationsalgebra Left-Outer-Join ermittelt mit Ausdruck F und F‘ die neue Gültigkeitszeit Vereinigung ist identisch Differenz: Ist ein Tupel von R-S gleich und die Differenz der Zeitstempel Tr-Ts nicht null so wird das Tupel trotzdem übernommen. Update Operationen Insert: Existiert ein identisches Tupel so wird dessen Zeitstempel erweitert, sonst wird neues Tupel eingefügt. Delete: Ändert Aufzeichnungszeitende des Tupels Replace: Delete mit anschliessendem Insert Einleitung Basiskonzepte Oracle Time Series (Konzepte, Architektur, Konsistenz) Temporal SQL/SQL2 Aufgaben Temporaler DBMS Speicherung Zeitrelevanter Daten Informationen mit zeitlicher Gültigkeitsdauer Applikationen mit zeitlichen Aspekten Buchhaltungssysteme Transaktionsüberwachung Anwendungen kaum Anwendungen ohne zeitliche Relevanz Alle Anwendungen profitieren von automatisierter Unterstützung von temporalen Daten Informationen sind Verauchsgüter Basiskonzepte Einfachstes Konzept: Erweiterung relationaler Tabellen Problem: ● Schematas sind zu kompliziert ● SQL Abfragen unhandlich und langsam Basiskonzepte, Zeit Lineare Zeit Zeitgrenzen (left, right, bound) Density (discrete, dense, continuous) Kalender Datentypen, zum Beispiel SQL92: – – – – – DATE (YYYY-MM-DD) TIME (HH:MM:SS) DATETIME (YYYY-MM-DD HH:MM:SS) INTERVAL (no default granularity) TSQL2: PERIOD: DATETIME - DATETIME 3. Oracle TimeSeries vormals TimeSeries Cartridge Erweiterung zur Speicherung und zum Retrieval zeitbehafteter Daten mit Hilfe von Objekttypen bietet Funktionen zur bequemen Ermittlung u.a. von: – – Aktienkurse an einem bestimmten Datum monatl. Umsätze f. eine Aktie in einem best. Jahr Oracle Time Series Regular Time Series – – – Dateneingabe nach zugeordneten Kalender Periodische Intervalle zB Kursinformationen einer Aktie Irregular Time Series – – – Nicht periodisch, kein zegeordneter Kalender Lastspitzen zB Transaktionsdaten von Bankkonten Oracle TS - Data Generation Oracle TS – Data Generation Detailierte individuelle Verlaufsdaten (zB Aktienhandel) Jeder Datensatz besitzt Zeitstempel und Unique-ID Aufsummieren nach Zeitperiode (zB Tagessummen) Abspeichern der Summensätze in getrennter Tabelle Summen sind Grundstock für Historical Data – Tägliche Aktualisierung der H.D. durch Tagessummen – Anpassen der Korrekturen an den Tagessummen in Intervallen – Queries können jederzeit erfolgen – Ignoriert Daten mit dem aktuellen Datum bis Ende des update cycles Oracle TS – Historical Data Oracle TS – Historical Data Wenige Metadaten, extrem hohe Datenmengen Basis für viele Funktionen: Summen, Maxima, Minima, Flusswerte... Beispiel Aktienhandel: – – – – mehrere Aktien, mit eindeutiger Ticker-ID in der Datenbank pro Aktie mehrere Metawerte (ticker, timestamp, open...) jede Aktie hat eine oder mehrere Zeitreihen jede Zeitreihe besitzt einen zugehörigen Kalender Oracle TS – Kalender Kann einer Zeitreihe zugeordnet werden (reguläre) Shared Kalender Kalender -Frequenz - Feinheit der Kalenderdarstellung: Sekunde, Tag, Jahr.. Kalender – Schema (Pattern) – Intervall für die Frequenz und Startdatum des ersten Intervall Durchlaufes Kalender – Exceptions – – – Zeitstempel die nicht in den Kalender passen, aber gebraucht werden Off - Exception, Ausnahme für nichtnull Werte, diese werden entfernt On – Exception, Ausnahme für null Werte, diese werden hinzugefügt Oracle TS – Datentypen Kalendertypen CREATE TYPE ORDSYS.ORDTCalendar AS OBJECT ( caltype INTEGER, name VARCHAR2(256), frequency INTEGER, pattern ORDSYS.ORDTPattern, minDate DATE, maxDate DATE, offExceptions ORDSYS.ORDTExceptions, onExceptions ORDSYS.ORDTExceptions); CREATE TYPE ORDSYS.ORDTPatternBits AS VARRAY(32500) OF INTEGER; CREATE TYPE ORDSYS.ORDTPattern AS OBJECT ( patBits ORDSYS.ORDTPatternBits, patAnchor DATE); Exception (ORDTExceptions) CREATE TYPE ORDSYS.ORDTExceptions AS VARRAY(32500) OF DATE; Datentypen für Zeitreihen CREATE TYPE ORDSYS.ORDTNumCell AS OBJECT (tstamp DATE, value NUMBER); CREATE TYPE ORDSYS.ORDTNumTab AS TABLE OF ORDSYS.ORDTNumCell; CREATE TYPE ORDSYS.ORDTNumSeries AS OBJECT ( name VARCHAR2(256), cal ORDSYS.ORDTCalendar, series ORDSYS.ORDTNumTab ); CREATE TYPE ORDSYS.ORDTNumSeriesIOTRef AS OBJECT( name VARCHAR2(256), cal REF ORDSYS.ORDTCalendar, table_name VARCHAR2(256), tstamp_colname VARCHAR2(30), value_colname VARCHAR2(30), qualifier_colname VARCHAR2(30), qualifier_value VARCHAR2(4000)); CREATE TYPE ORDSYS.ORDTVarchar2Cell AS OBJECT (tstamp DATE, value VARCHAR2(4000)); CREATE TYPE ORDSYS.ORDTVarchar2Cell AS OBJECT (tstamp DATE, value VARCHAR2(4000)); CREATE TYPE ORDSYS.ORDTVarchar2Tab AS TABLE OF ORDSYS.ORDTVarchar2Cell; CREATE TYPE ORDSYS.ORDTVarchar2Series AS OBJECT( name VARCHAR2(256), cal ORDSYS.ORDTCalendar, series ORDSYS.ORDTVarchar2Tab); CREATE TYPE ORDSYS.ORDTVarchar2SeriesIOTRef AS OBJECT( name VARCHAR2(256), cal REF ORDSYS.ORDTCalendar, table_name VARCHAR2(256), tstamp_colname VARCHAR2(30), value_colname VARCHAR2(30), qualifier_colname VARCHAR2(30), qualifier_value VARCHAR2(4000)); CREATE TYPE ORDSYS.ORDTDateTab AS TABLE OF DATE; Oracle TS -Architektur Speicherung der detaillierten Verlaufsdaten Instanzen und Referenzen basierende API Kalenderfunktionen Time Series Funktionen Skalierungsfunktionen Administrationstools Oracle TS – Speicherung ● Gespeichert werden 3 verschiedene Informationstypen ● Bewegungsdaten, Kalender und Metadaten ● Index basierende Tabellen : multiple rows in 3 Tabellen ● Nested Table: Verlaufsdaten werden als Objekte geschrieben ● Daten aufsteigend nach Zeitstempel sortiert Oracle TS – Konsistenz Regeln für Zeitreihen – – – – – – alle Zeitstempel sind aufsteigend sortiert alle Zeitstempel sind eindeutig alle Zeitstempel erfüllen die Kalender precision es gibt keine Zeistempel ausserhalb des Gültigkeitsbereiches alle Zeitstempel passen in das Kalenderschema, abzüglich der durch die Exceptions erfassten. die Zeitreihe ist fortlaufend, das heisst zwischen dem kleinsten und dem größten Zeitstempel in der Zeitreihe, enthalten die Verlaufsdaten records für jedes gültige Kalenderdatum. Oracle TS - Konsistenz Precision ● Verwendung eines Views, verhindert das Einfügen, Löschen und Ändern eines ungültigen Zeitstempels INSTEAD OF Trigger Insert: Zeitstempel muss im Kalender gültig sein Einfügen vor dem ersten bzw nach dem letzten Zeitstempel ● Delete: bei leerer Zeitreihe wird Exception geworfen es kann nur der letzte bzw der erste Zeitstempel gelöscht werden ● Update: Zeitstempel muss existieren keine Änderungen am Zeitstempel oder der Unique-ID gestattet ● ● Erlaubt gebündeltes Einfügen und Löschen, Reihenfolge gewährleistet Temporal SQL Konzepte sind ähnlich Oracle Time Series Datentypen Spracherweiterungen Standardkonzepte in Planung Temporal SQL/ SQL2(Fort) Basis: bitemporale Datenmodell Spracherweiterungen: VALIDTIME, TRANSACTIONTIME, PERIOD, … Vergleich von Zeitintervallen: MEETS, PRECEDES, OVERLAPS und CONTAINS Quellen Oracle8i Time Series User‘s Guide TimeCenter www.TimeConsult.com ● Temporale Datenbanken Abfragen an temporalen Datenbanken Aufbau einer temporalen Datenbank SQL 92 Norm - current Abfragen - sequenced Abfragen - nonsequenced Abfragen - Joins Analogie SQL 3 ● Temporale Datenbanken Aufbau temporaler Tabelle Gültigkeitsbeginn Gültigkeitsende Weide Parzelle Pferch Anzahl Von Bis 1 137 1 17 1998-02-07 1998-02-18 1 219 1 43 1998-02-25 1998-03-01 1 219 1 20 1998-03-01 1998-03-14 1 219 2 23 1998-03-01 1998-03-14 1 219 2 43 1998-03-14 9999-12-31 1 374 1 14 1998-02-20 9999-12-31 Beispiel: Viehzucht Valid Time ● Temporale Datenbanken SQL 92 - Current Abfragen liefern immer Informationen über den derzeit gültigen Zustand einer temporalen Tabelle Beispiel: Wie viel Vieh von Parzelle 219 auf Weide 1 befindet sich gerade in jedem Pferch Abfrage SELECT Pferch, Anzahl FROM Viehzucht WHERE Weide=1 AND Parzelle = 219 AND Bis = DATE‘9999-12-31‘ liefert Pferch Anzahl 2 43 ● Temporale Datenbanken SQL 92 - sequenced Abfragen liefern immer Informationen über die Entwicklung einer temporalen Tabelle, d.h. sie gibt eine zeitliche Abfolge zurück Beispiel: Gib die Entwicklung von Parzelle 219 auf Weide 1 pro Pferch aus Abfrage SELECT Pferch, Anzahl, Von, Bis FROM Viehzucht WHERE Weide=1 AND Parzelle = 219 liefert Pferch 1 1 2 2 Anzahl 43 20 23 43 Von 1998-02-25 1998-03-01 1998-03-01 1998-03-14 Bis 1998-03-01 1998-03-14 1998-03-14 9999-12-31 Man kann hier nun erkennen dass Vieh aus Pferch 1 am 01.03.1998 umgelegt wurde in Pferch 2 und am 14.03.1998 der Rest nachfolgte ● Temporale Datenbanken SQL 92 - nonsequenced Abfragen betreffen irgendwelche Zeitpunkte an denen etwas in der Tabelle zutrifft. Die Gültigkeit der Tupel ist nicht relevant Beispiel: Wie viel Vieh von Parzelle 219 auf Weide 1 war zu irgendeiner Zeit in jedem Pferch Abfrage SELECT Pferch, Anzahl FROM Viehzucht WHERE Weide=1 AND Parzelle = 219 liefert Pferch 1 1 2 2 Anzahl 43 20 23 43 ● Temporale Datenbanken SQL 92 - Joins Auch bei Joins wird zwischen current, nonsequenzed und sequenzed unterschieden Beispiel Join zwischen zwei Viehzuchttabellen: Anfrage: Wie viel Vieh aus unterschiedlichen Parzellen steht 3. gerade (current Abfrage) oder 4. zu irgendeiner Zeit () im selben Pferch ● Temporale Datenbanken SQL 92 1. SELECT V1.Parzelle,V2 Parzelle, Pferch FROM Viehzucht AS V1,Viehzucht AS V2 WHERE V1.Parzell < V2.Parzelle AND V1.Weide = V2.Weide AND V1.Pferch = V2.Pferch AND V1.Bis=Date‘9999-12-31‘ AND V2.Bis=Date‘9999-12-31‘ 2. SELECT V1.Parzelle,V2 Parzelle, Pferch FROM Viehzucht AS V1,Viehzucht AS V2 WHERE V1.Parzell < V2.Parzelle AND V1.Weide = V2.Weide AND V1.Pferch = V2.Pferch ● Temporale Datenbanken SQL 92 - Joins Um zu zeigen wann jemals Vieh aus unterschiedlichen Parzellen zur selben Zeit im selben Pferch standen wird eine sequenced Anfrage benötigt. Diese Anfrage muss jedoch eine Fallanalyse durchführen um festzustellen wie der Gültigkeitszeitraum jedes Tupels aus V1 den Gültigkeitszeitraum jedes Tupels V2 überschneidet. 4 Fälle: Gültigkeit V1=V1, Gültigkeit 3. V2=V2 1. V1 V2 2. V1 V2 V1 V2 4. V1 V2 In einer sequenced Anfrage müssen alle 4 Fälle beachtet werden ● Temporale Datenbanken SQL 92 - Joins sequenced Anfrage SELECT V1.Parzelle, V2.Parzelle, V1.Pferch, V1.Von, V1.Bis FROM Viehzucht AS V1, Viehzucht AS V2 WHERE V1.Parzelle<V2.Parzelle AND V1.Weide=V2.Weide AND V1.Pferch=V2.Pferch AND V2.Von <=V1.Von AND V1.Bis <= V2.Bis UNION SELECT V1.Parzelle, V2.Parzelle, V1.Pferch, V1.Von, V1.Bis FROM Viehzucht AS V1, Viehzucht AS V2 WHERE V1.Parzelle<V2.Parzelle AND V1.Weide=V2.Weide AND V1.Pferch=V2.Pferch AND V1.Von >V2.Von AND V2.Bis < V1.Bis AND V1.Von < V2.bis ● Temporale Datenbanken SQL 92 - Joins sequenced Anfrage UNION SELECT V1.Parzelle, V2.Parzelle, V1.Pferch, V1.Von, V1.Bis FROM Viehzucht AS V1, Viehzucht AS V2 WHERE V1.Parzelle<V2.Parzelle AND V1.Weide=V2.Weide AND V1.Pferch=V2.Pferch AND V1.Von <=V2.Von AND V2.Bis <= V1.Bis UNION SELECT V1.Parzelle, V2.Parzelle, V1.Pferch, V1.Von, V1.Bis FROM Viehzucht AS V1, Viehzucht AS V2 WHERE V1.Parzelle<V2.Parzelle AND V1.Weide=V2.Weide AND V1.Pferch=V2.Pferch AND V2.Von >V1.Von AND V1.Bis < V2.Bis AND V2.Von < V1.bis ● Temporale Datenbanken SQL 92 - Joins sequenced Anfrage Das Ergebnis dieser Abfrage enthält zwei Zeilen L1 L2 Pferch Von Bis 219 374 1 1998-02-25 1998-03-01 219 374 1 1998-03-01 1998-03-14 Aufgrund der Komplexität solcher Abfragen mit dem derzeitigen SQL 92 Standart wird zur Zeit ein neuer Standart entwickelt der SQL 3 Standart der auch temporale Abfragen unterstützt. ● Temporale Datenbanken SQL 3 - Ein erster Unterschied zur 92 Norm liegt in der Erzeugung einer Tabelle CREATE TABLE Viehzucht (Weide INTEGER, Parzelle INTEGER, Pferch INTEGER, Anzahl INTEGER) AS VALIDTIME PERIOD (DATE) Gibt die Unterstützung der VALID TIME an Auch der INSERT in so erzeugte Tabellen wurde vereinfacht so hat folgender INSERT INSERT INTO Viehzucht VALUES(1,219,1,20) Die Ausgabe Weide Parzelle Pferch Anzahl VALID 1 219 1 20 [1998-02-01 – 9999-12-31) Der VALID Wert läuft immer vom Erzeugungsdatum bis forever (9999-12-31) ● Temporale Datenbanken SQL 3 Abfragen -current Auch current Abfragen werden nun unterstützt während in SQL 92 noch das Gültigkeitsende verglichen werden musste wird es hier automatisch erkannt d.h. unsere könnte man so schreiben SELECT Pferch, Anzahl FROM Viehzucht WHERE Weide=1 AND Parzelle = 219 ● Temporale Datenbanken SQL 3 Abfragen -sequenced sequenced Abfragen unterscheiden sich von current Abfragen nur insofern, dass ihnen vor das SELECT der Ausdruck VALIDTIME gestellt wird unser sequenced Abfrage nach SQL 92 können wir so schreiben VALIDTIME SELECT Pferch, Anzahl FROM Viehzucht WHERE Weide=1 AND Parzelle = 219 Der Ausdruck sorgt dafür, dass jeder Zustand nicht nur der derzeitige ausgewertet wird ● Temporale Datenbanken SQL 3 Abfragen -nonsequenced nonsequenced Abfragen unterscheiden sich von sequenced Abfragen nur insofern, dass ihnen vor das VALIDTIME der Ausdruck NONSEQUENCED gestellt wird unsere nonsequenced Abfrage nach SQL 92 können wir so schreiben NONSEQUENCED VALIDTIME SELECT Pferch, Anzahl FROM Viehzucht WHERE Weide=1 AND Parzelle = 219 Der NONSEQUENCED Ausdruck sorgt dafür, dass das DBMS erkennt das es sich um eine NONSEQUENCED Abfrage handelt und diese auch dem entsprechend behandelt