首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >子类型的表关系

子类型的表关系
EN

Stack Overflow用户
提问于 2010-02-23 10:08:23
回答 3查看 2K关注 0票数 1

我有一个名为'Website‘的父表,它保存有关网站的记录。我有一个名为'SupportSystem‘的子表,它保存了不同类型的支持系统的记录,如电子邮件、电话、票务、实时聊天等。还有一个中间表'Website_SupportSystem’,它以多对多的关系连接这些表。

如果网站的SupportSystem正在售票,我还想记录软件平台.e.g。WHMCS。我的直觉是创建一个名为SupportPlatform的新查找表,并将其与现有的连接表'Website_SupportSystem‘相关联,并将数据存储在那里。然而,SupportSystem和SupportPlatform之间就没有关系了。如果我将它们关联起来,那么我最终会得到一个循环引用。

你能看到我做错了什么吗?对此数据建模的最佳方式是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-25 10:27:18

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

  • SupportSystem表包含所有support systems.
  • EmailTicketingPhoneLiveChat表共有的列。子类型表中的
  • 主键也是超类型表的外键。

票数 2
EN

Stack Overflow用户

发布于 2010-02-23 10:15:30

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

因此: Website -> (通过Website_SupportSystem) SupportSystem -> SupportPlatform

票数 1
EN

Stack Overflow用户

发布于 2010-02-23 17:57:50

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

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

如果您希望将SupportSystems和SupportPlatforms关联起来,只需在连接中使用中间表作为中间表。您甚至可以通过中间表执行三向连接来连接所有三个实体。

另一种方法是创建另一个中间表SupportPlatform_SupportSystem,其中包含一对外键,即SupportSystemID和SupportPlatformID。如果这能更好地反映现实,那就这样吧。然后,如果需要,您可以使用五个表连接将所有这些连接在一起。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2315692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档