Табличные отношения для подтипов

У меня есть родительская таблица "Веб-сайт", в которой хранятся записи о веб-сайтах. У меня есть дочерняя таблица "SupportSystem", которая содержит записи о различных типах систем поддержки, таких как электронная почта, телефон, продажа билетов, чат в реальном времени и т. Д. Есть промежуточная таблица "Website_SupportSystem", которая объединяет эти таблицы во многих отношениях.

Если система поддержки для веб-сайта отправляет заявку, я также хочу записать программную платформу.eg WHMCS. Мой инстинкт состоит в том, чтобы создать новую справочную таблицу с именем SupportPlatform и связать ее с существующей таблицей соединений 'Website_SupportSystem' и сохранить там данные. Однако тогда нет никакой связи между SupportSystem и SupportPlatform. Если я связываю их, я получаю круговую ссылку.

Вы видите, что я делаю не так? Что было бы лучшим способом для моделирования этих данных?

3 ответа

Решение

Вы можете использовать отношения супер-тип / подтип, как показано на диаграмме.

  • Таблица SupportSystem содержит столбцы, общие для всех систем поддержки.
  • В таблицах " Эл.
  • Первичный ключ в таблице подтипов также является внешним ключом таблицы супертипов.

supportsystem_model_01

Я бы добавил новый столбец "SupportPlatformId" в таблицу "SupportSystem", которая соответствует таблице "SupportPlatform", потому что "SupportSystem" - "SupportPlatform", вероятно, один к одному или многие к одному.

Следовательно: Сайт -> (через Website_SupportSystem) SupportSystem -> SupportPlatform

Данные о платформе поддержки должны храниться в таблице Support Platform.

Вы можете добавить третий внешний ключ, а именно SupportPlatfromID, в таблицу Website_SupportSystem. Если вы сделаете это, ваша промежуточная таблица теперь записывает троичные отношения, типа "многие ко многим ко многим". Если это отражает реальность, то пусть будет так.

Если вы хотите связать SupportSystems и SupportPlatforms, просто используйте промежуточную таблицу в качестве промежуточной таблицы в объединениях. Вы можете даже сделать трехстороннее соединение, чтобы объединить все три сущности через промежуточную таблицу.

Альтернативой может быть создание другой промежуточной таблицы SupportPlatform_SupportSystem с парой внешних ключей, а именно SupportSystemID и SupportPlatformID. Если это лучше отражает реальность, пусть будет так. Затем вы можете объединить все это вместе с пятью столами, если это будет необходимо.

Другие вопросы по тегам