Surrogatschlüssel (in der Regel Ganzzahlen) haben den zusätzlichen Vorteil, dass sie Ihre Tabellenbeziehungen schneller machen und wirtschaftlicher in Bezug auf die Speicher- und Aktualisierungsgeschwindigkeit sind (noch besser: Fremdschlüssel müssen bei der Verwendung von Surrogatschlüsseln nicht aktualisiert werden, im Gegensatz zu Geschäftsschlüsselfeldern, die sich hin und wieder ändern).
Der Primärschlüssel einer Tabelle sollte zur eindeutigen Identifizierung der Zeile verwendet werden, hauptsächlich für Verknüpfungszwecke. Denken Sie an eine Personentabelle: Namen können sich ändern, und sie sind nicht garantiert eindeutig.
Denken Sie an Unternehmen: Sie sind ein glückliches Merkin-Unternehmen, das mit anderen Unternehmen in Merkia Geschäfte macht. Sie sind klug genug, nicht den Firmennamen als Primärschlüssel zu verwenden, sondern die eindeutige Firmen-ID der Regierung von Merkia in ihrer Gesamtheit von 10 alphanumerischen Zeichen. Dann ändert Merkia die Unternehmens-IDs, weil sie es für eine gute Idee hielten. Das ist in Ordnung, Sie verwenden die Funktion für kaskadierte Aktualisierungen Ihrer Datenbankmaschine für eine Änderung, die Sie gar nicht betreffen sollte. Später expandiert Ihr Unternehmen, und Sie arbeiten nun mit einem Unternehmen in Freedonia zusammen. Freedonische Firmen-IDs bestehen aus bis zu 16 Zeichen. Sie müssen den Primärschlüssel der Firmenkennung erweitern (auch die Fremdschlüsselfelder in Bestellungen, Ausgaben, Überweisungen usw.) und ein Feld "Land" in den Primärschlüssel aufnehmen (auch in die Fremdschlüssel). Autsch! Bürgerkrieg in Freedonia, es ist in drei Länder aufgeteilt. Der Name des Landes, mit dem Sie verbunden sind, sollte in den neuen Namen geändert werden; kaskadierte Aktualisierungen sind die Rettung. Übrigens, was ist Ihr Primärschlüssel? (Land, FirmenID) oder (FirmenID, Land)? Letzteres hilft bei Joins, ersteres vermeidet einen weiteren Index (oder vielleicht mehrere, wenn Sie Ihre Bestellungen auch nach Ländern gruppieren wollen).
All dies ist kein Beweis, sondern ein Hinweis darauf, dass ein Surrogatschlüssel zur eindeutigen Identifizierung einer Zeile für alle Verwendungszwecke, einschließlich Join-Operationen, einem Geschäftsschlüssel vorzuziehen ist.
26 Stimmen
@Joachim Sauer: Ein Argument darüber, ob eine Sache subjektiv ist, kann selbst subjektiv sein, ohne dass dies in irgendeiner Weise mit der Objektivität oder Subjektivität der fraglichen Sache zu tun hat. Es sei denn, Sie sind bereit, die genauen objektiven Kriterien zu nennen, die etwas objektiv machen. Es gibt Dinge, die man "offene Begriffe" nennt, wie zum Beispiel die Anzahl der Haare, die ein Bart braucht. Man kann objektiv sagen, dass eine Person ohne Kinnhaare keinen Bart hat, und eine mit 5.000 Haaren pro Zentimeter Länge hat einen Bart, aber irgendwo in der Mitte ist ein subjektives Urteil erforderlich, um eine objektive Feststellung zu treffen.
2 Stimmen
@Manrico: Sie müssen sich nur Folgendes fragen: Wenn ich keinen Ersatzschlüssel verwende, ist mein Primärschlüssel dann immer noch unveränderlich? Wenn die Antwort nein lautet, dann sollten Sie ernsthaft die Verwendung eines Ersatzschlüssels in Betracht ziehen. Auch wenn der Primärschlüssel auch nur teilweise aus Benutzereingaben besteht, sollten Sie die Verwendung eines Ersatzschlüssels in Betracht ziehen. Und warum? Wegen der Gefahr von Datenanomalien.
1 Stimmen
@TylerRick Aber das ist keine wirklich gute Frage. Sie fragt nach einer allgemeingültigen Lösung für alle Situationen, obwohl es offensichtlich keine gibt, wie der "Religionskrieg" beweist, dessen sich der Fragesteller sehr wohl bewusst ist (Zitat: "Da haben wir es wieder, das alte Argument taucht immer noch auf..."). Anstatt sich zu fragen, ob sich die Welt verändert hat und endlich ein zwingender Grund vorliegt, sich immer für eine Seite zu entscheiden, ist es besser, diese Frage für jede konkrete Situation immer wieder zu stellen und SO zu posten, wenn man sich nicht sicher ist. Das ruft nur Dogmatismus hervor.