Une propriété fondamentale d'une clé unique c'est qu'il doit être unique. Rendre une partie de cette clé Nullable détruit cette propriété.
Il existe deux solutions possibles à votre problème :
-
Une façon, la mauvaise, serait d'utiliser une date magique pour représenter l'inconnu. Cela vous permet juste de dépasser le "problème" du SGBD mais ne résout pas le problème dans un sens logique. Attendez-vous à des problèmes avec deux entrées "John Smith" ayant des dates de naissance inconnues. Ces types sont-ils identiques ou sont-ils des individus uniques ? Si vous savez qu'ils sont différents, vous revenez au même vieux problème :votre clé unique n'est tout simplement pas unique. Ne pensez même pas à attribuer toute une gamme de dates magiques pour représenter "inconnu" - c'est vraiment le chemin de l'enfer.
-
Une meilleure méthode consiste à créer un attribut EmployeeId en tant que clé de substitution. Il s'agit simplement d'un identifiant arbitraire que vous attribuez à des personnes que vous connaissez sont uniques. Cet identifiant n'est souvent qu'une valeur entière. Créez ensuite une table Employee pour associer EmployeeId (clé unique, non nullable) à ce que vous pensez être les attributs dépendants, dans ce cas Name et Date of Birth (chacun pouvant être nullable). Utilisez la clé de substitution EmployeeId partout où vous avez précédemment utilisé le nom/la date de naissance. Cela ajoute une nouvelle table à votre système mais résout le problème des valeurs inconnues de manière robuste.