SQL puis-je avoir une contrainte "conditionnellement unique" sur une table?

J'ai eu ce arrivé une couple de fois dans ma carrière, et aucun de mes pairs locaux semble être en mesure de répondre. Dire que j'ai une table qui dispose d'un champ "Description", qui est une clé candidate, sauf que parfois, un utilisateur va s'arrêter à mi-chemin à travers le processus. Donc, pour peut-être 25% de la enregistre cette valeur est nulle, mais pour tous ceux qui ne sont pas NULL, il doit être unique.

Un autre exemple pourrait être un tableau qui doit gérer plusieurs "versions" d'un enregistrement, et une valeur de bit indique qui est le plus "active". Ainsi, le "candidat de la clé" est toujours peuplé, mais il peut y avoir trois versions sont identiques (à 0 dans le bit actif) et un seul qui est actif (1 dans le bit actif).

J'ai d'autres méthodes pour résoudre ces problèmes (dans le premier cas, de faire respecter le code de la règle, que ce soit dans la procédure stockée ou la couche de gestion, et dans le second, remplir un tableau d'archives avec un seuil de déclenchement et de l'UNION les tables quand j'ai besoin d'une histoire). Je ne veux pas de solutions de rechange (sauf si il y a manifestement meilleures solutions), je me demandais simplement si toute la saveur de SQL express "conditionnel de l'unicité" de cette façon. Je suis à l'aide de MS SQL, donc si il y a un moyen de le faire que, de la grande. Je suis la plupart du temps seulement sur le plan académique intéressé au problème.

source d'informationauteur Michael Blackburn