Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Zusammengesetzte Primärschlüssel-SQL-Beziehung

Wenn Sie ein Composite haben Primärschlüssel, dann all Fremdschlüsseleinschränkungen, die darauf verweisen, müssen alle Spalten verwenden des zusammengesetzten Primärschlüssels.

Also in Ihrem Fall - TableTwo müssen Referenz TableOne(ReportID, Date)

Der einzige Weg, dies zu umgehen, wäre, einen UNIQUE INDEX zu erstellen auf TableOne (ReportID) - dann können Sie einen Fremdschlüsselverweis nur auf diese eindeutige Einschränkung erstellen.

Aber das wirft dann die Frage auf:Warum ist nicht ReportID allein der Primärschlüssel, wenn er bereits eindeutig ist (da Sie einen UNIQUE INDEX setzen können darauf) und NOT NULL (da es Teil des zusammengesetzten PK ist) ?

Schritt 1:Erstellen Sie den UNIQUE INDEX :

CREATE UNIQUE NONCLUSTERED INDEX UIX_TableOne ON dbo.TableOne(ReportID);

Schritt 2:Erstellen Sie den Fremdschlüssel aus TableTwo :

ALTER TABLE dbo.TableTwo
ADD CONSTRAINT FK_TableTwo_TableOne
FOREIGN KEY(ReportID) REFERENCES dbo.TableOne(ReportID)