Основно свойство на уникален ключ е, че трябва да е уникален. Правенето на част от този ключ с Nullable унищожава това свойство.
Има две възможни решения на проблема ви:
-
Един от начините, грешен начин, би бил да се използва някаква магическа дата за представяне на неизвестно. Това просто ви преодолява "проблема" на СУБД, но не решава проблема в логически смисъл. Очаквайте проблеми с два записа на "Джон Смит" с неизвестна дата на раждане. Тези момчета едно и също ли са или са уникални личности? Ако знаете, че са различни, тогава се връщате към същия стар проблем - вашият уникален ключ просто не е уникален. Дори не си помисляйте да задавате цял набор от магически дати, които да представляват „неизвестни“ – това наистина е пътят към ада.
-
По-добър начин е да създадете атрибут EmployeeId като сурогатен ключ. Това е просто произволен идентификатор, който присвоявате на лица, които познавате са уникални. Този идентификатор често е само целочислена стойност. След това създайте таблица Employee, за да свържете EmployeeId (уникален ключ без нула) с това, което смятате, че са зависими атрибути, в този случай Име и Дата на раждане (всеки от които може да бъде нула). Използвайте сурогатния ключ EmployeeId навсякъде, където преди сте използвали името/датата на раждане. Това добавя нова таблица към вашата система, но решава проблема с неизвестните стойности по стабилен начин.