Jeder, der eine Standard SCD „Slowly Changing Dimensions“ Komponente von ETL Tools nutzt, kennt die Vorgehensweise bei Typ2 mit der wohl am meisten genutzten Form der Historisierung.
Stellvertreter Schlüssel | Geschäfts-Schlüssel | Feld 1 | Feld n | Gültig ab | Gültig bis | Historischer Stellvertreter |
---|---|---|---|---|---|---|
2 | 4711 | Tisch | Rund | 01.01.2015 | 19.06.2015 | 2 |
3 | 4711 | Tisch | Niere | 19.06.2015 | 26.06.2015 | 2 |
4 | 4711 | Stuhl | Rund | 26.06.2015 | 31.12.2999 | 2 |
Die Tabelle ist wie folgt aufgebaut:
Stellvertreter Schlüssel:
Hierbei handelt es sich um einen „Surrogate Key“, ein eindeutiger Wert, der sich bei jedem Hinzufügen eines neuen Datensatzes erhöht. Dieses Feld ist der Primärschlüssel.
Geschäftsschlüssel:
Dieses Feld einhält einen eindeutigen Wert aus dem Quellsystem, mit dem die Entität im Quellsystem eindeutig identifiziert werden kann.
Feld 1-n:
Dies sind Attribute der Entität, bei deren Änderung ein neuer historischer Satz in der Dimensionstabelle anzulegen ist.
Gültig Ab und Gültig Bis:
Diese Datumsangaben begrenzen den Gültigkeitszeitraum eines Datensatzes. Der Wert „31.12.2999“ oder ein anderes Datum jenseits der erwarteten Lebensdauer des DWH steht hier für die nicht begrenzte Gültigkeit.
Historischer Stellvertreter Schlüssel:
Dieses Feld klammert die verschiedenen Datensätze einer Entität. Beim ersten Satz entspricht es dem Stellvertreter Schlüssel. Es hat im Allgemeinen eine 1:1-Beziehung zum Geschäftsschlüssel und ist wie dieser nur in der Kombination mit dem Gültigkeitszeitraum eindeutig.
Bei einer Änderung der Entität wird der aktuell gültige Satz terminiert, also das Gültig Bis-Datum auf den aktuellen Zeitpunkt gesetzt. Dann wird ein neuer Satz angelegt, dessen Gültigkeit sich anschließt. Dieser erhält einen neuen Stellvertreter-Schlüssel und wird durch den historischen Stellvertreter mit den anderen Sätzen verbunden.
Referenzen aus den Faktentabellen verwenden den historischen Stellvertreter. Bei der Selektion für Auswertungen o.ä. muss dann zusätzlich auf den Gültigkeitszeitraum eingeschränkt werden („Buchungsdatum between Gültig ab and Gültig Bis“). Den aktuellen Satz erhält man mit „Gültig Bis >= sysdate“ oder „Gültig Bis = 31.12.2999“.
Betrag | Buchungsdatum | Fremdschlüsselfeld auf Dimension |
---|---|---|
15 € | 20.06.2015 | 2 |
10 € | 30.06.2015 | 2 |
10 € | 01.01.2015 | 2 |
Aus Datenbank- und Anwendungssicht hat dieses übliche Vorgehen bei der Historisierung folgende Nachteile:
Eleganter ist eine alternative Vorgehensweise bei der Historisierung. Ändert sich eine Entität, so wird der aktuelle Datensatz der Dimension mit den alten Werten, aber einem neuen Stellvertreter-Schlüssel sowie einer entsprechenden Terminierung kopiert. Der aktuelle Satz wird anschließend mit den geänderten Werten und einem neuen Gültig Ab-Datum überschrieben.
Damit ergibt sich für das einleitende Beispiel folgender Datenstand:
Stellvertreter Schlüssel | Geschäfts-Schlüssel | Feld 1 | Feld n | Gültig ab | Gültig bis | Historischer Stellvertreter |
---|---|---|---|---|---|---|
2 | 4711 | Stuhl | Rund | 26.06.2015 | 31.12.2999 | 2 |
3 | 4711 | Tisch | Rund | 01.01.2015 | 19.06.2015 | 2 |
4 | 4711 | Tisch | Niere | 19.06.2015 | 26.06.2015 | 2 |
Bei dieser Variante bleibt der erste Datensatz eines Dimensionseintrags immer gültig. Referenzen aus den Fakten können einfach über den Stellvertreter-Schlüssel erfolgen, wenn aktuelle Daten gefragt sind. Der Zugriff auf historische Daten erfolgt unverändert über den historischen Stellvertreter und den Gültigkeitszeitraum. Dies ist aber nur dort notwendig, wo explizit historische Datenstände gefordert sind.
Da der Satz mit dem ursprünglichen Primärschlüssel immer der aktuelle Datensatz ist und daher auch bei Datenbereinigungen erhalten bleibt, kann problemlos ein referentielles Constraint in der Datenbank definiert werden.
Die Implementierung ist in den meisten ETL Tools durch Konfigurieren der SCD Komponente oder durch Nutzung einer CDC „Change Data Capture“ Komponente einfach umzusetzen. Es ist allerdings bei aktivierten referentiellen Constraints darauf zu achten, dass keinesfalls die Stellvertreter-Schlüssel getauscht werden dürfen. Wird der Primärschlüssel eines Datensatzes in der Dimension geändert, so löst dies einen Scan der referenzierenden Tabellen (oder der passenden Indices) aus.
Bei dieser Variante bleibt der erste Datensatz eines Dimensionseintrags immer gültig. Referenzen aus den Fakten können einfach über den Stellvertreter-Schlüssel erfolgen, wenn aktuelle Daten gefragt sind. Der Zugriff auf historische Daten erfolgt unverändert über den historischen Stellvertreter und den Gültigkeitszeitraum. Dies ist aber nur dort notwendig, wo explizit historische Datenstände gefordert sind.
Da der Satz mit dem ursprünglichen Primärschlüssel immer der aktuelle Datensatz ist und daher auch bei Datenbereinigungen erhalten bleibt, kann problemlos ein referentielles Constraint in der Datenbank definiert werden.
Die Implementierung ist in den meisten ETL Tools durch Konfigurieren der SCD Komponente oder durch Nutzung einer CDC „Change Data Capture“ Komponente einfach umzusetzen. Es ist allerdings bei aktivierten referentiellen Constraints darauf zu achten, dass keinesfalls die Stellvertreter-Schlüssel getauscht werden dürfen. Wird der Primärschlüssel eines Datensatzes in der Dimension geändert, so löst dies einen Scan der referenzierenden Tabellen (oder der passenden Indices) aus.