Als u een composiet . heeft primaire sleutel, dan alle externe sleutelbeperkingen die ernaar verwijzen, moeten alle kolommen gebruiken van de samengestelde primaire sleutel.
Dus in jouw geval - TableTwo
moeten referentie TableOne(ReportID, Date)
De enige manier om dit te omzeilen is door een UNIQUE INDEX
te maken op TableOne (ReportID)
- dan kunt u alleen een verwijzing naar een externe sleutel maken voor die unieke beperking.
Maar dat roept dan de vraag op:waarom is ReportID
. niet alleen de primaire sleutel, als deze al uniek is (omdat je een UNIQUE INDEX
kunt plaatsen erop) en NIET NULL (omdat het deel uitmaakt van de samengestelde PK) ?
Stap 1:maak de UNIQUE INDEX
:
CREATE UNIQUE NONCLUSTERED INDEX UIX_TableOne ON dbo.TableOne(ReportID);
Stap 2:maak de externe sleutel van TableTwo
:
ALTER TABLE dbo.TableTwo
ADD CONSTRAINT FK_TableTwo_TableOne
FOREIGN KEY(ReportID) REFERENCES dbo.TableOne(ReportID)