2016-01-12 57 views
1

假設有一個表AVATARS和其他列中有user_id(用戶表的外鍵)和state其中狀態可以是0到6之間的任何值。我想要創建一個約束,以便用戶可以只有2個化身,其中一個狀態= 0,另一個狀態!= 0。我想知道是否有可能實現一個唯一的索引?或者我將不得不添加一些布爾列?PostgreSQL對於一組特定值的唯一索引

回答

1

你可以使用一個唯一的索引用表達:

CREATE UNIQUE INDEX avatars_userid_state_0_idx ON avatars(user_id,(state<>0)); 

(或state = 0,最終結果是一樣的)。

0

可以使用過濾唯一索引做到這一點。

對於具有狀態= 0的一個值:

create unique index unq_avatars_user_state0 
    on avatars(user_id, state) 
    where state = 0; 

對於具有狀態<一個值> 0:

create unique index unq_avatars_user_state0 
    on avatars(user_id, state) 
    where state <> 0; 

注意:這些不保證這樣的值的存在,只是有最多隻有一個。