SQL Server 2008 Express — Got Столбцы не соответствуют существующему первичному ключу или ограничению UNIQUE, несмотря на установленные ограничения

У меня есть следующие таблицы

ModuleClass ( <ModuleID>, <Section>, <Number>, StartDate, EndDate)
ClassEnrollment ( <ModuleID>, <Section>, <Term Code>, <User Name>, Role)

Теперь сущность ModuleClass может иметь более одной регистрации, поэтому существует отношение 1 к M. Однако при попытке определить FK между ModuleClass и ClassEnrollment с использованием ModuleID и Section я получаю

Столбцы в таблице ClassEnrollment не соответствуют существующему первичному ключу или ограничению UNIQUE.

Однако и ModuleID, и Section участвуют в ограничении PK.

(Я использую визуальные инструменты базы данных для создания таблиц и указания отношения).

Как лучше представить эту связь?


person Extrakun    schedule 30.03.2011    source источник
comment
ModuleId и Section составляют весь первичный ключ или только его часть? Типы данных эквивалентных столбцов точно такие же?   -  person Thomas    schedule 30.03.2011
comment
Можете ли вы написать две таблицы как операторы CREATE TABLE и добавить их к своему вопросу?   -  person Damien_The_Unbeliever    schedule 30.03.2011
comment
@Thomas, ModuleID и Section являются частью ПК (поле в ‹› является частью ПК)   -  person Extrakun    schedule 30.03.2011
comment
@Damien_The_Unbeliever, я использую Visual Database Tools для создания таблицы. В любом случае я могу увидеть базовый сценарий CREATE TABLE?   -  person Extrakun    schedule 30.03.2011
comment
@Extrakun - к сожалению, я не знаком с этими инструментами, поэтому не могу сказать.   -  person Damien_The_Unbeliever    schedule 30.03.2011
comment
@Extrakun - ключевое слово является частью ПК. Чтобы сослаться на PK в ограничении FK, вы должны сослаться на весь ключ, что означает, что все столбцы в PK должны существовать в FK.   -  person Thomas    schedule 30.03.2011


Ответы (2)


похоже, что первичный ключ ModuleClass — это составной ключ, состоящий из трех столбцов (ModuleID, Section, Number). Чтобы установить ссылку внешнего ключа на эту таблицу, вам нужно настроить таргетинг на все три этих столбца.

Чтобы настроить таргетинг на все три этих столбца, вам необходимо включить столбец «Число» в таблицу ClassEnrollment. Затем вы можете установить

FOREIGN KEY (ModuleID, Section, Number) 
  REFERENCES ModuleClass (ModuleID, Section, Number)
person Mike Sherrill 'Cat Recall'    schedule 30.03.2011

Вы уверены, что не указали отношения FK наоборот? Эту ошибку легко совершить, используя визуальные инструменты с графическим интерфейсом. Вы должны убедиться, что каждая строка в ClassEnrollment ссылается на одну строку в ModuleClass.

Если вы укажете взаимосвязь в обратном направлении, вы получите именно ту ошибку, о которой сообщали.

person Walter Mitty    schedule 30.03.2011