Questo è un malinteso.
L'UNIQUE
vincolo fa esattamente ciò che vuoi. NULL
multipli i valori possono coesistere in una colonna definita UNIQUE
.
Il manuale:
In generale, un vincolo univoco viene violato quando nella tabella sono presenti più righe in cui i valori di tutte le colonne incluse nel vincolo sono uguali. Tuttavia, due valori nulli non sono considerati uguali in questo confronto. Ciò significa che anche in presenza di un vincolo univoco è possibile memorizzare righe duplicate che contengono un valore nullo in almeno una delle colonne vincolate. Questo comportamento è conforme allo standard SQL, ma abbiamo sentito che altri database SQL potrebbero non seguire questa regola. Quindi fai attenzione quando sviluppi applicazioni destinate a essere portatili.
Enfasi in grassetto la mia.
Tieni presente che i tipi di carattere consentono una stringa vuota (''
), che non un NULL
valore e attiverebbe una violazione univoca proprio come qualsiasi altro valore non null se inserito in più di una riga.