Postgresql
多個外鍵的約束,但它是互斥的(PostgreSQL)
與到期表關聯的外借表。
還
與到期表關聯的發票表。
在到期表中,其中一個外鍵應該存在,另一個應該為空。
什麼樣的約束才是完美的?
謝謝。
聽起來,你不能用一個約束來解決這個問題,但沒有什麼能阻止你定義更多的約束。我相信這樣的事情應該有效:
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
與它引用的列不同,定義了外鍵的列不必是。除此之外,您可以定義任意複雜性的檢查 - 不過,建議將復雜性保持在必要的最低限度。