Warum ist der Primärschlüssel in der Dimensionsmodellierung für die Faktentabelle nicht erforderlich?

8

Ich habe ein paar Referenzen gehört, dass pk auf der Faktentabelle nicht benötigt wird. Ich glaube, jeder einzelne Tisch sollte ein Pk haben.

Wie könnte eine Person eine Zeile in einer Faktentabelle verstehen, wenn es keine PK- und 10+ Fremdschlüssel gibt?

    
BI Dude 22.01.2014, 16:30
quelle

2 Antworten

19

Primärschlüssel ist dort

... aber das Erzwingen der primary key Einschränkung in der Datenbank Ebene ist nicht erforderlich.

Wenn Sie darüber nachdenken, ist technisch ein eindeutiger Schlüssel oder Primärschlüssel ein Schlüssel, der die Merkmale jeder Zeile eindeutig definiert. Und es kann aus mehr als einem Attribut dieser Entität bestehen. Im Fall einer Faktentabelle wirkt foreign keys , das von den anderen Dimensionstabellen zusammenfließt, bereits als ein zusammengesetzter Primärschlüssel. Und diese Fremdschlüsselkombinationen können eindeutig jeden Datensatz in der Faktentabelle identifizieren. Diese Fremdschlüsselkombination ist also der Primärschlüssel für die Faktentabelle.

Warum nicht ein Ersatzschlüssel?

Nun, wenn Sie wollten, hätten Sie einen Ersatzschlüssel für die Faktentabelle definieren können. Aber zu welchem ​​Zweck würde das dienen? Sie werden niemals einen Datensatz aus dieser Faktentabelle abrufen, der auf seinen Ersatzschlüssel verweist (verwenden Sie stattdessen Indizes). Sie werden diesen Ersatzschlüssel auch nicht verwenden, um ihn mit anderen Tabellen zu verknüpfen. Solch ein Ersatzschlüssel wird völlig Platzverschwendung in der Datenbank sein.

Erzwingen von Datenbankeinschränkungen

Wenn Sie diesen konzeptionellen Primärschlüssel auf Datenbankebene definieren, muss die Datenbank sicherstellen, dass diese Einschränkung in keiner der darüber ausgeführten DML-Operationen verletzt wird. Wenn Sie diese Einschränkung sicherstellen, ist dies ein Overhead für Ihre Datenbank. Für ein OLTP-System ist es möglicherweise unbedeutend, aber für ein großes OLAP-System, bei dem Daten im Batch geladen werden, kann dies zu erheblichen Performance Strafen führen. Außerdem möchten Sie, dass Ihre Datenbank die Integrität der Einschränkungen gewährleistet, wenn Sie dies während der Datenladephase selbst sicherstellen können (in der Regel durch Ihre ETL-Codierung).

    
hashbrown 23.01.2014, 03:21
quelle
4

Sie haben absolut Recht, dass eine Faktentabelle im Prinzip einen Schlüssel haben sollte. Aus Sicht der Datenmodellierung ist es erforderlich. In der Implementierung benötigen Schlüsseleinschränkungen in der Datenbank jedoch normalerweise einen Index. Der Aufwand beim Erstellen und Verwalten von Indizes ist so, dass die Eindeutigkeit der "Schlüsselattribute" manchmal durch die Steuerung der Integrationsschicht ("ETL-Prozess") und nicht durch eine Einschränkung in der Datenbank aufrechterhalten wird.

Wenn immer es praktikabel ist, macht es Sinn, die Schlüsselbedingung in der Datenbank zu erstellen. Wenn der Schlüssel nicht explizit in der Datenbank definiert ist, sollte er für die Benutzer klar dokumentiert werden, damit er verstehen kann, was die Daten bedeuten.

    
sqlvogel 22.01.2014 17:34
quelle