Табличные отношения для подтипов - PullRequest
1 голос
/ 23 февраля 2010

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

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

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

Ответы [ 3 ]

2 голосов
/ 25 февраля 2010

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

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

supportsystem_model_01

1 голос
/ 23 февраля 2010

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

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

0 голосов
/ 23 февраля 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...