请考虑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),因此序列不起作用。并且有许多用户同时插入数据。
有没有办法为该条件创建唯一的键/唯一索引/基于函数的索引?
谢谢!
答案 0 :(得分:2)
这可能是一个规范化问题。
您可以将相关元组拉出到另一个表中,以使该行唯一。
在这种情况下,将doc_no
链接到pmt_no
,一次(不再如您所示)。
然后,您可以在此链接表的pmt_no
列上创建唯一索引。