2012-06-07 26 views
8

Verilen: vin başına sadece bir sahibi olacak şekilde bir kısıtlama eklemek için bir yolPostgreSQL: Şartlı benzersiz kısıtlama

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

var mı?


Düzenleme

: Ben this question buldum.
Bu amaca uygun partial unique index ekleniyor mu?

+0

Evet, ihtiyacınız olan kısmi benzersiz bir dizin. –

cevap

13

Evet, kısmi dizin sizin seçiminizdir.

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

Burada dizin yalnızca is_owner'ın true olduğu satırları kapsar ve bu satırlar vin ile birlikte olmalıdır.

+0

Bir kısıtlama/kontrol sözleşmesinin neden bir endeks kullanılmasın diye bir fikri yok mu? – vol7ron

+0

@ vol7ron: büyük olasılıkla bir kısıtlama (tanım olarak) her zaman bir tablodaki tüm satırlara uygulanır. –

+0

AFAIK herhangi bir kısıtlama eklemek, vin tekliğini denetlerken sorgulama tablosunu gerektirir. Sorgu tablosu, dizin taramasıyla sonuçlanır. Hala bir endeks kullanacaksınız, ancak her bir kontrolün size daha fazla puan vereceğini düşünüyorum. – kworr

İlgili konular