Beachten Sie vorab, dass ein Primärschlüssel keine einzelne Spalte sein muss:Er kann aus mehreren Spalten bestehen:Dies wird als zusammengesetzter Schlüssel bezeichnet. Beachten Sie auch, dass nicht jede Tabelle ein AUTO_INCREMENT
hat /IDENTITY
Spalte überhaupt, und Sie können einen UNIQUE
haben Beschränkung auf eine einzelne Spalte innerhalb eines zusammengesetzten Schlüssels sowieso.
-
Es gibt keine - aber es macht für ein DBMS keinen Sinn, zu verbieten eine solche Redundanz entweder, weil Sie zusätzliche Logik und Komplexität benötigen würden, um diese Bedingung zu handhaben, während beides keinen wirklichen Schaden anrichtet (abgesehen von den Auswirkungen auf die Leistung, zwei Indizes verwalten zu müssen).
-
Wie oben gesagt:wegen der Opportunitätskosten Es lohnt sich nicht, diese Redundanz zu erkennen und zu verhindern.
Eine weitere zu berücksichtigende Sache ist, dass die Primärschlüsseldefinition einer Tabelle nicht unveränderlich ist und sich daher ändern kann. Eine Tabelle kann bereits Spalten mit einem UNIQUE
enthalten Einschränkung einrichten und dann beschließt der Datenbankdesigner, dies in eine neue Definition des Primärschlüssels aufzunehmen - es wäre benutzerunfreundlich zu verlangen, dass die alte Einschränkung zuerst entfernt wird, insbesondere wenn andere Teile ihres Anwendungssystems davon abhängen diese EINZIGARTIGE Einschränkung vorhanden ist (z. B. ein 1:0..1
Beziehungsdefinition).
(Auch AUTO_INCREMENT
schließt sich nicht gegenseitig mit UNIQUE
ein oder PRIMARY KEY
:Sie können AUTO_INCREMENT
verwenden mit nicht eindeutigen Spalten (z. B. wenn AUTO_INCREMENT
wird hinzugefügt, nachdem eine Tabelle bereits Daten enthält) und umgekehrt ein PRIMARY KEY
kann eindeutige Werte verwenden, die von woanders stammen, wie z. B. eine andere Identitätsspalte als Fremdschlüssel (zusammengesetzte Primärschlüssel können Fremdschlüssel enthalten!) oder eine "natürliche" Datenquelle, wie z. B. die Verwendung einer US-Sozialversicherungsnummer als Primärschlüssel (natürlich sollten Sie nie tun dies in der Realität)).