Der Begriff "Historisierung" (auch temporale Datenhaltung genannt) bezeichnet das Festhalten des zeitlichen Verlaufs von Daten in einer Datenbank. Eine Historisierung ermöglicht es, festzustellen, welcher Wert zu welchem Zeitpunkt gültig war oder gültig werden wird (zusätzliche Dimension der Datenhaltung). Dabei unterscheiden wir zwischen Transaktionszeit und Gültigkeitszeitraum:
- Transaktionszeit: Der Zeitpunkt, an dem eine Zeile in die Tabelle eingefügt wurde (Beispiel: Ein Preis für Produkt A wurde am 31.05.2009 eingetragen).
- Gültigkeitszeitraum: Der Zeitraum, in dem die eingefügte Zeile gültig ist (Beispiel: Ein Preis für Produkt A gilt nur vom 31.05.2009 bis zum 30.06.2009).
Beispiel herunterladen
Das Beispiel zum Artikel im Zip-Format gibt es hier.
In einigen Anwendungsfällen sind beide zeitlichen Betrachtungen relevant. Dann sprechen wir von einer "bitemporalen" Historisierung.
Zusätzlich wird bei der Historisierung zwischen Zeit- und Ereignissteuerung unterschieden. Bei der zeitgesteuerten Variante wird der aktuelle Datenbestand (entweder vollständig oder ein Delta zum zuletzt historisierten Bestand) zu einem Zeitpunkt (meist in der Nacht durch einen Batch-Job) historisiert. Bei der Ereignissteuerung wird bei jeder Datenänderung (insert, update, delete) der zu modifizierende Datensatz (meist mit Modifikationskennzeichen) in den historischen Stand eingefügt. Das bedeutet, dass der aktuelle Datenbestand bei dieser Variante permanent zweimal in der Datenbank vorhanden ist: zum einen im aktuellen und zum anderen im historischen Datenbestand. Aktuelle und historische Daten sollten sinnvollerweise in unterschiedlichen Tabellen gehalten werden, da sonst die Übersichtlichkeit leidet.
Der ereignisgesteuerte Ansatz wird sinnvollerweise mit so genannten "Datenbanktriggern" (im Folgenden "Trigger" genannt) umgesetzt. Ein Trigger ist ein PL-/SQL-Programm, das innerhalb der Datenbank bei (bzw. vor oder nach) bestimmten Operationen wie insert, update oder delete ausgeführt wird. In diesen Programmen sind Informationen, z. B. der alte und neue Wert einer Spalte bei einer Datensatzaktualisierung vorhanden. Mit diesen Informationen ist es möglich, den Stand vor der Aktualisierung in eine andere Tabelle zu schreiben. Es ist zu beachten, dass ein Trigger nur einmal pro Aktion "feuert", d. h. eine Massenoperation über mehr als einen Datensatz ist mit Triggern nicht möglich, da lediglich ein Datensatz historisiert wird.
Der "ereignisorientierte Ansatz" und der Aufbau sowie die Arbeitsweise der Trigger soll im Folgenden anhand eines Cases aus dem Automotive-Bereich erklärt werden:
Wir betrachten ein Händlerportal, beim dem untertags Daten wie z. B. Preise oder Ersatzteile geändert werden können. Da bei Vertragsabschluss unter Umständen andere Werte gültig sind als drei Stunden später, muss eine ereignisgesteuerte Historisierung implementiert werden.




