首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >约束多个外键,但它是互斥的(PostgreSQL)

约束多个外键,但它是互斥的(PostgreSQL)
EN

Database Administration用户
提问于 2017-02-23 09:28:01
回答 2查看 1.5K关注 0票数 1

与到期表相关联的贷款表。

也是

与到期表相关联的发票表。

在适当的表中,其中一个外键应该出现,另一个应该是空的。

什么样的约束才是完美的?

谢谢。

EN

回答 2

Database Administration用户

回答已采纳

发布于 2017-02-23 13:20:42

听起来,您不能用一个约束来解决这个问题,但是没有什么可以阻止您定义更多的约束。我相信像这样的事情应该有效:

代码语言:javascript
复制
CREATE TABLE due (
    ...,
    d_invoice_id REFERENCES invoice (i_id),
    d_loan_id REFERENCES loan (l_id),
    ...,
    CHECK (   (d_invoice_id IS NULL AND d_loan_id IS NOT NULL) 
           OR (d_invoice_id IS NOT NULL AND d_loan_id IS NULL))
);

定义外键的列不必是NOT NULL,与其引用的列不同。除此之外,您还可以定义对任意复杂性的检查--不过,最好将复杂性保持在必要的最低限度。

票数 2
EN

Database Administration用户

发布于 2017-02-23 13:14:04

我相信你不可能有这样的违禁品。您可能有列禁忌或表约束。在处理外键时,它们位于“指向”另一个表的表上,不能使用其他表的列。因此,表invoice上的约束只能检查invoice列,不能访问loan列。

您可以在load表和invoice表上使用触发器来解决这个问题。触发器是函数,可以在任何其他表上操作,除了它附加的表之外。

票数 -2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/165277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档