Связь внешнего ключа с составными первичными ключами в SQL Server 2005 - PullRequest
35 голосов
/ 22 октября 2010

У меня есть две таблицы

Table1(
  FileID,
  BundledFileID,
  Domain)

и

Table2(
  FileID,
  FileType,
  FileName)

В таблице 2 FileID и FileType - составной первичный ключ. Я хочу создать отношение внешнего ключа от Table1.FileID до Table2.

Возможно ли это сделать?

Ответы [ 2 ]

70 голосов
/ 22 октября 2010

Поскольку в Table2 имеется составной первичный ключ (FileID, FileType), то любая ссылка на него должна также включать оба столбца .

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

Если у вас нет уникального ограничения / индекса наTable2.FileID поле (но если так: почему это не PK ??), вы не можете создать отношение FK только к частям PK на целевой таблице - просто не можете это сделать.

4 голосов
/ 22 октября 2010

Марк уже дал довольно хороший ответ. Если строки в Таблице 1 относятся только к одному типу Файла (например, FileType 'ABC'), вы можете добавить FileType в Таблицу 1 как вычисляемый столбец:

ALTER TABLE Table1 ADD FileType as 'ABC'

Который затем вы можете использовать во внешнем ключе.

...