子类型的表关系

时间:2010-02-23 02:08:23

标签: mysql database-design

我有一个名为“网站”的父表,其中包含有关网站的记录。我有一个名为“SupportSystem”的子表,其中包含有关不同类型的支持系统的记录,例如电子邮件,电话,票务,实时聊天等。有一个中间表'Website_SupportSystem'以多种关系连接这些表。

如果网站的支持系统是票务,我也想记录软件平台.e.g。 WHMCS。我的直觉是创建一个名为SupportPlatform的新查找表,并将其与现有的连接表'Website_SupportSystem'相关联,并将数据存储在那里。但是,SupportSystem和SupportPlatform之间没有任何关系。如果我涉及那些,那么我最终得到一个循环引用。

你能看出我做错了什么吗?对这些数据建模的最佳方法是什么?

3 个答案:

答案 0 :(得分:2)

您可以使用超类型/子类型关系,如图所示。

  • SupportSystem 表包含所有支持系统通用的列。
  • 电子邮件票证电话 LiveChat 表格中都有特定于每个列的列。
  • 子类型表中的主键也是超类型表的外键。

supportsystem_model_01

答案 1 :(得分:1)

我会在“SupportSystem”表中添加一个新列'SupportPlatformId',该表查找“SupportPlatform”表,因为“SupportSystem”到“SupportPlatform”可能是一对一或多对一。< / p>

因此:网站 - &gt; (通过Website_SupportSystem)SupportSystem - &gt;载体 -

答案 2 :(得分:0)

有关支持平台的数据应存储在SupportPlatform表中。

您可以将第三个外键(即SupportPlatfromID)添加到Website_SupportSystem表。如果这样做,您的中间表现在会记录三元关系,即多对多的关系。如果这反映了现实,那就这样吧。

如果要关联SupportSystems和SupportPlatforms,只需将中间表用作连接中的中间表。您甚至可以通过中间表进行三向连接以加入所有三个实体。

另一种方法是使用一对外键创建另一个中间表SupportPlatform_SupportSystem,即SupportSystemID和SupportPlatformID。如果这更好地反映了现实,那就这样吧。然后,如果需要,您可以将它们与五个表连接一起加入。