sql >> Databasteknik >  >> RDS >> Mysql

Unik nyckel med NULL

En grundläggande egenskap hos en unik nyckel är att det måste vara unikt. Att göra en del av den nyckeln Nullable förstör den här egenskapen.

Det finns två möjliga lösningar på ditt problem:

  • Ett sätt, fel sätt, skulle vara att använda något magiskt datum för att representera okända. Detta tar dig bara förbi DBMS-"problemet" men löser inte problemet i en logisk mening. Förvänta dig problem med två "John Smith"-poster som har okänt födelsedatum. Är dessa killar en och samma eller är de unika individer? Om du vet att de är olika så är du tillbaka till samma gamla problem - din unika nyckel är helt enkelt inte unik. Tänk inte ens på att tilldela en hel rad magiska datum för att representera "okända" - det här är verkligen vägen till helvetet.

  • Ett bättre sätt är att skapa ett EmployeeId-attribut som en surrogatnyckel. Detta är bara en godtycklig identifierare som du tilldelar till personer som du känner är unika. Thisidentifier är ofta bara ett heltalsvärde. Skapa sedan en Employee-tabell för att relatera EmployeeId (unik, icke-nullbar nyckel) till vad du tror är de beroende attributerna, i det här fallet Namn och Födelsedatum (vilka som helst kan vara nullbara). Använd EmployeeId surrogatnyckeln överallt där du tidigare använde namnet/födelsedatumet. Detta lägger till en ny tabell till ditt system men löser problemet med okända värden på ett robust sätt.



  1. Välj tid mellan två gånger mysql

  2. MySQL och Check Constraints

  3. Hur man väljer kolumnvärde som kolumnnamn med villkor i SQL-tabell

  4. PostgreSQL funktionsanrop