3

SQL では、外部キーは主キーのみを参照します。クラスター化された一意の非 null インデックス付き列を参照できないのはなぜですか?

4

1 に答える 1

6

これは、すべての RDBMS に当てはまるわけではありません。SQL Server (2008/R2) では、Unique Key Constraint または UNIQUE インデックスのいずれかである null 以外の列で外部キーを使用できます (つまり、候補キーはクラスター化インデックスである必要さえありません)。例えば:

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 に答える