# Slowly Changing Dimensions

Unter dem Begriff Slowly Changing Dimensions (englisch für „sich langsam verändernde Dimensionen“) werden im Data-Warehousing Methoden zusammengefasst, um Änderungen in Dimensionstabellen zu erfassen und gegebenenfalls historisch zu dokumentieren. Im Wesentlichen unterscheidet man drei Verfahren, die nach Kimball in Typen unterteilt werden. Allen gemein ist, dass vorhandene Datensätze über den Primärschlüssel mit neuen Datensätzen verbunden werden, um Änderungen in der Tabelle zu speichern. Technische Schlüssel sind nicht Gegenstand des Artikels.

## Typ 0

Der Typ 0 ist eine passive Methode. Auf eine Historisierung im eigentlichen Sinn wird verzichtet. Über den fachlichen Primärschlüssel (PK für Primary Key) wird in der Dimensionstabelle nachgeschlagen, ob der PK des neuen Datensatzes bereits vorhanden ist. Ist dies der Fall, wird nichts unternommen – die ersten bekannten Werte werden beibehalten. Anderenfalls wird ein neuer Datensatz angefügt.

## Typ 1

Der Typ 1 ist die trivialste Methode. Auf eine Historisierung wird verzichtet. Über den fachlichen Primärschlüssel (PK für Primary Key) wird in der Dimensionstabelle nachgeschlagen, ob der PK des neuen Datensatzes bereits vorhanden ist. Ist dies der Fall, wird der entsprechende Satz mit den neuen Daten überschrieben. Ansonsten wird ein neuer Datensatz angefügt.

## Typ 2

Typ 2 ist ein komplexes Verfahren, um Dimensionstabellen oder einzelne Attribute der Tabelle zu historisieren, um zu jedem Zeitpunkt die dann gültigen Ausprägungen der Tabelle ermitteln zu können. Dies wird erreicht, indem zu jedem Datensatz ein Gültigkeitsintervall abgelegt wird. Um die Eindeutigkeit des PK zu gewährleisten, ist dieser um zumindest eines der Intervallattribute zu erweitern. In der Regel wird ein unten abgeschlossenes Intervall verwendet, indem der gültige Satz als unendlich gültig gekennzeichnet ist. Grundlage ist der Vergleich der vorhandenen Datensätze mit den neuen Datensätzen aus einer vollständigen und periodischen Extraktion über den fachlichen Primärschlüssel ohne das Gültigkeitsattribut oder die -attribute. Hierbei sind drei Fälle zu unterscheiden:
* Der neue Datensatz ist noch nicht in der Dimension vorhanden.
    Vorgehen: Der Datensatz wird angefügt.
* Der in der Dimension vorhandene Datensatz ist nicht in der gültigen Extraktion vorhanden.
    Vorgehen: Der Datensatz wird von unendlich gültig auf gültig bis gestern gesetzt.
* Der neue Datensatz kann über den PK einem Datensatz aus der Dimensionstabelle zugeordnet werden.
    Vorgehen: Die zu historisierenden Attribute werden miteinander verglichen.
   * Es werden keine Änderungen festgestellt: Der Vorgang ist beendet. Der nächste Datensatz wird bearbeitet.
   * Es werden Änderungen festgestellt: Der gültige Dimensionsdatensatz wird auf gültig bis gestern gesetzt. Der neue Datensatz wird mit gültig ab heute und unendlich gültig eingefügt.

## Typ 3

Bei Typ 3 wird die Tabelle verbreitert. Das heißt, es wird ein neues Attribut angefügt. Dieses Verfahren kann zum Beispiel bei Umschlüsselungen von Vertriebsregionen oder Produktgruppen eingesetzt werden. Der Einsatz dieser Methode ist nur bei sehr spezifischen Änderungen ratsam.

## Beispiele

Zum besseren Verständnis soll folgendes Beispiel die unterschiedlichen Verfahrensweisen verdeutlichen. Gegeben sei eine Dimensionstabelle Produkt. Die Attribute GueltVon und GueltBis sind nur für Typ 2 relevant und mindestens auch Teil des PK.
| PNummer (PK) | PName | PGruppe | GueltVon | GueltBis |
| 1 | Glenfarclas | Whisky | 01.01.2002 | 31.12.9999 |
| 2 | Jim Beam | Whisky | 01.01.2002 | 31.12.9999 |
| 3 | Krombacher | Bier | 01.01.2002 | 31.12.9999 |
aus dem operativen System wird am 10. August 2005 folgender Datensatz extrahiert:
| PNummer (PK) | PName | PGruppe |
| 2 | Jim Beam | Whiskey |
nach Typ 0 wird der neue Datensatz ignoriert, da der Primärschlüssel bereits in der Zieltabelle vorhanden ist:
| PNummer (PK) | PName | PGruppe | GueltVon | GueltBis |
| 1 | Glenfarclas | Whisky | 01.01.2002 | 31.12.9999 |
| 2 | Jim Beam | Whisky | 01.01.2002 | 31.12.9999 |
| 3 | Krombacher | Bier | 01.01.2002 | 31.12.9999 |
nach Typ 1 wird der zweite Datensatz überschrieben:
| PNummer (PK) | PName | PGruppe | GueltVon | GueltBis |
| 1 | Glenfarclas | Whisky | 01.01.2002 | 31.12.9999 |
| 2 | Jim Beam | Whiskey | 01.01.2002 | 31.12.9999 |
| 3 | Krombacher | Bier | 01.01.2002 | 31.12.9999 |
nach Typ 2 wird der zweite Datensatz historisiert:
| PNummer (PK) | PName | PGruppe | GueltVon (PK) | GueltBis |
| 1 | Glenfarclas | Whisky | 01.01.2002 | 31.12.9999 |
| 2 | Jim Beam | Whisky | 01.01.2002 | 09.08.2005 |
| 2 | Jim Beam | Whiskey | 10.08.2005 | 31.12.9999 |
| 3 | Krombacher | Bier | 01.01.2002 | 31.12.9999 |
nach Typ 3 wird ein neues Attribut neuePGruppe eingepflegt:
| PNummer (PK) | PName | PGruppe | neuePGruppe | GueltVon | GueltBis |
| 1 | Glenfarclas | Whisky | Whisky | 01.01.2002 | 31.12.9999 |
| 2 | Jim Beam | Whisky | Whiskey | 01.01.2002 | 31.12.9999 |
| 3 | Krombacher | Bier | Bier | 01.01.2002 | 31.12.9999 |