如何配置有异常的唯一约束?

时间:2013-06-21 20:01:43

标签: sql oracle unique-constraint

考虑一个对字段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

如何创建这样一种“放松”的唯一约束?

1 个答案:

答案 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