Unter welcher Bedingung wir brauchen, um die Verwendung von zusammengesetzten Schlüsseln in der Datenbank
habe ich gesehen, dass die wir haben können zusammengesetzte Schlüssel, wo der Primärschlüssel besteht aus den kombinierten Primärschlüssel der beiden Tabellen.
Wie Personen und Bücher
person_id and book_id will make the primary key.
Aber ich möchte bitten, dass wir es brauchen, hart-code, Programmierung langauge
Ich meine ist es ok, ich kann über separate Spalte mit einem beliebigen Namen zu arbeiten als primary key
dann habe ich nicht zu codieren es und ich kann mein arbeitet normal wie
id,person_id ,book_id
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zusammengesetzte Schlüssel sollte nie sein als in "neue" Anwendungen. Sie waren in der Vergangenheit Menschen genutzt zu glauben, dass "business keys" sind besser als "surrogate keys".
Edit: Da fragte Chris, ich bin wachsenden meine Antwort.
Lassen Sie mich beginnen mit der Feststellung, dass ich verstehe diese Frage als "Composite Primary Keys" vs. "Surrogate keys".
Auch, ich gebe zu, dass es eine Anwendungsfall, in dem ein zusammengesetzter Schlüssel macht Sinn: in der cross-Referenz-Tabellen, die auch als "Tabellen verknüpfen". Diese werden in viele-zu-viele-Tabellen und besteht aus nur zwei Felder, die beide Fremdschlüssel in form einer primären Schlüssel für die xref-Tabelle. Zum Beispiel
UserRole
Tabelle enthalten würdeuser_id
undrole_id
, sonst nichts. Es gibt keine Klassen-Repräsentation in Java, zum Beispiel für eine Tabelle wie diese. Dies ist in der Regel eine@ManyToMany
mitCollection
auf beiden Seiten.Ich teilte meine Ansichten über Natürliche Schlüssel vs. Ersatzschlüssel in der anderen Antwort ( Hibernate : Meinungen in der Zusammengesetzten PK vs Surrogate PK ) , und ich glaube, dass Sie Zusammengesetzte Schlüssel teilt einige der Nachteile, die Natürlichen Schlüssel, ohne damit einen wirklichen nutzen.
Das problem mit zusammengesetzten Schlüsseln ist, dass Sie brauchen zwei Werte einen Datensatz eindeutig identifizieren. Dies wird zu einem problem, wenn Sie beginnen mit Tabellen, die Verweise Datensätze in der ersten Tabelle. Die zweite Tabelle muss dann zwei Spalten zu referenzieren können eine aufnehmen. Und wenn diese zweite Tabelle einen zusammengesetzten Schlüssel verwendet, der aus einem einzelnen Wert + der foreign key, haben Sie jetzt drei Spalten zum eindeutigen identifizieren eine aufnehmen. Und eine Dritte Tabelle benötigen würde, diese drei zusätzliche Spalten, die nur zur Referenz eine Datensatz in der zweiten Tabelle. Wirklich, dies ist ein Schnee-ball.
Ein weiterer Nachteil ist, dass die Anforderungen tun ändern. Die ganze Zeit. So, was zu sein scheint ein gut zusammengesetzter Schlüssel ist heute nicht ein Schlüssel an alle morgen. Das ist, warum wir haben Ersatzschlüssel: zukunftssicher.
Zusammengesetzte Schlüssel werden vor allem verwendet, so dass die Datensätze in einer Tabelle eindeutig sind, basieren auf einer Reihe von Spalten. Zum Beispiel, wenn Sie eine
Customers
Tabelle, haben Sie möglicherweise eineNationalId
+Country
als eindeutiger Wert, was bedeutet, dass zwei Benutzer, die nicht teilen kann die gleichen SSN, wenn Ihr Land ist USA. Aber es ist möglich, die gleiche Anzahl für zwei Platten, wenn Sie nicht im selben Land. Wenn Sie mögen, zusammengesetzte Schlüssel, wäre dies ein guter Kandidat für Sie. Aber wie ich angedeutet haben, können Sie einen Ersatzschlüssel und übernehmen eineunique
Einschränkung. Sie haben die Vorteile von einem zusammengesetzten Schlüssel, plus die Sicherheit eines Surrogat-Taste.Ich kann mir nicht vorstellen etwaige Bedingungen, unter denen Sie MÜSSEN zu verwenden zusammengesetzten Schlüssel. Einige der Argumente, die Pro mit einem einzigen id-Spalte enthalten:
1. bessere Indizierung
2. einfachere Verknüpfungen
3. leichter design-Oberflächen
4. die Tatsache, dass die meisten ORMs besser arbeiten mit einzelnen Feld-PKs (leider)
5. einfacher Datensätze löschen
In Ihrem Fall können Sie zwar einen composite - /Ersatzschlüssel auf
person_id
undbook_id
und es wird sehr nützlich sein, Sie können auch eine einzelne Spalte id, die KANN Ihre primäre Schlüssel auch, aber es muss nicht sein. Sie können dieperson_id
undbook_id
als PK oder einfach nur einen index, und dasselbe gilt für id-Spalten. Dieid
Spalte macht Ihr Leben einfacher beim löschen von Sachen oder die Auswahl von einzelnen Spalten für die Ansicht Zwecken. Mit der heutigen RDBMS ist, wo Sie normalerweise nicht haben, um sorgen über die Tabelle Größe ist es ratsam, auf eine einzelne Spalte - vorzugsweise auto-Inkrement identity-Spalten, um alle Ihre Tabellen nur für den Fall es gebraucht wird. Ich glaube, es wird Ihnen nicht Schaden in keiner Weise.Wenn Sie die Speicherung eine relation zwischen person und Bücher, die eins-zu-eins (zum Beispiel, haben Sie vielleicht eine website, wo die Nutzer bewerten Bücher, die Sie gelesen haben, auf einer Skala von 1-5), dann einen zusammengesetzten Primärschlüssel, der auf die
votes
Tabelleperson_id
undbook_id
macht genauso viel Sinn, wenn nicht mehr, als eine generierte ID und einen eindeutigen index auf die Kombination von(person_id, book_id)
. Die Kombination von person und zum Buch definiert die Abstimmung aufnehmen.Ersatzschlüssel sind intrinsisch schlecht und sollte unter allen Umständen vermieden werden. Sie machen keinen Sinn in der realen Welt. Aber manchmal sind Sie notwendig.
Verlassen, dass Sie beiseite für jetzt, dein Beispiel zeigt genau, warum zusammengesetzte Schlüssel werden benötigt - mehr als eine person kann ein Exemplar eines bestimmten Buches - und eine person kann mehr als ein Buch - es ist eine N:M-Beziehung. Und repräsentiert diese in einer relationalen Datenbank ist einfach: Sie stellen eine weitere Tabelle in der Mitte mit dem PK des Buches und der PK von der person.
Aber (es sei denn du willst sorgen für das Szenario, wo Sie brauchen, zu unterscheiden 2 Exemplare des gleichen Buches im Besitz von der gleichen person, in dem Fall das schema muss einige andere änderungen), denn die Kombination aus person_id und book_id ist schon einzigartig, warum tun Sie müssen eine eindeutige id, die hat keine Relevanz auf die Daten, die Sie versuchen zu modellieren.
book_loan
Tisch und eine person kann nur eine Kopie von einem Buch. Dann später auf, dass die Anforderung ändert. Mit einem Ersatzschlüssel, die Sie brauchen nur zu entfernen, eine Einschränkung, sondern einen zusammengesetzten Schlüssel nicht mehr eindeutig sein, und Sie müssen zum erstellen einer neuen eindeutigen Schlüssel - viel mehr ein Schmerz.