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?
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.