Temporale Datenbank
# Temporale Datenbank

Als temporale Datenbank werden Datenbanksysteme bezeichnet, die eine Unterstützung zumindest einiger Aspekte der Speicherung zeitbezogener Daten bieten, die über die Unterstützung zeitbezogener Datentypen hinausgeht und die somit für eine temporale Datenhaltung besonders geeignet sind.

Neben den temporalen Datenbanken gibt es auch noch die spatio-temporalen Datenbanken, die neben der zeitlichen auch noch eine räumliche Dimension abbilden, der Schwerpunkt bei diesen Datenbanken liegt aber im Regelfall auf der räumlichen Dimension.

Abgesehen von Teradata 13.10 existiert derzeit noch kein kommerzielles Datenbanksystem, das die Anforderungen der temporalen Datenhaltung umfänglich abbildet. Es existieren jedoch einige Entwürfe, die im Wesentlichen Erweiterungen relationaler Datenbanken darstellen. Insbesondere der in Arbeit befindliche zukünftige Standard SQL/Temporal, der ursprünglich als Teil des SQL-Standards SQL3 bzw. SQL:1999 vorgesehen war, soll die Ansätze der derzeit existierenden Entwürfe vereinen und eine umfassende Unterstützung zur Speicherung temporaler Daten bieten. Die Standardisierung geriet aufgrund von Meinungsverschiedenheiten einstweilig ins Stocken, sodass SQL/Temporal im Standard SQL:2008 ausblieb, aber der Standard SQL:2011 befasst sich mit temporalen Datenbanken.

## Kriterien

Die folgenden Kriterien sind zur Einordnung temporaler Datenbanken hilfreich:

* Zeitdimension Dabei wird zwischen Gültigkeitszeit (Zeitraum, in dem ein Objekt in der modellierten Realität den beschriebenen Zustand aufweist) und Transaktionszeit (Zeitpunkt, zu dem eine Datenänderung in der Datenbank erfolgt) unterschieden. Sind sowohl Gültigkeits- als auch Transaktionszeit relevant, spricht man von bitemporal.
* Verwendeter Datentyp zur Zeitstempelung Hier sind elementare Zeitangaben, Intervalle oder sogenannte temporale Elemente (eine Zusammenfassung beliebig vieler Intervalle) zu unterscheiden.
* Explizite oder implizite Zeitstempelung Hierbei wird unterschieden, ob der Zeitstempel implizit vom Datenbanksystem ergänzt wird oder explizit angegeben werden muss.
* Tupel- oder Attribut-Zeitstempelung Es ist zu unterscheiden, ob die Zeitstempelung für jedes Attribut einzeln oder für eine gesamte Datenzeile (Tupel) erfolgt.
* Automatische temporale Normalisierung (Coalescing) Manche Datenbanksysteme führen nach entsprechenden Aktualisierungsoperationen automatisch eine Zusammenfassung von Zeiträumen mit übereinstimmenden Attributwerten durch.

## Konzepte temporaler Datenbanken

Im Folgenden werden wesentliche derzeitige Konzepte temporaler Datenbanken kurz dargelegt. Diese Aufstellung erhebt aber keinen Anspruch auf Vollständigkeit.

### IXSQL

| Zeitdimension | Gültigkeitszeit |
| - | - |
| Datentyp zur Zeitstempelung | Intervall |
| Zeitstempelung explizit/implizit | explizit |
| Tupel- oder Attributzeitstempelung | Tupel |
| Automatisches Coalescing | Nein |

Das Interval Extended Relational Model (IXRM) und die darauf basierende Sprache IXSQL ist eine Erweiterung von SQL um eine umfassende Unterstützung von Intervalldaten, die sich nicht notwendigerweise ausschließlich auf temporale Intervalle beziehen müssen. Damit unterscheidet es sich grundlegend von den anderen hier vorgestellten Konzepten temporaler Datenbanken. IXSQL ist dabei aufwärtskompatibel zu SQL92.

Die wichtigsten Erweiterungen gegenüber SQL92 sind neben dem Intervall-Datentypen die Operationen FOLD („Zusammenfalten“) bzw. UNFOLD („Auffalten“). Dabei bewirkt UNFOLD eine Zerlegung eines Intervalls in eine Menge einzelner Punktwerte. FOLD ist die gegenteilige Operation – dabei wird eine Menge einzelner Punktdaten wieder zu Intervallen zusammengefasst – und bewirkt somit eine temporale Normalisierung für die betroffenen Attribute.

### TSQL2

| Zeitdimension | bitemporal |
| - | - |
| Datentyp zur Zeitstempelung | Temporales Element |
| Zeitstempelung explizit/implizit | implizit |
| Tupel- oder Attributzeitstempelung | Tupel |
| Automatisches Coalescing | Ja |

Die Sprache TSQL2 wurde von einer größeren Gruppe von Forschern entwickelt und basiert auf dem Bitemporal Conceptual Data Model (BCDM). Auch TSQL2 ist aufwärtskompatibel zu SQL92.

Das BCDM verwendet bitemporale Elemente zur Zeitstempelung, d. h., alle Tupel mit gleichen Attributwerten können immer zu einer einzigen Zeile zusammengefasst werden, da der bitemporale Zeitstempel die Vereinigungsmenge aller relevanten Zeitintervalle jeweils aufnehmen kann. Außerdem erfolgt die Zeitstempelung implizit, d. h., bei den Zeitstempeln handelt es sich um keine „normalen“ Attribute, die direkt beeinflussbar sind. Ein weiteres besonderes Merkmal des BCDM ist, dass diese Zusammenfassung von Tupeln mit gleichartigen Attributwerten (Coalescing) automatisch erfolgt.

Um auch zeitlich verankerte Intervalle abbilden zu können, existiert in TSQL2 der Datentyp PERIOD. In Verbindung mit diesem Typ werden auch zusätzliche spezielle Vergleichsoperatoren eingeführt (MEETS, PRECEDES, OVERLAPS und CONTAINS).

### ATSQL2

| Zeitdimension | bitemporal |
| - | - |
| Datentyp zur Zeitstempelung | Intervall |
| Zeitstempelung explizit/implizit | explizit |
| Tupel- oder Attributzeitstempelung | Tupel |
| Automatisches Coalescing | Nein |

Im Unterschied zu den anderen hier vorgestellten Konzepten stützt sich ATSQL2 nicht auf ein spezielles Datenbanksystem ab, sondern fungiert als Frontend eines herkömmlichen relationalen Datenbanksystems. Dabei werden beispielsweise Oracle und Sybase unterstützt.

Die von ATSQL2 verwendete Sprachsyntax ist an TSQL2 angelehnt. Jede Datenbank-Anweisung wird dabei in eine oder mehrere SQL92-Anweisungen umgewandelt.

Ein weiterer wesentlicher Unterschied von ATSQL2 zu den anderen vorgestellten Konzepten ist, dass es mit TimeDB bereits einen funktionsfähigen Prototyp gibt (siehe Weblinks).

## Produkte mit Unterstützung für temporal Daten

* Oracle hat ab Version 10 Unterstützung für temporale Daten, und ab Version 12 die temporalen Funktion von SQL2011 implementiert
* DB2 von IBM bietet ab Version 10 Unterstützung für temporale Daten, welche auf dem SQL2011 Standard basieren
* PostgreSQL bietet ab Version 9.2 viele der temporalen Features an
* Teradata bietet ab Version 13.10 temporale Features und ab Version 14 TSQL2 Features
* Microsoft SQL Server bietet ab Version 2016 Temporale Tabellen
* MariaDB bietet ab Version 10.3 temporale Funktionen
