Как создать внешний ключ, ссылающийся на один столбец в составном первичном ключе - PullRequest
3 голосов
/ 16 марта 2011

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

В каталоге

есть следующие столбцы

DN
PID
PURL
Desc

где два столбца DN, PID являются частью составного первичного ключа для этой таблицы.

CatalogIndex имеет следующие столбцы

PID
PItem
PVal

PID и PItem являются частью составного первичного ключа для таблицы CatalogIndex.

Я хочу добавить внешний ключ в CatalogIndex для столбца PID, который ссылается на PID в таблице каталога.

Я использую SQL Server 2008

Спасибо

Ответы [ 2 ]

7 голосов
/ 16 марта 2011

Вы не можете ссылаться только на части составного первичного ключа (один из многих недостатков составного PK - становится очень грязно ссылаться на них).

Вам нужно сослаться на ключ, весь ключ и ничего кроме ключа (так вам поможет Кодд :-)).

Единственным другим вариантом будет создание нового UNIQUE INDEX для тех столбцов, на которые вы хотите сослаться (если они действительно уникальны), а затем использовать этот уникальный индекс для ссылки на это подмножество столбцов.

0 голосов
/ 16 марта 2011

Может потребоваться более нормализованная схема с отдельной таблицей, в которой есть столбец PK на PID. Ваш запрос - запах, который указывает на несовершенный дизайн базы данных.

...