3
在SQL中,外鍵僅引用主鍵。爲什麼它不能引用一個獨特的非空索引列被聚集?爲什麼外鍵只能涉及到主鍵?
在SQL中,外鍵僅引用主鍵。爲什麼它不能引用一個獨特的非空索引列被聚集?爲什麼外鍵只能涉及到主鍵?
這不是所有關係型數據庫管理系統的情況。 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)
);
而且它也不符合SQL標準。 –
爲什麼這將是必要的? – smilledge
或者相反。爲什麼需要限制? – Rohit