多態外鍵約束:一種多功能方法
傳統的外鍵約束在兩個指定的表之間建立直接鏈接。但是,如果您需要多態關係,其中一列引用多個可能的父表之一,該怎麼辦?
多表的外鍵可能嗎?
不幸的是,答案是否定的。外鍵約束只能引用單一父表。這種限制源自於資料庫系統對資料完整性和一致性的需求。
實際考慮因素
儘管存在固有的限制,但還是有一些實用的方法可以模擬多個表的外鍵:
MySQL 和PostgreSQL 中的範例
在MySQL 中,以下內容語句建立聯合表:
<code class="sql">CREATE TABLE union_table AS SELECT * FROM subordinates UNION ALL SELECT * FROM products;</code>
子表中的外鍵約束將是:
<code class="sql">ALTER TABLE images ADD FOREIGN KEY (person_id) REFERENCES union_table(id);</code>
在PostgreSQL 中,使用類似的方法:
<code class="sql">CREATE TABLE union_table AS SELECT * FROM subordinates UNION ALL SELECT * FROM products;</code>
外鍵約束變成:
<code class="sql">ALTER TABLE images ADD FOREIGN KEY (person_id) REFERENCES union_table(id);</code>
結論
雖然多個表的直接外鍵不可行,但替代策略允許多態SQL資料庫系統中的外鍵關係。這些策略保留資料完整性,同時提供容納多個父表的彈性。
以上是SQL中一個外鍵可以引用多個表嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!