Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Relazione sql della chiave primaria composita

Se hai un composito chiave primaria, quindi tutto i vincoli di chiave esterna che fanno riferimento devono utilizzare tutte le colonne della chiave primaria composita.

Quindi nel tuo caso - TableTwo deve riferimento TableOne(ReportID, Date)

L'unico modo per aggirare questo problema sarebbe creare un UNIQUE INDEX su TableOne (ReportID) - quindi puoi creare un riferimento di chiave esterna solo a quel vincolo univoco.

Ma questo fa sorgere la domanda:perché non è ReportID da sola la chiave primaria, se è già unica (poiché puoi inserire un UNIQUE INDEX su di esso) e NOT NULL (poiché fa parte del composto PK) ?

Passaggio 1:crea il UNIQUE INDEX :

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

Passaggio 2:crea la chiave esterna da TableTwo :

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