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

MySQL PRIMARY KEY vs. UNIQUE-Einschränkungen

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.

  1. 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).

  2. 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)).