2017-05-25 98 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

非常感谢! –