Ich verstehe einen Vorteil von Ersatz- / künstlichen Schlüsseln im Allgemeinen - sie ändern sich nicht und das kann sehr praktisch sein. Dies gilt unabhängig davon, ob es sich um Einzel- oder Mehrfachfelder handelt - sofern es sich um künstliche Felder handelt.
Es scheint jedoch manchmal eine Angelegenheit der Politik zu sein, ein automatisch inkrementierendes Ganzzahlfeld als Primärschlüssel jeder Tabelle zu haben. Ist dies immer die beste Idee, einen solchen Einzelfeldschlüssel zu haben, und warum (oder warum nicht)?
Klar ist, dass es bei dieser Frage nicht um künstliche oder natürliche Schlüssel geht, sondern darum, ob alle künstlichen Schlüssel ein Einzelfeld sein sollten
database-design
primary-key
surrogate-key
Jack Douglas
quelle
quelle
Antworten:
Ich werde nein sagen , nicht immer, aber die meiste Zeit ja. .
Unter folgenden Umständen benötigen Sie keinen Ersatz- oder künstlichen Schlüssel:
mit einem eindeutigen Geschäftsschlüssel verfügen, der extern für Ihr
Unternehmen festgelegt wurde und der keine Chance hat, sich für einen
praktischen Zweck zu ändern , kann die direkte Verwendung des Geschäftsschlüssels die
Dinge vereinfachen. Ein Beispiel könnte eine Liste von Bundesstaat- oder
Provinzcodes oder eine Liste von ANSI-Standardnummern usw. sein.
Es gibt auch Situationen, in denen der altgetreue, monoton ansteigende ganzzahlige Ersatzschlüssel nicht ideal ist. Sie können alphanumerische Ersatzschlüssel verwenden. Dazu könnten gehören:
Warum die meiste Zeit ja? Die grundlegendste Antwort auf diese Frage ist, dass es die reinste Hölle ist, wenn Sie jemals einen Primärschlüsselwert in einer Tabelle ändern müssen. Da fast alles, was ein Benutzer sehen oder berühren kann, möglicherweise irgendwann aktualisiert wird, lädt die Verwendung eines sichtbaren Schlüsselwerts zur Hölle ein. Wenn Sie einen Ersatzschlüssel verwenden, können Sie nicht in diese Falle tappen.
Denken Sie jedoch daran, dass YAGNI bei der Anwendung dieses Konzepts Spielraum hat. Sie müssen keine Codetabellen mit IDENTITY-Schlüsseln in jede Ecke Ihres Schemas zwingen, nur für den Fall, dass jemand entscheidet, dass das Symbol für das männliche Geschlecht in Ihrer Mitarbeitertabelle von M auf X oder etwas Dummes geändert werden muss.
quelle
Nein.
Ich würde sagen, dass es sicherlich Fälle gibt, in denen Einzelfeldschlüssel zusammengesetzten Schlüsseln unterlegen sind, zumindest für den Zweck von Fremdschlüsseln . Das heißt nicht, dass Sie auch keinen Ersatzschlüssel mit einem einzigen Feld haben sollten, aber ich persönlich bevorzuge den Schlüssel, der am häufigsten als Ziel eines Fremdschlüssels verwendet wird, der als Primärschlüssel bezeichnet wird
Ich werde versuchen, meinen Standpunkt in den folgenden Beispielen zu veranschaulichen, in denen:
brand
ist eine Automarke, zB Ford, Toyota uswdealer
ist ein physischer Händler, der an eine Marke gebunden ist (z. B. ein Ford-Händler, der nur Fords verkauft)model
ist der Autotyp zB Ford Focus, Ford Fiesta etcstock
ist die aktuelle Anzahl der Vorplatzfahrzeuge für jedes AutohausWenn wir einen Einzelfeld-Ersatzschlüssel für
dealer
undmodel
wie folgt erstellen :dann ist es möglich, eine Reihe einzufügen
stock
, die einen Forddealer
mit einem "Toyota" -Modell verbindet. Das Hinzufügenbrand_id references brand
zustock
macht das Problem nur noch schlimmer. Auf der anderen Seite, wenn wir den Fremdschlüssel als Teil des Primärschlüssels behalten, wie folgt:Jetzt wird die Regel, dass "Ford" -Händler nur "Ford" -Autos auf Lager haben dürfen, vom Modell auf natürliche Weise durchgesetzt.
Beachten Sie, dass in dem Beispiel für 'zusammengesetzte Schlüssel'
dealer_id
je nach Vorliebe möglicherweise eindeutig ist oder nicht. Es muss nicht eindeutig sein (dh ein alternativer Schlüssel), aber es geht sehr wenig verloren, wenn man es so anlegt (vielleicht ein wenig Speicherplatz), und es kann sehr praktisch sein, so wie ich es normalerweise einrichte, zB:quelle
"es hängt davon ab, ob"
Ja: Ersatzfelder für IDENTITY / AUTONUMBER sind gut, wenn der natürliche Schlüssel breit und nicht numerisch ist. Hinweis: Dies setzt die Vereinigung von "PK" und gruppiertem Index voraus, die standardmäßig in SQL Server und Sybase usw. Auftritt
Nein: viele / viele Tabellen, wenn die 2 übergeordneten Schlüssel ausreichen. Oder wenn der natürliche Schlüssel kurz und von fester Länge ist, z. B. ein Währungscode
Natürlich kann ein Kopf-ORM (gelesen: (n) Ruhezustand) diese Regeln übertreffen ...
Edit: Frage nochmal lesen
Eine Many / Many-Tabelle mit 2 übergeordneten Ersatzschlüsseln hat eine mehrspaltige PK.
Es wird jedoch keine weitere Ersatzspalte benötigt.
Wenn eine Tabelle einen Ersatzschlüssel (IDENTITY usw.) enthält, muss dieser nicht mehrspaltig sein.
Sie können einen Superschlüssel haben, der das Surrogat enthält, dies wäre jedoch, um andere Regeln (z. B. Untertypen ) durchzusetzen.
quelle