Jeśli masz kompozyt klucz podstawowy, a następnie wszystkie ograniczenia klucza obcego, które się do niego odwołują, muszą używać wszystkich kolumn złożonego klucza podstawowego.
Więc w twoim przypadku - TableTwo
musi reference TableOne(ReportID, Date)
Jedynym sposobem na obejście tego byłoby utworzenie UNIQUE INDEX
na TableOne (ReportID)
- następnie możesz utworzyć odwołanie do klucza obcego tylko do tego unikalnego ograniczenia.
Ale to nasuwa pytanie:dlaczego nie jest ReportID
sam klucz podstawowy, jeśli jest już unikalny (ponieważ możesz umieścić UNIQUE INDEX
na nim) i NOT NULL (ponieważ jest częścią złożonego PK) ?
Krok 1:utwórz UNIQUE INDEX
:
CREATE UNIQUE NONCLUSTERED INDEX UIX_TableOne ON dbo.TableOne(ReportID);
Krok 2:utwórz klucz obcy z TableTwo
:
ALTER TABLE dbo.TableTwo
ADD CONSTRAINT FK_TableTwo_TableOne
FOREIGN KEY(ReportID) REFERENCES dbo.TableOne(ReportID)