在Oracle中创建依赖于其他列的约束

时间:2011-08-01 19:51:00

标签: oracle unique-constraint

请考虑Oracle上的以下表格结构:

create table DOCS
(
  DOC_NO   NUMBER not null,
  DOC_TYPE VARCHAR2(5) not null,
  PMT_NO   NUMBER not null
);

在此表中,PMT_NO列必须是唯一的,除非DOC_NO相同且DOC_TYPE不同:

    DOC_NO DOC_TYPE     PMT_NO
---------- -------- ----------
         1 A                10 <-- good
         1 B                10 <-- good, DOC_NO is the same
         2 C                10 <-- NOT good, DOC_NO is different

PMT_NO不能重复,也不能有“空洞”(即1,2,3,5),因此序列不起作用。并且有许多用户同时插入数据。

有没有办法为该条件创建唯一的键/唯一索引/基于函数的索引?

谢谢!

1 个答案:

答案 0 :(得分:2)

这可能是一个规范化问题。

您可以将相关元组拉出到另一个表中,以使该行唯一。

在这种情况下,将doc_no链接到pmt_no,一次(不再如您所示)。

然后,您可以在此链接表的pmt_no列上创建唯一索引。