为什么外键只与主键有关?

Roh*_*hit 3 sql foreign-keys foreign-key-relationship

在SQL中,外键仅引用主键.为什么它不能引用聚集的唯一非空索引列?

Stu*_*tLC 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)
);
Run Code Online (Sandbox Code Playgroud)

  • 而且SQL标准也不是这样. (2认同)