Отношение таблицы для подтипов
У меня есть родительская таблица под названием "Веб-сайт", в которой хранятся записи о веб-сайтах. У меня есть дочерняя таблица под названием "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. Если это лучше отражает реальность, пусть будет так. Тогда вы можете присоединиться к нему вместе с пятью табличными соединениями, если это необходимо.