Отношение таблицы для подтипов

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

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

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

Ответ 1

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

  • Таблица SupportSystem содержит столбцы, общие для всех систем поддержки.
  • Email, Билеты, Телефон и LiveChat имеют столбцы, специфичные для каждого из них.
  • Основной ключ в таблице подтипов также является внешним ключом в таблице супертипа.

supportystem_model_01

Ответ 2

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

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

Ответ 3

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

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

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

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