2012-06-07 1 views
8

Étant donné:PostgreSQL: contrainte unique condition

---------------------------------- 
     vin  | driver | is_owner 
--------------+--------+---------- 
231431cxzv87 | bob | true 
231431cxzv87 | jeff | false 
231431cxzv87 | greg | false 
32342klj234s | jeff | true 

Y at-il un moyen d'ajouter une contrainte pour qu'il n'y ait qu'un seul propriétaire par vin?


Edit: Je trouvé this question.
L'ajout d'un partial unique index est-il conçu pour répondre à cet objectif?

+0

Oui, un index unique partiel est ce dont vous avez besoin. –

Répondre

13

Oui l'index partiel est votre choix.

create unique index unique__vin on table (vin) where is_owner; 

Ici, l'index ne couvre que les lignes où is_owner est vrai et avec ces lignes, vin devrait être unique.

+0

Une idée de pourquoi il n'y a pas de convention de contrainte/vérification, par opposition à l'utilisation d'un index? – vol7ron

+0

@ vol7ron: probablement parce qu'une contrainte est (par définition) toujours appliquée à toutes les lignes d'une table. –

+0

AFAIK l'ajout de toute contrainte nécessiterait une table d'interrogation lors de la vérification de l'unicité vin. L'interrogation de la table entraînerait une analyse d'index. Vous utiliserez toujours un index mais je pense que chaque vérification vous coûterait plus de points. – kworr

Questions connexes