我有一张桌子,其中我需要唯一的EmpId
。重复是当有多个条目具有相同EmpId
isDeleted = false
CREATE TABLE someTable (
id serial primary key,
EmpId character varying(15) NOT NULL,
EmpName character varying(15),
isDeleted boolean,
unique (EmpId , isDeleted )//where isDeleted is false
)
答案 0 :(得分:2)
没有这种约束,但您可以创建一个部分唯一索引(使用唯一索引实现唯一约束):
CREATE UNIQUE INDEX ON sometable (empid) WHERE NOT isdeleted;
这将完全符合您的要求。
答案 1 :(得分:-2)
我认为,为此,您不能使用UNIQUE约束,但需要创建自定义函数
CREATE FUNCTION check_empID(varchar, boolean) RETURNS BOOLEAN
AS
// your implementation
然后将其与CHECK约束
一起使用CREATE TABLE someTable (
id serial primary key,
EmpId character varying(15) NOT NULL,
EmpName character varying(15),
isDeleted boolean,
CONSTRAINT ck_active_emp CHECK (check_empID(EmpId, isDeleted))
)
由于该函数将使用该表,因此您可以创建没有约束的表,以便您可以创建和测试您的函数。然后改变表以稍后添加约束