2017-05-25 99 views
0

我有一個關稅表。如何根據字段值創建約束條件

表有三列:id INT,接收INT,is_default INT(0/1);

我需要作出約束,這將限制is_default = 1的同一接待的新關稅的創建。因此,每個接待只能有一個默認關稅。

感謝

+0

不使用整數作爲布爾標誌。使用'boolean'列 –

回答

1

你需要一個unique partial index

CREATE UNIQUE INDEX uniq_tariff_reception_where_is_default 
    ON tariff (reception) 
    WHERE is_default = 1 

UNIQUE索引工作完全一樣UNIQUE限制(在引擎蓋下,UNIQUE約束實際創建UNIQUE指標實現唯一性),但約束版本cannot be partial

添加一個唯一約束wil l在約束中列出的列或列組上自動創建一個唯一的B-樹索引。僅覆蓋一些行的唯一性限制不能被寫爲唯一約束,但可以通過創建唯一的部分索引來強制執行此限制。

:請考慮使用BOOLEAN型爲is_default列。因此,您的指數可能是WHERE is_default = TRUE甚至WHERE is_default

+0

非常感謝! –