Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL PRIMARY KEY vs vincoli UNIQUE

Come prefazione, si noti che una chiave primaria non deve essere una singola colonna:può essere composta da più colonne:questa è nota come chiave composita. Nota inoltre che non tutte le tabelle hanno un AUTO_INCREMENT /IDENTITY colonna e puoi avere un UNIQUE vincolo comunque su una singola colonna all'interno di una chiave composta.

  1. Non ce n'è, ma non ha senso che un DBMS vieti tale ridondanza o perché avresti bisogno di logica e complessità aggiuntive per gestire quella condizione, mentre non c'è alcun danno reale avendo entrambi (oltre all'impatto sulle prestazioni di dover mantenere due indici).

  2. Come detto sopra:perché il costo opportunità di rilevare e prevenire che la ridondanza non valga la pena.

Un'altra cosa da considerare è che la definizione di chiave primaria di una tabella non è immutabile e quindi è soggetta a modifiche. Una tabella potrebbe già avere colonne con un UNIQUE impostazione del vincolo e quindi il progettista del database decide di includerlo in una nuova definizione della chiave primaria - sarebbe poco facile per l'utente richiedere che il vecchio vincolo venga rimosso prima, specialmente se altre parti del loro sistema applicativo dipendono da quel vincolo UNICO presente (ad es. un 1:0..1 definizione della relazione).

(Inoltre, AUTO_INCREMENT non è mutualmente inclusivo con UNIQUE o PRIMARY KEY :puoi usare AUTO_INCREMENT con colonne non univoche (ad es. se AUTO_INCREMENT viene aggiunto dopo che una tabella contiene già dei dati), e viceversa una PRIMARY KEY può utilizzare valori univoci provenienti da altre fonti, come un'altra colonna di identità come chiave esterna (le chiavi primarie composite possono contenere chiavi esterne!) o un'origine dati "naturale", come l'utilizzo di un numero di previdenza sociale statunitense come chiave primaria (ovviamente non dovresti mai fallo in realtà)).