У меня проблемы с созданием внешнего ключа в моей БД. Вот перефразированная модель того, как выглядят мои таблицы:
ПРИМЕЧАНИЕ
* (PK) NOTE_ID BIGINT
* TITLE VARCHAR(200)
* DATE DATETIME
* SERIES_ID BIGINT
СЕРИЯ
* (PK) SERIES_ID BIGINT
* TITLE VARCHAR(200)
* DESCR VARCHAR(1000)
Я пытаюсь создать связь "имеет" между NOTE
и SERIES
на SERIES_ID
. Я думал, что установка внешнего ключа между двумя таблицами с помощью SERIES_ID
будет решением, но когда я пытаюсь создать его, я получаю следующую ошибку:
ОШИБКА: в указанной таблице dbo.SERIES нет первичных ключей или ключей-кандидатов, которые соответствуют списку ссылающихся столбцов во внешнем ключе FK_ SERIES _NOTE. Не удалось создать ограничение
Я использую диспетчер веб-баз данных, который поставляется с настроенным мной SQL Server GoDaddy, поэтому я не уверен, какой базовый запрос он пытается использовать, иначе я бы опубликовал его.
В конце концов, это все, что нужно для создания отношения, чтобы сопоставления NHibernate для моего объекта Note содержали однозначное отношение к объекту Series. Однако я, возможно, даже не пытаюсь решить эту проблему с помощью внешнего ключа.
Правильно ли я поступаю?
РЕДАКТИРОВАТЬ: Пытаясь объединить таблицы в более простой пример, я удалил то, что я считал несколькими некритическими столбцами. Однако в итоге я оставил поле, которое на самом деле было частью составного первичного ключа в таблице серий. Итак, поскольку я пытался назначить внешний ключ только одной части составного ключа, это не позволяло мне это сделать.
В конце концов, я еще раз взглянул на структуру своей таблицы и обнаружил, что на самом деле мне не нужен другой кусок составного ключа - и после удаления назначение внешнего ключа теперь отлично работает.
NOTE_ID
, это было бы отношение «один к одному». - person Cole W   schedule 05.04.2012SERIES_ID
как первичный ключ вSERIES
, но проверили ли вы, что это действительно так? Многие люди путают первичные ключи и столбцы идентификаторов - это две разные концепции. Если возможно, позволяет ли используемое вами приложение-менеджер создавать сценарии для существующих объектов? Если это так, было бы полезно добавить фактические определения таблиц, а не ваши псевдоопределения. - person Damien_The_Unbeliever   schedule 05.04.2012