Мне трудно понять, приемлем ли следующий шаблон проектирования. У меня есть следующие требования (и некоторые другие) для реляционной модели:
1) Он должен иметь возможность представлять приложения (такие как AppA
, AppB
, AppC
), каждое со своим собственным набором атрибутов.
2) Каждое приложение может обмениваться данными через различные каналы, такие как Internet
(электронная почта, Twitter, Facebook), Phone
(SMS, MMS и т. д.), так что между программами и каналами существует отношение "многие ко многим".
3) Существует набор предопределенных идентификаторов (адресов, номеров телефонов, учетных записей), которые могут совместно использоваться многими программами, так что, опять же, между программами и идентификаторами существует отношение «многие ко многим».
4) Один и тот же идентификатор может отправлять несколько типов сообщений, как и программы (опять же, многие ко многим), но мне нужно иметь возможность ограничивать использование идентификаторов для типа связи для каждого приложения.
По сути, я создал четыре таблицы, Program
, Channel
, Ident
и CommunicationType
, для хранения информации о каждой из них, и вместо создания соединительных таблиц для (Program, Channel)
, (Program, Identifier)
и т. д., что только усложнило бы дизайн, я создал единая таблица, состоящая из первичных ключей этих четырех таблиц с уникальным ограничением на (Program, Channel, Ident, CommunicationType)
. Теперь каждая запись этой таблицы связана с данным сообщением.
Конечно, это решает мою проблему довольно простым способом, но теперь я задаюсь вопросом, приемлемо ли это вообще, если это противоречит принципам нормализации. Кто-нибудь может дать мне мнение?