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).
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.
Tags und Links primary-key database-design data-warehouse fact-table