Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Chave única com NULLs


Uma propriedade fundamental de uma chave exclusiva é que deve ser único. Tornar parte dessa chave Nullable destrói essa propriedade.

Existem duas soluções possíveis para o seu problema:

  • Uma maneira, a errada, seria usar alguma data mágica para representar o desconhecido. Isso apenas faz com que você ultrapasse o "problema" do DBMS, mas não resolve o problema no sentido lógico. Espere problemas com duas entradas "John Smith" com datas de nascimento desconhecidas. Esses caras são a mesma pessoa ou são indivíduos únicos? Se você sabe que eles são diferentes, então você está de volta ao mesmo velho problema - sua chave única não é única. Nem pense em atribuir uma série de datas mágicas para representar "desconhecido" - esse é realmente o caminho para o inferno.

  • Uma maneira melhor é criar um atributo EmployeeId como uma chave substituta. Este é apenas um identificador arbitrário que você atribui a indivíduos que conhece São únicos. Esse identificador geralmente é apenas um valor inteiro. Em seguida, crie uma tabela Employee para relacionar o EmployeeId (único, chave não anulável) com o que você acredita ser os atributos dependentes, neste caso, Nome e Data de nascimento (qualquer um dos quais pode ser anulável). Use a chave substituta EmployeeId em todos os lugares em que você usou anteriormente o Nome/Data de Nascimento. Isso adiciona uma nova tabela ao seu sistema, mas resolve o problema de valores desconhecidos de maneira robusta.