SQL中一個外鍵可以引用多個表嗎?

Mary-Kate Olsen
發布: 2024-10-24 01:51:29
原創
960 人瀏覽過

Can a Foreign Key Reference Multiple Tables in SQL?

多態外鍵約束:一種多功能方法

傳統的外鍵約束在兩個指定的表之間建立直接鏈接。但是,如果您需要多態關係,其中一列引用多個可能的父表之一,該怎麼辦?

多表的外鍵可能嗎?

不幸的是,答案是否定的。外鍵約束只能引用單一父表。這種限制源自於資料庫系統對資料完整性和一致性的需求。

實際考慮因素

儘管存在固有的限制,但還是有一些實用的方法可以模擬多個表的外鍵:

  1. 聯合表: 建立一個包含所有可能父表中的欄位的聯合表。子表中的外鍵列引用聯合表。插入或更新資料時,聯合表決定要插入或更新到哪個實際父表。
  2. 類型列:在子表中引入類型列,以區分可能的父表類型。然後,外鍵列會引用與類型列中指定的類型相對應的父表。

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中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!