Dieses Beispiel stammt aus w3schools .
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
)
Nach meinem Verständnis stellen beide Spalten zusammen ( P_Id
und LastName
) einen Primärschlüssel für die Tabelle dar Persons
. Ist das richtig?
- Warum sollte jemand mehrere Spalten als Primärschlüssel anstelle einer einzelnen Spalte verwenden wollen?
- Wie viele Spalten können zusammen als Primärschlüssel in einer bestimmten Tabelle verwendet werden?
Antworten:
Dein Verständnis ist korrekt.
Sie würden dies in vielen Fällen tun. Ein Beispiel ist in einer Beziehung wie
OrderHeader
undOrderDetail
. Die PK inOrderHeader
könnte seinOrderNumber
. Die PK inOrderDetail
könnteOrderNumber
UND seinLineNumber
. Wenn es eines dieser beiden wäre, wäre es nicht eindeutig, aber die Kombination der beiden ist garantiert einzigartig.Die Alternative besteht beispielsweise in diesem Fall in der Verwendung eines generierten (nicht intelligenten) Primärschlüssels
OrderDetailId
. Aber dann würde man die Beziehung nicht immer so leicht sehen. Einige Leute bevorzugen einen Weg; manche bevorzugen den anderen Weg.quelle
Ein weiteres Beispiel für zusammengesetzte Primärschlüssel ist die Verwendung von Zuordnungstabellen. Angenommen, Sie haben eine Personentabelle, die eine Gruppe von Personen enthält, und eine Gruppentabelle, die eine Gruppe von Gruppen enthält. Jetzt möchten Sie eine Beziehung von vielen zu vielen Personen und Gruppen herstellen. Das heißt, jede Person kann vielen Gruppen angehören. So würde die Tabellenstruktur mit einem zusammengesetzten Primärschlüssel aussehen.
quelle
Das W3Schools-Beispiel sagt nicht aus, wann Sie zusammengesetzte Primärschlüssel verwenden sollen, und gibt nur eine Beispielsyntax an, die dieselbe Beispieltabelle wie für andere Schlüssel verwendet.
Ihre Wahl des Beispiels führt Sie möglicherweise irre, indem Sie einen bedeutungslosen Schlüssel (P_Id) und einen natürlichen Schlüssel (Nachname) kombinieren. Diese seltsame Auswahl des Primärschlüssels besagt, dass die folgenden Zeilen gemäß dem Schema gültig sind und erforderlich sind, um einen Schüler eindeutig zu identifizieren. Intuitiv macht das keinen Sinn.
Weiterführende Literatur : Die große Primärschlüsseldebatte oder einfach nur Google
meaningless primary keys
oder sogar diese SO-Frage lesenFWIW - Meine 2 Cent dienen dazu, mehrspaltige Primärschlüssel zu vermeiden und ein einzelnes generiertes ID-Feld (Ersatzschlüssel) als Primärschlüssel zu verwenden und bei Bedarf zusätzliche (eindeutige) Einschränkungen hinzuzufügen.
quelle
Sie verwenden einen zusammengesetzten Schlüssel (einen Schlüssel mit mehr als einem Attribut), wenn Sie die Eindeutigkeit einer Kombination mehrerer Attribute sicherstellen möchten. Ein einzelner Attributschlüssel würde nicht dasselbe erreichen.
quelle
Ja, beide bilden den Primärschlüssel. Vor allem in Tabellen , in denen Sie nicht über einen Ersatzschlüssel , kann es notwendig sein, mehrere Attribute als eindeutige Kennung für jeden Datensatz (schlechtes Beispiel zu geben: eine Tabelle mit sowohl einem Vornamen und Nachnamen könnte die Kombination von ihnen verlangen , um einzigartig).
quelle
Mehrere Spalten in einem Schlüssel weisen im Allgemeinen eine schlechtere Leistung auf als ein Ersatzschlüssel. Ich bevorzuge einen Ersatzschlüssel und dann einen eindeutigen Index für einen mehrspaltigen Schlüssel. Auf diese Weise können Sie eine bessere Leistung erzielen und die erforderliche Einzigartigkeit bleibt erhalten. Und noch besser: Wenn sich einer der Werte in diesem Schlüssel ändert, müssen Sie nicht auch eine Million untergeordneter Einträge in 215 untergeordneten Tabellen aktualisieren.
quelle
Deine zweite Frage
ist implementierungsspezifisch: Es wird im tatsächlich verwendeten DBMS definiert. [1], [2], [3] Sie müssen die technischen Spezifikationen des von Ihnen verwendeten Datenbanksystems überprüfen. Einige sind sehr detailliert, andere nicht. Das Durchsuchen des Webs nach solchen Einschränkungen kann schwierig sein, da die Terminologie variiert. Der Begriff zusammengesetzter Primärschlüssel sollte obligatorisch sein;)
Wenn Sie keine expliziten Informationen finden, versuchen Sie, eine Testdatenbank zu erstellen, um sicherzustellen, dass Sie eine stabile (und spezifische) Behandlung der zu erwartenden Grenzwertverletzungen erwarten können. Achten Sie darauf, die richtigen Informationen zu erhalten: Manchmal werden die Grenzwerte akkumuliert, und Sie sehen unterschiedliche Ergebnisse mit unterschiedlichen Datenbanklayouts.
quelle
Die Verwendung eines Primärschlüssels für mehrere Tabellen ist praktisch, wenn Sie eine Zwischentabelle in einer relationalen Datenbank verwenden.
Ich werde eine Datenbank verwenden, die ich einmal für ein Beispiel erstellt habe, und speziell drei Tabellen in dieser Tabelle. Ich habe vor einigen Jahren eine Datenbank für ein Webcomic erstellt. Eine Tabelle wurde "Comics" genannt - eine Auflistung aller Comics, ihrer Titel, des Bilddateinamens usw. Der Primärschlüssel war "comicnum".
Die zweite Tabelle bestand aus "Zeichen" - ihren Namen und einer kurzen Beschreibung. Der Primärschlüssel war "charname".
Da jeder Comic - mit einigen Ausnahmen - mehrere Charaktere hatte und jeder Charakter in mehreren Comics vorkam, war es unpraktisch, eine Spalte in "Charaktere" oder "Comics" einzufügen, um dies widerzuspiegeln. Stattdessen habe ich eine dritte Tabelle mit dem Namen "Comicchars" erstellt, und das war eine Auflistung der Charaktere, die in welchen Comics vorkamen. Da diese Tabelle im Wesentlichen mit den beiden Tabellen verbunden war, wurden nur zwei Spalten benötigt: charname und comicnum, und der Primärschlüssel befand sich auf beiden.
quelle
Wir erstellen zusammengesetzte Primärschlüssel, um die Eindeutigkeitsspaltenwerte zu gewährleisten, aus denen ein einzelner Datensatz besteht. Dies ist eine Einschränkung, die das Einfügen von Daten verhindert, die nicht dupliziert werden sollten.
dh: Wenn alle Studentenausweise und Geburtsurkundennummern eindeutig einer einzelnen Person zugeordnet sind. Dann wäre es eine gute Idee, den Primärschlüssel für eine Person aus einer Studenten-ID und einer Geburtsurkunden-Nummer zusammenzusetzen, da Sie dadurch nicht versehentlich zwei Personen mit unterschiedlichen Studenten-IDs und derselben Geburtsurkunde einfügen könnten.
quelle