Hintergrund
Der Ansatz "All-PK-muss-Ersatz sein" ist in Codds relationalem Modell oder einem SQL-Standard (ANSI, ISO oder anderen) nicht vorhanden.
Auch kanonische Bücher scheinen sich diesen Einschränkungen zu entziehen.
Das Oracle-eigene Datenwörterbuchschema verwendet in einigen Tabellen natürliche Schlüssel und in anderen Tabellen Ersatzschlüssel. Ich erwähne dies, weil diese Leute ein oder zwei Dinge über RDBMS-Design wissen müssen.
PPDM (Professional Petroleum Data Management Association) empfiehlt dieselben kanonischen Bücher wie:
Verwenden Sie Ersatzschlüssel als Primärschlüssel, wenn:
- Es gibt keine natürlichen oder geschäftlichen Schlüssel
- Natürliche oder geschäftliche Schlüssel sind schlecht (häufig ändern)
- Der Wert des natürlichen oder Geschäftsschlüssels ist zum Zeitpunkt des Einfügens des Datensatzes nicht bekannt
- Mehrspaltige natürliche Schlüssel (normalerweise mehrere FK) überschreiten drei Spalten, was Verknüpfungen zu ausführlich macht.
Ich habe auch keine kanonische Quelle gefunden, die besagt, dass natürliche Schlüssel unveränderlich sein müssen. Ich finde nur, dass sie sehr stabil sein müssen, dh nur in sehr seltenen Fällen geändert werden müssen, wenn überhaupt.
Ich erwähne PPDM, weil diese Leute auch ein oder zwei Dinge über RDBMS-Design wissen müssen.
Die Ursprünge des "All-Surrogate" -Ansatzes scheinen auf Empfehlungen einiger ORM-Frameworks zu beruhen.
Es ist richtig, dass der Ansatz eine schnelle Datenbankmodellierung ermöglicht, indem nicht viel Geschäftsanalyse durchgeführt werden muss, sondern auf Kosten der Wartbarkeit und Lesbarkeit des SQL-Codes. Es wird viel Vorkehrung für etwas getroffen, das in Zukunft passieren kann oder nicht (die natürliche PK hat sich geändert, sodass wir die RDBMS-Kaskaden-Update-Funktionalität verwenden müssen), auf Kosten der täglichen Aufgabe, z. B. mehr Tabellen in jeder Tabelle verbinden zu müssen Abfragen und Schreiben von Code zum Importieren von Daten zwischen Datenbanken, ein ansonsten sehr einfaches Verfahren (aufgrund der Notwendigkeit, PK-Kolisionen zu vermeiden und zuvor Stufen- / Äquivalenztabellen erstellen zu müssen).
Ein anderes Argument ist, dass auf Ganzzahlen basierende Indizes schneller sind, dies muss jedoch mit Benchmarks unterstützt werden. Offensichtlich sind lange, unterschiedliche Varchare nicht gut für PK. Indizes, die auf kurzen Varchars mit fester Länge basieren, sind jedoch fast so schnell wie Ganzzahlen.
Die Fragen
- Gibt es eine kanonische Quelle, die den Ansatz "All-PK-must-be-Surrogates" unterstützt?
- Wurde das relationale Modell von Codd durch ein neueres relationales Modell ersetzt?
quelle
TablenameID
", sehr, sehr gut. Ich habe gesehen, dass ich in der Praxis mit einer Datenbank in Unternehmensgröße mit mehr als 500 Tabellen arbeite, und seitdem verwende ich diese, wann immer möglich, für die Datenbankmodellierung.Antworten:
"Alle PKs sind Ersatz" ist überhaupt keine sehr solide Strategie und sicherlich keine, für die Sie wahrscheinlich jemals eine "maßgebliche" Quelle finden werden .
Denken Sie zunächst darüber nach, was in diesem Zusammenhang unter "Primärschlüssel" zu verstehen ist. Im relationalen Modell gibt es keine "Primärschlüssel" - dh keinen Schlüssel, der sich grundlegend von anderen Schlüsseln derselben Tabelle unterscheidet. Grundsätzlich können und haben alle Schlüssel in einer relationalen Datenbank denselben Status und dieselben Merkmale und Funktionen, sofern der Datenbankdesigner nichts anderes wählt. Das Herausgreifen eines Schlüssels in einer Tabelle mit mehreren Schlüsseln ist daher im Wesentlichen willkürlich (das war das von EFCodd verwendete Wort), subjektiv und rein psychologisch (die Ansicht von Chris Date, Codds Kollege und Mitarbeiter). Sofern nicht erklärt wird, welche Unterscheidung zwischen einem "Primärschlüssel" und einem anderen Schlüssel getroffen wird, ist es daher ziemlich bedeutungslos und überhaupt nicht wert, zu behaupten, dass ein solcher Schlüssel "
Zweitens hat das Argument sehr wenig mit Indizes zu tun, die eine physische Speicherfunktion darstellen. Schlüssel sind eine logische Angelegenheit, keine physische, und es gibt keinen absoluten Grund anzunehmen, dass die Speicherüberlegungen eines "Primärschlüssels" sich von denen anderer Schlüssel unterscheiden oder unterscheiden sollten (siehe vorherigen Absatz). Wir können davon ausgehen, dass unabhängig von den verwendeten Speicherstrukturen der Speicheraufwand bei einem Ersatzschlüssel in gewissem Maße größer ist als bei keinem solchen Schlüssel, aber wie immer lautet die beste Antwort hier "es kommt darauf an". Lagerungsentscheidungen sollten von Fall zu Fall getroffen werden, und pauschale Regeln helfen kaum.
Drittens macht aus logischer Sicht die absolute Anforderung eines Ersatzschlüssels wenig Sinn. Die Anforderung an einen natürlichen Schlüssel ist mit oder ohne Ersatz genau gleich. Die Notwendigkeit, dass Informationen im Bereich des Diskurses identifizierbar sind (dh mit einem natürlichen Schlüssel AKA "Business Key", "Domain Key"), ist derselbe. Ja, Schlüssel müssen möglicherweise aktualisiert werden, aber manchmal liegt das in der Natur der Sache. Das Hinzufügen eines Ersatzes an sich erleichtert die Handhabung von Schlüsselaktualisierungen nicht unbedingt und kann sie manchmal erschweren.
quelle
Primär- und Fremdschlüssel müssen nicht lesbar sein. Ihr Zweck ist es, die interne relationale Struktur der Datenbank beizubehalten und nicht von einem Menschen gelesen zu werden.
Wenn es einen geeigneten natürlichen Schlüssel gibt, der sich nie ändern wird (ich behaupte, diese sind so selten wie Hühnerzähne oder vierblättriges Kleeblatt, aber ...), können Sie das natürlich verwenden, und einige Kunden werden dies zu einer ihrer Anforderungen machen .
Aber warum sollte die zusätzliche Komplexität eines Datenbanksystems hinzugefügt werden, um nur einen geringen nennenswerten Nutzen zu erzielen? Primäre Ersatzschlüssel werden vom System generiert, sind garantiert eindeutig, ändern sich garantiert nie und haben für alle Tabellen den gleichen Datentyp. Sie haben unter allen Umständen das gleiche zuverlässige Verhalten.
Wenn Sie nach einer kanonischen Ressource suchen, die diese Praxis unterstützt, werden Sie keine finden. Es gibt genauso viele Designer auf der anderen Seite des Ganges, die ihre Verwendung natürlicher, zusammengesetzter Schlüssel mit gruppierten Indizes als Primärschlüssel bösartig verteidigen, und alle kanonischen Ressourcen sagen, dass es die Wahl des Designers ist.
Siehe auch
http://en.wikipedia.org/wiki/Surrogate_key
quelle