Внешний ключ SQL Server для одной из нескольких таблиц - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть таблица отношений / связей, которая предназначена для хранения отношений с несколькими базовыми таблицами.то есть у нас есть общая идея Tags, которую можно применить к нескольким различным объектам, скажем, Company, Building и Customer.Каждый из этих объектов имеет уникальный столбец Id, который является идентификатором col.Я логически назначил 3 базовым объектам значение перечисления, поэтому Company равно 1, Building 2, а Customer - 3.

Что я сделал, так это обобщенно связал теги на основе логического составного ключа типа сущности и идентификатора сущности.

EntityType   EntityId   TagId
-----------------------------
     1          99       22

Я хочу применить это, если тип сущности равен 1, представляющий запись компании, что в таблице компании есть запись с таким идентификатором (99, в приведенном выше примере).Конечно, я не могу добавить типичный внешний ключ в столбец Id таблицы компании, потому что не все записи таблицы ссылок ссылаются на записи компании.Мне нужно что-то, что проверяет правильную базовую таблицу на основе значения EntityType.

Я искал, но я не могу найти никаких примеров для этого, хотя я должен верить, что это не редкость.ТИА.

1 Ответ

0 голосов
/ 23 сентября 2019

Если вы хотите, чтобы все ваши [Tags] были в одной таблице, и есть вероятность, что вы будете использовать один и тот же тег для более чем одной исходной таблицы, лучшим решением будут четыре таблицы - [Tags], [CustomerTags], [CompanyTags] и [BuildingTags].Три таблицы будут содержать ссылки на записи.Например, `[CustomerTags] может выглядеть следующим образом:

CREATE TABLE [CustomerTags] (
    TagID int not null,
    CustomerId int not null
)

Индексы для каждого идентификатора с другим идентификатором, включенным в индекс.Две другие таблицы будут выглядеть одинаково.Это устраняет слой сложной для работы логики и значительно упрощает ее кодирование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...