Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Relacionamento sql de chave primária composta


Se você tiver um composto chave primária e, em seguida, todos restrições de chave estrangeira que fazem referência a ela devem usar todas as colunas da chave primária composta.

Então, no seu caso - TableTwo deve referência TableOne(ReportID, Date)

A única maneira de contornar isso seria criar um UNIQUE INDEX em TableOne (ReportID) - então você pode criar uma referência de chave estrangeira apenas para essa restrição exclusiva.

Mas isso levanta a questão:por que não é ReportID sozinho a chave primária, se já for única (já que você pode colocar um UNIQUE INDEX nele) e NOT NULL (já que faz parte do composto PK) ?

Etapa 1:crie o UNIQUE INDEX :
CREATE UNIQUE NONCLUSTERED INDEX UIX_TableOne ON dbo.TableOne(ReportID);

Etapa 2:crie a chave estrangeira de TableTwo :
ALTER TABLE dbo.TableTwo
ADD CONSTRAINT FK_TableTwo_TableOne
FOREIGN KEY(ReportID) REFERENCES dbo.TableOne(ReportID)