Связи таблицы словаря (MS SQL 2005) - PullRequest
0 голосов
/ 30 июня 2009

У меня есть таблица с именем 'Словарь' со следующими столбцами:

  • ID bigint
  • ТИП varchar (200)
  • ПУНКТ varchar (200)

Таблица используется различными таблицами как простой словарь / справочник.
Например, он хранит страны, названия, списки бизнес-типов.

TYPE столбец содержит информацию о типе словаря, ITEM - значение строки словаря.

Все работает хорошо, но У меня проблема с установкой отношений между таблицей словаря и таблицами foreigin.
Когда я использую «Отношение внешнего ключа», я не могу сделать так, чтобы оно зависело от столбца «ТИП».

(Обратите внимание, что тот же элемент с тем же типом - например, «страны» могут быть связаны с несколькими таблицами, когда элемент с другим типом может быть связан с другими)

В настоящее время я использую USP для управления этим, но я бы хотел перейти на стандартный механизм отношений.
Любой совет, как получить это?

Ответы [ 3 ]

3 голосов
/ 30 июня 2009

Мне кажется, вы могли бы рассмотреть альтернативный дизайн

Dictionary table
ID (pk)
DICTIONARY_TYPE_ID (fk to dictionaryType) 
ITEM

DictionaryType table
ID (pk)
DESCRIPTION

, а затем создайте ссылки на таблицу ID из DictionaryType в местах, где в данный момент вы хотите сослаться на поле Type из исходного дизайна

0 голосов
/ 30 июня 2009

то, что у вас есть, это дизайн EAV db, который плох по ряду причин, одна из которых - ваша проблема. для этого нет реального решения. вы можете попробовать использовать sql_variant в качестве типа столбца для элемента и попытаться установить связь PK-FK с этим.

есть еще один способ сделать это с типом данных xml и схемами, как я описываю здесь . однако вам придется проверить это, чтобы понять, относится ли это к вашей проблеме.

0 голосов
/ 30 июня 2009

Исходя из контекста вопроса, я предполагаю, что вам нужно сделать одну из двух вещей:

  • Сделайте ваш Type столбец первичным ключом
  • или внешние ключи зависят от поля ID.

Внешние ключи должны ссылаться на первичный ключ, и похоже, что ваш столбец Type не является PK.

...