2010-02-23 62 views
1

我有一個名爲「網站」的父表,它保存關於網站的記錄。我有一個名爲'SupportSystem'的子表,它保存關於不同類型的支持系統的記錄,例如電子郵件,電話,票務,實時聊天等。有一箇中間表'Website_SupportSystem',它以許多關係連接這些表。子類型的表關係

如果網站的支持系統是票務,我也想記錄軟件平臺。 WHMCS。我的直覺是創建一個名爲SupportPlatform的新查找表,並將其與現有連接表'Website_SupportSystem'相關聯並將數據存儲在那裏。但是,SupportSystem和SupportPlatform之間沒有關係。如果我把它們聯繫起來,那麼我最終會得到一個循環引用。

你能看到我在做什麼錯嗎?建立這些數據的最佳方法是什麼?

回答

2

您可以使用超類型/子類型關係,如圖所示。

  • SupportSystem表包含適用於所有支持系統列。
  • 電子郵件票務電話ID登錄表有具體到每一個列。
  • 子類型表中的主鍵也是超類型表的外鍵。

supportsystem_model_01

1

我會在查找「SupportPlatform」表的「SupportSystem」表中添加一個新的'SupportPlatformId'列,因爲從「SupportSystem」到「SupportPlatform」可能是一對一或多對一的。

因此:網站 - >(通過Website_SupportSystem)SupportSystem - >載體 -

0

約的支撐平臺數據應該存儲在載體 - 表

您可以添加第三個外鍵,即SupportPlatfromID,對。 Website_SupportSystem表。如果你這樣做,你的中間表現在記錄一個三元關係離子,這種類型的多對多。如果這反映了現實,那就這樣吧。

如果您想關聯SupportSystems和SupportPlatforms,只需使用中間表作爲聯接中的中間表即可。您甚至可以通過中間表執行三種方式的聯接來加入所有三個實體。

另一種方法是使用一對外鍵創建另一箇中間表SupportPlatform_SupportSystem,即SupportSystemID和SupportPlatformID。如果這能更好地反映現實,那就這樣吧。然後,如果需要的話,您可以連同五個表連接一起加入。