web-dev-qa-db-fra.com

Relation de clé étrangère avec les clés primaires composites dans SQL Server 2005

J'ai deux tables

Table1(
  FileID,
  BundledFileID,
  Domain)

et

Table2(
  FileID,
  FileType,
  FileName)

Dans Table2 FileID et FileType sont la clé primaire composite. Je souhaite créer une relation de clé étrangère à partir de Table1.FileID à Table2.

Est-il possible de faire cela?

35
Black Eagle

Puisque Table2 a une clé primaire composite (FileID, FileType), toute référence à celui-ci doit également inclure les deux colonnes.

ALTER TABLE dbo.Table1
  ADD CONSTRAINT FK_Table1_Table2
  FOREIGN KEY(FileID, FileType) REFERENCES Table2(FileID, FileType)

Sauf si vous avez une contrainte/un index unique sur le Table2.FileID champ (mais si c'est le cas: pourquoi n'est-ce pas le PK ??), vous ne pouvez pas créer une relation FK avec seulement des parties du PK sur la table cible - ne pouvez tout simplement pas le faire.

72
marc_s

marc a déjà donné une assez bonne réponse. Si les lignes du tableau 1 ne concernent qu'un seul type de fichier (par exemple, FileType `` ABC ''), vous pouvez ajouter FileType au tableau1 en tant que colonne calculée:

ALTER TABLE Table1 ADD FileType as 'ABC'

Que vous pouvez ensuite utiliser dans la clé étrangère.

4