3 Stimmen

Warum müssen Fremdschlüssel nur auf Primärschlüsseln verweisen?

In SQL verweisen die Fremdschlüssel nur auf Primärschlüssel. Warum können sie nicht auf eine eindeutige, nicht NULL-indizierte Spalte verweisen, die geclustert ist?

6voto

StuartLC Punkte 99976

Dies trifft nicht auf alle RDBMS zu. SQL Server (2008/R2) ermöglicht Fremdschlüssel in Spalten, die entweder eindeutige Schlüsselconstraints oder UNIQUE Indexe sind (d. h. der Schlüsselkandidat muss nicht einmal der gruppierte Index sein). Zum Beispiel:

CREATE TABLE Eltern
(
    ElternEindeutig1 INT NOT NULL,
    ElternEindeutig2 INT NOT NULL,
    Name NVARCHAR(50) NOT NULL
);
-- Ein beliebiger PK
ALTER TABLE Eltern ADD CONSTRAINT PK_Eltern PRIMARY KEY(Name);
-- Eindeutige Schlüsselconstraint
ALTER TABLE Eltern ADD CONSTRAINT U_Eltern UNIQUE(ElternEindeutig1);
-- Eindeutiger Index (Nicht gruppiert)
CREATE UNIQUE INDEX IX_Eltern ON Eltern(ElternEindeutig2);

CREATE TABLE Kind1
(
    KindID INT NOT NULL,
    ElternID INT NOT NULL,
    CONSTRAINT FK_Kind1Eltern FOREIGN KEY(ElternID) REFERENCES Eltern(ElternEindeutig1)
);

CREATE TABLE Kind2
(
    KindID INT NOT NULL,
    ElternID INT NOT NULL,
    CONSTRAINT FK_Kind2Eltern FOREIGN KEY(ElternID) REFERENCES Eltern(ElternEindeutig2)
);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X