Nach meinem Verständnis bedeutet die dritte Normalform (3NF) im Grunde, dass es genau einen Schlüssel geben sollte.
Nr. 2NF, 3NF und Boyce Codd Normal Form (BCNF) befassen sich mit funktionalen Abhängigkeiten . Eine Tabelle in 2NF bedeutet, dass es keine partiellen Schlüsselabhängigkeiten gibt, bei denen eine Nichtschlüsselspalte von einer geeigneten Teilmenge eines mehrspaltigen Schlüssels abhängig ist. Tabellen wie die in unserem Beispiel befinden sich bereits in 2NF, da jeder Kandidatenschlüssel eine einzelne Spalte ist. Eine Tabelle in 3NF bedeutet, dass jede Nichtschlüsselspalte auch nicht funktional von einer anderen Nichtschlüsselspalte abhängig ist, wodurch eine transitive Abhängigkeit entsteht. Es spielt keine Rolle, ob es einen oder hundert Kandidatenschlüssel gibt. Tatsächlich ist es BCNF, nicht 3NF, was die "endgültige" Normalform in Bezug auf funktionale Abhängigkeiten ist. Dies liegt daran, dass sich eine Tabelle in 3NF befinden kann, jedoch nicht in BCNF, da sich möglicherweise mehrere Kandidatenschlüssel überlappen. Wenn wir also den Begriff 3NF verwenden , um "vollständig normalisiert" in Bezug auf funktionale Abhängigkeiten zu bedeuten, meinen wir wirklich BCNF.
Wenn eine Tabelle mit beispielsweise einer ID-Spalte mit automatischer Inkrementierung auch eine Spalte enthält, von der bekannt ist, dass sie eindeutig und nicht null ist, z. B. die Sozialversicherungsnummer, kann diese andere Spalte als Schlüssel verwendet werden.
Es könnte nicht nur sein, es muss auch sein, wenn wir sicherstellen wollen, dass die in der Datenbank gespeicherten Daten mit den Regeln übereinstimmen, die wir in der realen Welt identifiziert haben!
Würde eine solche Tabelle nicht in 3NF enthalten sein, da praktische / geschäftliche Probleme (z. B. Sicherheits- / Datenschutzrisiko bei der Weitergabe von SSN als Schlüssel / FK) unter einem strengen Schemaentwurfsaspekt nicht in 3NF enthalten sind, da effektiv 2 Schlüssel vorhanden sind?
Wie oben erläutert, ist es orthogonal zu der Anzahl der darin enthaltenen Kandidatenschlüssel, ob sich die Tabelle in 3NF (oder vor allem in BCNF) befindet oder nicht.
Würde die Antwort davon abhängen, ob es in der anderen Spalte einen eindeutigen Schlüssel gibt? Wenn ja warum?
Nein, einfach weil das Bestimmen, ob die Tabelle in 3NF enthalten ist oder nicht, nichts mit der Anzahl der Kandidatenschlüssel zu tun hat. Es hat stattdessen alles damit zu tun, sicherzustellen, dass alle Nichtschlüsselspalten voll funktionsfähig von diesen Kandidatenschlüsseln sind.
Aber das tut einen interessanten Punkt bringen. Beachten Sie, dass ein eindeutiger Schlüssel, wenn er in einem DBMS als Einschränkung definiert ist, nicht mit einem eindeutigen Bezeichner identisch ist , der in einem konzeptionellen Geschäftsmodell als Geschäftsregel definiert ist. Vielleicht kennen wir in unserer Welt immer die SSN der Person und sie dient somit als Kandidatenschlüssel für eine Person, und vielleicht führen wir auch einen Ersatzschlüssel in das logische Schema ein, das wir Personen-ID nennen . Unser Geschäftsmodell enthält die Regel, dass SSN eine eindeutige Kennung für eine Person in unserer Welt ist. Dies impliziert eine funktionale Abhängigkeitaller beschreibenden Attribute für dieses Identitätsattribut. Diese Regel ändert sich nicht, nur weil wir das DBMS entweder vergessen oder nicht informiert haben. Genau deshalb ist es wichtig, dass die Einschränkung deklariert wird - damit das DBMS sicherstellen kann, dass die gespeicherten Daten den Regeln des Geschäftsmodells entsprechen! Wenn wir diese eindeutige Einschränkung für die SSN nicht erstellt haben, können wir jetzt versehentlich mehr als eine Zeile für dieselbe Person mit derselben SSN erstellen. Jede Zeile hat eine andere Personen-ID!
Eine hervorragende Einführung in diese Themen sind die Practical Database Foundation Series von Fabian Pascal und das Database Design and Relational Theory von Chris Date , aus denen diese Antwort abgeleitet wird. Während jedes Papier von Fabian ein Muss ist, befassen sich Papier Nr. 1 (das den Unterschied zwischen der konzeptuellen, logischen und physischen Ebene klar definiert) und Papier Nr. 4 (das die verschiedenen Arten von Schlüsseln klar definiert) speziell mit dieser Frage. Ebenso ist Chris 'gesamtes Buch ein Muss, während Teil II der Abschnitt ist, der der Normalisierung in Bezug auf funktionale Abhängigkeit gewidmet ist.