Pokud máte kompozitní primární klíč a poté všechny omezení cizího klíče, která na něj odkazují, musí používat všechny sloupce složeného primárního klíče.
Takže ve vašem případě - TableTwo
musí odkaz TableOne(ReportID, Date)
Jediným způsobem, jak to obejít, by bylo vytvořit UNIQUE INDEX
na TableOne (ReportID)
- pak můžete vytvořit odkaz na cizí klíč pouze na toto jedinečné omezení.
Ale to pak vyvolává otázku:proč není ReportID
pouze primární klíč, pokud je již jedinečný (protože můžete zadat UNIQUE INDEX
na něm) a NOT NULL (protože je součástí složeného PK) ?
Krok 1:vytvořte UNIQUE INDEX
:
CREATE UNIQUE NONCLUSTERED INDEX UIX_TableOne ON dbo.TableOne(ReportID);
Krok 2:vytvořte cizí klíč z TableTwo
:
ALTER TABLE dbo.TableTwo
ADD CONSTRAINT FK_TableTwo_TableOne
FOREIGN KEY(ReportID) REFERENCES dbo.TableOne(ReportID)