2014-02-21 77 views
1
CREATE TABLE article (
    day integer, 
    is_chosen boolean 
) 
CREATE UNIQUE INDEX day_is_chosen_unique_index ON article (day, is_chosen); 

以上將給出兩列上的唯一索引,這意味着在給定日期我們可以選擇一篇文章並選擇一篇文章。Postgres:具有合成值的複合唯一索引

我只需要is_chosen字段的唯一索引。換句話說,在任何一天,我們只能有不選擇是選擇一個文章,多篇文章

也許是這樣的:

CREATE UNIQUE INDEX day_is_chosen_unique_index ON article (day, is_chosen true);

我將如何去創造這個綜合指數?

+0

*「我們可以選擇一篇文章,選擇一篇文章」*看起來更像是可以有很多天,每一種都可以選擇而不是選擇。 –

+0

@samol您是否嘗試過建議的解決方案?考慮接受答案。 –

回答

1

此部分指數就足夠了:

CREATE TABLE article (
    id   INT 
, when_day INT 
, is_chosen BOOLEAN DEFAULT FALSE 
); 

CREATE UNIQUE INDEX day_is_chosen_unique_index 
    ON article (when_day) 
    WHERE is_chosen; 

注:「天」是保留關鍵字在SQL所以最好不要使用它作爲列名。

+0

以下是部分索引的文檔:http://www.postgresql.org/docs/8.0/static/indexes-partial.html – flyingL123