首頁 >資料庫 >mysql教程 >如何建立引用非主鍵列的外鍵約束?

如何建立引用非主鍵列的外鍵約束?

Barbara Streisand
Barbara Streisand原創
2025-01-15 09:32:46585瀏覽

How to Create a Foreign Key Constraint Referencing a Non-Primary Key Column?

外鍵約束引用非主鍵

透過外鍵連結表時維護引用完整性是一個常見需求。但是,當外鍵引用的表沒有與被引用列對應的主鍵時,就會發生這種情況。

問題描述:

考慮以下資料庫模式:

<code class="language-sql">CREATE TABLE table1
(
   ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
   AnotherID INT NOT NULL,
   SomeData VARCHAR(100) NOT NULL
);

CREATE TABLE table2
(
   ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
   AnotherID INT NOT NULL,
   MoreData VARCHAR(30) NOT NULL,

   CONSTRAINT fk_table2_table1 FOREIGN KEY (AnotherID) REFERENCES table1 (AnotherID)
);</code>

這裡的目標是在 table2.AnotherID 和 table1.AnotherID 之間強制執行外鍵約束。但是,ID 是 table1 的主鍵,而 AnotherID 不是主鍵。

解:

要建立引用非主鍵的外鍵約束,被引用列必須套用唯一約束。根據 Microsoft 的 Books Online:

「FOREIGN KEY 限制不必只連結到另一個表中的 PRIMARY KEY 限制;它也可以定義為引用另一個表中 UNIQUE 約束的欄位。」

因此,在給定的模式中,將唯一約束應用於 table1 中的 AnotherID 將允許建立外鍵約束。

<code class="language-sql">ALTER TABLE table1 ADD CONSTRAINT UQ_AnotherID UNIQUE (AnotherID);</code>

但是,需要注意的是,如果存在備選主鍵候選,則使用它通常是更合適的方法。

以上是如何建立引用非主鍵列的外鍵約束?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn