考虑一个对字段a,b和c具有唯一约束的表。例如
之类的东西create table my_tbl (
a number,
b number,
c varchar2(10),
...
constraint constr_name_u unique(a,b,c)
);
现在我想修改约束,使行b a不需要是唯一的。这意味着我想仅对b
如何创建这样一种“放松”的唯一约束?
答案 0 :(得分:3)
您无法在约束中对该逻辑进行编码。
您可以创建一个独特的基于函数的索引,但这可能会让您完成相同的任务
CREATE UNIQUE INDEX idx_my_table
ON my_table ( CASE WHEN a <= b THEN a ELSE NULL END,
CASE WHEN a <= b THEN b ELSE NULL END,
CASE WHEN a <= b THEN c ELSE NULL END );
这利用了Oracle不在索引结构中存储完全NULL
值的事实。这允许你有多少行,其中b