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



请考虑下面的Oracle表结构:

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

在这个表中,除非DOC_NO相同而DOC_TYPE不同,否则PMT_NO列必须是唯一的:

    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),所以序列不能工作。并且有许多用户同时插入数据。

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

谢谢!

可能这是一个标准化问题。

您可以将相关的元组拉到另一个表中,这样该行将是唯一的。

在本例中,链接doc_nopmt_no,一次(不重复,如您所示)。

可以在这个链接表的pmt_no列上创建一个唯一的索引

最新更新