外键约束和非主键列
关系数据库利用外键约束来维护表之间的引用完整性。 虽然外键通常引用主键,但在某些情况下引用非主键列是必要的。
场景插图
让我们检查两个表,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中文网其他相关文章!