外鍵約束與非主鍵列
關聯式資料庫利用外鍵約束來維護表之間的參考完整性。 雖然外鍵通常引用主鍵,但在某些情況下引用非主鍵列是必要的。
場景插圖
讓我們檢查兩個表,table1
和 table2
:
<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
和 table1
之間需要使用 AnotherID
列建立外鍵關係,該列不是 table1
中的主鍵。
建立非主鍵的外鍵
雖然不太常見,但建立引用非主鍵列的外鍵是可行的。 但是,必須對非主鍵列強制執行唯一約束:
<code class="language-sql">ALTER TABLE table1 ADD CONSTRAINT UQ_AnotherID UNIQUE (AnotherID);</code>
此唯一約束保證 AnotherID
內 table1
值的唯一性,使其能夠用作外鍵目標。
推薦替代方案
理想情況下,外鍵應該引用主鍵以獲得更強的參考完整性。 如果可能,請重新設計資料庫架構以利用 table1
的 ID
欄位作為 table2
中的外鍵目標。這消除了管理非主鍵列的唯一約束的需要。
以上是什麼時候應該對非主鍵列使用外鍵?的詳細內容。更多資訊請關注PHP中文網其他相關文章!