请考虑下面的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_no
到pmt_no
,一次(不重复,如您所示)。
可以在这个链接表的pmt_no
列上创建一个唯一的索引