Verwenden eines DATE-Felds als Primärschlüssel einer Datumsdimension mit MySQL
-
29-10-2019 - |
Frage
Ich möchte eine Datumsdimension in einem MySQL-Datawarehouse verarbeiten.(Ich bin ein Neuling in der DW-Welt)
Ich habe einige Suchanfragen mit Google durchgeführt und viele Tabellenstrukturen (größtenteils) mit Datumsdimensionen gesehen, bei denen der Primärschlüssel ein einfacher generischer Codetagcode ist.
Warum nicht ein UNSIGNED INTEGER
-Feld als Primärschlüssel verwenden, da es bei MySQL 3 Bytes gegenüber 4 Bytes für DATE
sind?
Beispiel:
CREATE TABLE dimDate
id INTEGER UNSIGNED NOT NULL PRIMARY AUTOI_NCREMENT,
date DATE NOT NULL,
dayOfWeek
...
VS
CREATE TABLE dimDate
date DATE NOT NULL PRIMARY,
dayOfWeek
...
Lösung
Wenn Sie eine Tabelle mit einer Spalte vom Typ date
haben und in der keine zwei Zeilen jemals dasselbe Datum haben, können Sie diese Spalte sicher als PRIMARY KEY
verwenden.
Sie sehen viele Beispiele, bei denen der Primärschlüssel ein einfacher generischer Codetagcode ist, da es in vielen Fällen keinen perfekten Kandidaten für den Primärschlüssel gibt.Mit dem UNSIGNED INTEGER
kann diese Spalte beim Einfügen automatisch von der Datenbank ausgefüllt werden (und eindeutig sein).
Andere Tipps
Datumsdimension ist etwas Besonderes - ein Datum (2011-12-07) oder eine datumsbezogene Ganzzahl (20111207) für einen Primärschlüssel wird tatsächlich bevorzugt.Dies ermöglicht eine schöne Partitionierung (nach Datum) von Faktentabellen.
Für andere Arten von Dimensionen werden Ersatzschlüssel (Ganzzahlen) empfohlen.
Als Vorlage enthält jede Dimension normalerweise Einträge für unknown, not entered, error, ...
, die häufig mit den 0, -1, -2, ...
-Schlüsseln übereinstimmen
Aus diesem Grund ist es üblicher, ein ganzzahlig formatiertes Datum (20111207) als Primärschlüssel anstelle eines Datums zu finden. Die Darstellung eines generischen Codetagcodes mit einem Datumsschlüssel ist etwas unübersichtlich.