在 SQL 中,外键仅引用主键。为什么它不能引用聚集的唯一非空索引列?
问问题
136 次
1 回答
6
并非所有 RDBMS 都是如此。SQL Server (2008/R2) 允许在作为唯一键约束或唯一索引的非空列上使用外键(即,候选键甚至不需要是聚集索引)。例如:
CREATE TABLE Parent
(
ParentUnique1 INT NOT NULL,
ParentUnique2 INT NOT NULL,
Name NVARCHAR(50) NOT NULL
);
-- Some arbitrary PK
ALTER TABLE Parent ADD CONSTRAINT PK_Parent PRIMARY KEY(Name);
-- Unique Key Constraint
ALTER TABLE Parent ADD CONSTRAINT U_Parent UNIQUE(ParentUnique1);
-- Unique Index (NonClustered)
CREATE UNIQUE INDEX IX_Parent ON Parent(ParentUnique2);
CREATE TABLE Child1
(
ChildID INT NOT NULL,
ParentID INT NOT NULL,
CONSTRAINT FK_Child1Parent FOREIGN KEY(ParentID) REFERENCES Parent(ParentUnique1)
);
CREATE TABLE Child2
(
ChildID INT NOT NULL,
ParentID INT NOT NULL,
CONSTRAINT FK_Child2Parent FOREIGN KEY(ParentID) REFERENCES Parent(ParentUnique2)
);
于 2012-09-05T11:42:40.007 回答