2010-02-23 6 views
1

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

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

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

ответ

2

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

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

supportsystem_model_01

1

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

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

0

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

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

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

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