18

我有一种情况,我需要根据另一个列值对列 [属性] 强制执行唯一约束。

例如,我有一个像 Table(ID, EID, Name, ISDeleted) 这样的表

ISDeleted 只能有一个值 null 或 'y'(活动或已删除),我想在 EID 上创建一个唯一约束,仅当 ISDeleted = null 时 ISDeleted,因为我不在乎是否有多个具有相同 id 的已删除记录。请注意,EID 可以有空值。

我为此使用 Oracle DB。

4

1 回答 1

28

您不能创建约束。但是您可以创建一个唯一的基于函数的索引。这利用了 Oracle 不索引 NULL 值这一事实——任何不包含在索引中的行,isDeleted因此NOT NULL唯一约束将不适用于它们。

CREATE UNIQUE INDEX one_not_deleted
    ON table_name( (CASE WHEN isDeleted IS NULL
                         THEN eid
                         ELSE null
                      END) );
于 2012-04-25T14:29:17.790 回答