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?
Antwort
Zu viele Anzeigen?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)
);