Табличные отношения для подтипов
У меня есть родительская таблица "Веб-сайт", в которой хранятся записи о веб-сайтах. У меня есть дочерняя таблица "SupportSystem", которая содержит записи о различных типах систем поддержки, таких как электронная почта, телефон, продажа билетов, чат в реальном времени и т. Д. Есть промежуточная таблица "Website_SupportSystem", которая объединяет эти таблицы во многих отношениях.
Если система поддержки для веб-сайта отправляет заявку, я также хочу записать программную платформу.eg WHMCS. Мой инстинкт состоит в том, чтобы создать новую справочную таблицу с именем SupportPlatform и связать ее с существующей таблицей соединений 'Website_SupportSystem' и сохранить там данные. Однако тогда нет никакой связи между SupportSystem и SupportPlatform. Если я связываю их, я получаю круговую ссылку.
Вы видите, что я делаю не так? Что было бы лучшим способом для моделирования этих данных?
3 ответа
Вы можете использовать отношения супер-тип / подтип, как показано на диаграмме.
- Таблица SupportSystem содержит столбцы, общие для всех систем поддержки.
- В таблицах " Эл.
- Первичный ключ в таблице подтипов также является внешним ключом таблицы супертипов.
Я бы добавил новый столбец "SupportPlatformId" в таблицу "SupportSystem", которая соответствует таблице "SupportPlatform", потому что "SupportSystem" - "SupportPlatform", вероятно, один к одному или многие к одному.
Следовательно: Сайт -> (через Website_SupportSystem) SupportSystem -> SupportPlatform
Данные о платформе поддержки должны храниться в таблице Support Platform.
Вы можете добавить третий внешний ключ, а именно SupportPlatfromID, в таблицу Website_SupportSystem. Если вы сделаете это, ваша промежуточная таблица теперь записывает троичные отношения, типа "многие ко многим ко многим". Если это отражает реальность, то пусть будет так.
Если вы хотите связать SupportSystems и SupportPlatforms, просто используйте промежуточную таблицу в качестве промежуточной таблицы в объединениях. Вы можете даже сделать трехстороннее соединение, чтобы объединить все три сущности через промежуточную таблицу.
Альтернативой может быть создание другой промежуточной таблицы SupportPlatform_SupportSystem с парой внешних ключей, а именно SupportSystemID и SupportPlatformID. Если это лучше отражает реальность, пусть будет так. Затем вы можете объединить все это вместе с пятью столами, если это будет необходимо.