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

Chiave univoca con NULL

Una proprietà fondamentale di una chiave unica è che deve essere unico. Rendere parte di quella chiave Nullable distrugge questa proprietà.

Ci sono due possibili soluzioni al tuo problema:

  • Un modo, il modo sbagliato, sarebbe usare una data magica per rappresentare l'ignoto. Questo ti fa superare il "problema" del DBMS ma non risolve il problema in senso logico. Aspettati problemi con due voci "John Smith" con date di nascita sconosciute. Questi ragazzi sono la stessa cosa o sono individui unici? Se sai che sono diversi, sei tornato allo stesso vecchio problema:la tua chiave univoca semplicemente non è unica. Non pensare nemmeno di assegnare un'intera gamma di date magiche per rappresentare "sconosciuto":questa è davvero la strada per l'inferno.

  • Un modo migliore è creare un attributo EmployeeId come chiave surrogata. Questo è solo un identificatore arbitrario che assegni a persone che conosci sono unici. Questo identificatore è spesso solo un valore intero. Quindi crea una tabella Employee per correlare EmployeeId (chiave univoca, non nullable) a ciò che ritieni siano gli attributi dipendenti, in questo caso Nome e Data di nascita (qualsiasi può essere nullable). Usa la chiave surrogata EmployeeId ovunque tu abbia utilizzato in precedenza il nome/data di nascita. Questo aggiunge una nuova tabella al tuo sistema ma risolve il problema dei valori sconosciuti in modo robusto.