与到期表相关联的贷款表。
也是
与到期表相关联的发票表。
在适当的表中,其中一个外键应该出现,另一个应该是空的。
什么样的约束才是完美的?
谢谢。
发布于 2017-02-23 13:20:42
听起来,您不能用一个约束来解决这个问题,但是没有什么可以阻止您定义更多的约束。我相信像这样的事情应该有效:
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,与其引用的列不同。除此之外,您还可以定义对任意复杂性的检查--不过,最好将复杂性保持在必要的最低限度。
发布于 2017-02-23 13:14:04
我相信你不可能有这样的违禁品。您可能有列禁忌或表约束。在处理外键时,它们位于“指向”另一个表的表上,不能使用其他表的列。因此,表invoice上的约束只能检查invoice列,不能访问loan列。
您可以在load表和invoice表上使用触发器来解决这个问题。触发器是函数,可以在任何其他表上操作,除了它附加的表之外。
https://dba.stackexchange.com/questions/165277
复制相似问题