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