2012-06-07 3 views
8

을 감안할 때 : VIN 당 하나의 소유자가되도록 제약 조건을 추가하는 방법은PostgreSQL의 : 조건부 고유 제한 조건

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

있습니까?


편집

: 나는 this question을 발견했다.
이 목적에 맞게 partial unique index을 추가하고 있습니까?

+0

예, 부분 고유 색인이 필요합니다. –

답변

13

예 부분 색인을 선택합니다.

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

여기 색인은 is_owner가 true이고이 행이있는 행만 다루고 있습니다. vin은 고유해야합니다.

+0

인덱스를 사용하는 것보다 제약 조건/검사 규칙이없는 이유는 무엇입니까? – vol7ron

+0

@ vol7ron : 제약 조건은 (정의에 따라) 항상 테이블의 모든 행에 적용되기 때문일 수 있습니다. –

+0

AFAIK 제약 조건을 추가하면 vin 고유성을 확인할 때 테이블을 쿼리해야합니다. 테이블을 쿼리하면 인덱스 스캔이 발생합니다. 각 수표로 더 많은 포인트가 필요하다고 생각하지만 여전히 인덱스를 사용할 것입니다. – kworr

관련 문제