Postgresql

多個外鍵的約束,但它是互斥的(PostgreSQL)

  • February 23, 2017

與到期表關聯的外借表。

與到期表關聯的發票表。

在到期表中,其中一個外鍵應該存在,另一個應該為空。

什麼樣的約束才是完美的?

謝謝。

聽起來,你不能用一個約束來解決這個問題,但沒有什麼能阻止你定義更多的約束。我相信這樣的事情應該有效:

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與它引用的列不同,定義了外鍵的列不必是。除此之外,您可以定義任意複雜性的檢查 - 不過,建議將復雜性保持在必要的最低限度。

引用自:https://dba.stackexchange.com/questions/165277