外鍵約束引用非主鍵
透過外鍵連結表時維護引用完整性是一個常見需求。但是,當外鍵引用的表沒有與被引用列對應的主鍵時,就會發生這種情況。
問題描述:
考慮以下資料庫模式:
<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中文網其他相關文章!