Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Unter welchen Bedingungen müssen wir zusammengesetzte Schlüssel in der Datenbank verwenden

Zusammengesetzte Schlüssel sollten niemals in "neuen" Anwendungen berücksichtigt werden. Sie wurden in der Vergangenheit von Leuten verwendet, die früher dachten, dass "Geschäftsschlüssel" besser seien als "Ersatzschlüssel".

Bearbeiten:Wie von Chris gefragt, erweitere ich meine Antwort.

Lassen Sie mich zunächst feststellen, dass ich diese Frage als "Composite Primary Keys" vs. "Surrogate Keys" verstehe.

Außerdem gebe ich zu, dass es einen gibt Anwendungsfall, in dem ein zusammengesetzter Schlüssel sinnvoll ist:in Querverweistabellen, auch "Link-Tabellen" genannt. Diese werden in Many-to-Many-Tabellen verwendet und bestehen aus nur zwei Feldern, beides Fremdschlüssel, die einen Primärschlüssel für die XRef-Tabelle bilden. Beispiel:UserRole Tabelle würde user_id enthalten und role_id , nichts anderes. Für eine Tabelle wie diese gibt es zum Beispiel keine Klassendarstellung in Java. Dies ist normalerweise ein @ManyToMany , mit einer Collection auf beiden Seiten.

Ich habe meine Ansichten zu Natural Keys vs. Surrogate Keys in einer anderen Antwort geteilt ( Hibernate:Meinungen in Composite PK vs. Surrogate PK ) , und ich glaube, dass zusammengesetzte Schlüssel einige der Nachteile des natürlichen Schlüssels teilen, ohne einen wirklichen Vorteil zu bringen.

Das Problem mit zusammengesetzten Schlüsseln ist, dass Sie zwei benötigen Werte, um einen Datensatz eindeutig zu identifizieren. Dies wird zu einem Problem, sobald Sie anfangen, Tabellen zu haben, die auf Datensätze in dieser ersten Tabelle verweisen. Die zweite Tabelle benötigt dann zwei Spalten, um auf eine verweisen zu können Aufzeichnung. Und wenn diese zweite Tabelle einen zusammengesetzten Schlüssel verwendet, der aus einem einzelnen Wert + dem Fremdschlüssel besteht, haben Sie jetzt drei Spalten, um einen eindeutig zu identifizieren Aufzeichnung. Und ein dritter Tisch würde diese drei benötigen zusätzliche Spalten, nur um auf eine zu verweisen Eintrag in der zweiten Tabelle. Wirklich, das ist ein Schneeball.

Ein weiterer Nachteil ist, dass Anforderungen ausreichen Rückgeld. Die ganze Zeit. Was also heute ein guter zusammengesetzter Schlüssel zu sein scheint, ist morgen überhaupt kein Schlüssel mehr. Deshalb haben wir Ersatzschlüssel:um zukunftssicher zu sein.

Zusammengesetzte Schlüssel werden hauptsächlich verwendet, damit Datensätze in einer Tabelle basierend auf einer Reihe von Spalten eindeutig sind. Zum Beispiel, wenn Sie einen Customers haben Tabelle haben Sie möglicherweise eine NationalId +Country als eindeutigen Wert, was bedeutet, dass zwei Benutzer nicht dieselbe SSN teilen können, wenn ihr Land die USA ist. Es ist jedoch möglich, die gleiche Nummer für zwei Datensätze zu haben, wenn sie sich nicht im selben Land befinden. Wenn Sie zusammengesetzte Tasten mögen, wäre dies ein guter Kandidat dafür. Aber wie ich bereits angedeutet habe, können Sie einen Ersatzschlüssel verwenden und einen unique anwenden Zwang. Sie haben die Vorteile eines zusammengesetzten Schlüssels plus die Sicherheit eines Ersatzschlüssels.