Wenn eine Tabelle mit einem Ersatzschlüssel eine Spalte enthält, von der bekannt ist, dass sie eindeutige Nicht-Null-Werte (z. B. SSN) aufweist, verstößt sie gegen 3NF?


8

Nach meinem Verständnis bedeutet die dritte Normalform (3NF) im Grunde, dass es genau einen Schlüssel geben sollte.

Wenn eine Tabelle mit beispielsweise ideiner Spalte für die automatische 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.

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?

Würde die Antwort davon abhängen, ob es in der anderen Spalte einen eindeutigen Schlüssel gibt? Wenn ja warum?

Antworten:


8

Eine Beziehung R liegt in der dritten Normalform vor, wenn jedes Nicht-Primat-Attribut von R nicht transitiv von jedem Kandidatenschlüssel von R abhängig ist

EFCodd, 1971, Weitere Normalisierung des relationalen Datenbankmodells

In der Definition einer Beziehung ist implizit enthalten, dass eine Beziehung mindestens einen Schlüssel haben muss. Nichts an 3NF oder einer anderen Normalform erfordert, dass eine Beziehung nur einen Schlüssel hat.

Leider enthalten Bücher über Datenbankdesign und -normalisierung zahlreiche Beispiele für Beziehungen mit nur einem Schlüssel und weniger Beispiele mit mehr als einem Schlüssel. Dies erscheint mir seltsam, da mehrere Schlüssel heutzutage sehr verbreitet zu sein scheinen. Der Mangel an praktischen Beispielen in der nichtakademischen Literatur scheint eine Ursache für Verwirrung über die Rolle von Schlüsseln beim Datenbankdesign zu sein. Ein weiterer Grund zur Verwirrung ist die beliebte Mnemonik "nichts als der Schlüssel". Dieser Satz wird normalerweise Bill Kent zugeschrieben, ist jedoch keine genaue Definition von 3NF.


3

Da die Frage auf einer Interpretation einer Regel basiert, sollten wir uns zuerst die verknüpften Informationen ansehen, die (Hervorhebung von mir) sind:

  1. Alle Attribute in einer Tabelle werden nur durch die Kandidatenschlüssel dieser Tabelle und nicht durch Nicht-Primat-Attribute bestimmt.

Ich denke, die Verwirrung ist das Ergebnis einer Fehlinterpretation des Begriffs "Kandidatenschlüssel". Eine Tabelle kann mehrere Kandidatenschlüssel enthalten. Aus diesem Grund haben wir Modifikatorbegriffe, die wir in dieser Gruppe weiter spezifizieren können: Primär und Alternativ. Wenn Tabellen einen und nur einen Schlüssel haben könnten, wäre der Begriff "Primärschlüssel" irreführend und hätte stattdessen etwas anderes heißen sollen (vielleicht "Eltern" oder "Ursprung" oder "Identifizieren" usw.). "Primär" bedeutet jedoch, dass es "Sekundärschlüssel" geben kann, die als "Alternativschlüssel" bezeichnet werden.

Alternative Schlüssel werden in physischen Modellen durch eine eindeutige Einschränkung oder einen eindeutigen Index angezeigt. Es sollte auch beachtet werden, dass beide Arten von Kandidatenschlüsseln (primär und alternativ) von Fremdschlüsseln referenziert werden können (obwohl man so etwas im Allgemeinen nicht ohne einen sehr guten Grund tun würde / sollte !).

Würde die Antwort davon abhängen, ob es in der anderen Spalte einen eindeutigen Schlüssel gibt? Wenn ja warum?

Nein, denn das ist eine Frage der physischen und der logischen Modellierung. Sie können eine Tabelle haben, in der ein IDENTITYFeld, aber noch kein Primärschlüssel definiert ist. Die Tabelle und ihre Daten können leicht in 3NF vorliegen, selbst wenn das physische Modell dies nicht erzwingt. Diese Unterscheidung ähnelt der Definition, ob Fremdschlüssel definiert sind oder nicht. Sie können sicher Tabellen verbinden und haben keine verwaisten Datensätze, unabhängig davon, ob PKs / FKs definiert wurden oder nicht. Und die Daten können ohne diese Konstrukte 100% korrekt sein. Die Definition der PKs und FKs ist jedoch der Unterschied zwischen der referenziellen Integrität (logisch) und der deklarativen referenziellen Integrität (physisch). Die Einschränkungen im physischen Modell helfen einfach dabei, die Regeln des logischen Modells durchzusetzen.


In Bezug auf SSN (" Sozialversicherungsnummer " für diejenigen, die mit diesem Akronym nicht vertraut sind), und es handelt sich um einen alternativen Schlüssel mit einem eindeutigen Index / einer eindeutigen Einschränkung:

Ich würde empfehlen , gegen eine SSN Prüfung einen Alternate Key ist und eine einzigartige Constraint oder Index auf sie setzt, auch wenn es üblich ist , dies zu tun (SSN oft einen „natürlichen“ Key betrachtet wird - eine , die in der realen Welt existiert out) . Es gibt zwei Hauptgründe:

  1. Genauigkeit: Meistens werden diese Werte von jemandem in ein System eingegeben, der ein Formular ausfüllt, sei es auf Papier oder online. Menschen machen ständig Fehler bei der Dateneingabe, insbesondere wenn es sich bei der Quelle um ein Papierformular handelt, das von jemandem eingegeben wird, der die schlampige Handschrift eines anderen liest (z. B. meine, die kaum lesbar ist).

    Können Sie sicher sein, dass das Quellsystem die Informationen validiert hat, auch wenn die Daten von einem anderen System stammen? Können Sie sicher sein, dass der Datenexport keinen Fehler aufwies? Was ist, wenn bei Ihrem Datenimport ein Fehler auftritt?

  2. Einzigartigkeit: Auch wenn die Hauptverwaltung für soziale Sicherheit noch nie eine doppelte ID ausgestellt hat, bedeutet dies nicht, dass keine doppelte ID aufgetreten ist. Außerhalb von Identitätsdiebstahlproblemen erinnere ich mich, dass ich vor Jahren von jemandem gehört habe, der als DBA für das Finanzministerium gearbeitet hat (glaube ich) und sich mit Sozialversicherungsleistungen befassen musste, wie sie "Probleme" mit dem hatten, was ein Problem war ältere Praxis, die SSN einer verstorbenen Person dem überlebenden Ehegatten (normalerweise der Witwe) zuzuweisen, damit es dem überlebenden Ehegatten leichter fällt, die Leistungszahlungen weiterhin einzuziehen. Ich bin sicher, dass diese Praxis vor einiger Zeit beendet wurde, aber die "doppelten" Daten befanden sich noch im System.

3

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.