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

发布于 2024-11-27 15:14:56 字数 594 浏览 2 评论 0原文

请考虑 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) ,所以序列不起作用。并且有很多用户同时插入数据。

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

谢谢!

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!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

几味少女 2024-12-04 15:14:56

也许这是一个标准化问题。

您可以将相关元组提取到另一个表中,以便该行是唯一的。

在本例中,将 doc_no 链接到 pmt_no 一次(不像您所示的那样重复)。

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

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_no to pmt_no, once (not repeated as you have shown).

Then you can make a unique index on the pmt_no column of this link table.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文