Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Relation sql de clé primaire composite

Si vous avez un composite clé primaire, puis tous les contraintes de clé étrangère qui y font référence doivent utiliser toutes les colonnes de la clé primaire composite.

Donc dans votre cas - TableTwo doit référence TableOne(ReportID, Date)

Le seul moyen de contourner cela serait de créer un UNIQUE INDEX sur TableOne (ReportID) - alors vous pouvez créer une référence de clé étrangère à cette seule contrainte unique.

Mais cela soulève alors la question suivante :pourquoi ReportID n'est-il pas seule la clé primaire, si elle est déjà unique (puisque vous pouvez mettre un UNIQUE INDEX dessus) et NOT NULL (puisqu'il fait partie du composé PK) ?

Étape 1 :créez l'UNIQUE INDEX :

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

Étape 2 :créez la clé étrangère à partir de TableTwo :

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