Please consider the following table structure on Oracle:
create table DOCS
(
DOC_NO NUMBER not null,
DOC_TYPE VARCHAR2(5) not null,
PMT_NO NUMBER not null
);
In this table, the PMT_NO column has to be unique except when DOC_NO is the same and DOC_TYPE is different:
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 cannot repeat and cannot have “holes” (i.e. 1, 2, 3, 5), so a sequence would not work. And there are many users inserting data at the same time.
Is there a way to create a unique key / unique index / function-based index for that condition?
Thanks!
Maybe this is a normalization problem.
You could pull out the relevant tuple into another table such that the row would be unique.
In this case link
doc_notopmt_no, once (not repeated as you have shown).Then you can make a unique index on the
pmt_nocolumn of this link table.