我有一种情况需要根据另一个列值对列[attribute]强制执行唯一约束。
例如,我有一个像Table(ID,EID,Name,ISDeleted)的表
ISDeleted只能有一个值null或'y'(活动或删除),我想在EID上创建一个唯一约束,ISDeleted仅在ISDeleted = null时,因为我不关心是否有多个已删除的记录同样的身份。请注意,EID可以为空值。
我正在使用Oracle DB。
答案 0 :(得分:24)
您无法创建约束。但是您可以创建一个独特的基于函数的索引。这利用了Oracle不对NULL值编制索引的事实 - isDeleted
为NOT NULL
的任何行都不会包含在索引中,因此唯一约束将不适用于它们。
CREATE UNIQUE INDEX one_not_deleted
ON table_name( (CASE WHEN isDeleted IS NULL
THEN eid
ELSE null
END) );