三个以上的实体之间可以建立关系吗



我目前正在为一个数据库绘制实体关系图,其中有一个帐户和那个帐户a,可以是A1、A2、A3、A4、A5等类型。最初,它们都是类型A,并且可以根据用户在验证后的选择转换为A1或A2或A3或A4或A5。

我知道三元关系,但在这里,我有3个以上的实体。我应该如何在6个实体之间创建关系:a、A1、A2、A3、A4、A5?

给我一些想法或提供一些参考。我读了一些文章,但找不到任何线索。谢谢

简而言之

是的,你可以,但不是所有的符号,这对你的需求来说不是一个好主意。

更多论据

这是可能的

E/R建模的发明者Peter Pin Shan Chen在他的一篇基础论文中定义,关系可以关联两个以上的实体:

实体是相互关联的。不同类型的实体之间可能存在不同类型的关系。关系集是一组相同类型的关系。例如,描述项目员工分配的PROJLEMP是在EMP和PROJ两个实体集上定义的关系集。关系集也可以在两个以上的实体集上定义。例如,PROJ_SUPP_PART是在三个实体集PROJ、SUPP和PART上定义的关系集。在实体关系图中,一个关系集由一个菱形方框表示,方框中的线连接到相关的实体集。

但并非没有并发症

然而,这有两个实际限制:

  • 并不是所有的符号都支持这一点:陈符号使用了一种特殊的关系符号,并支持这一理论。不幸的是,ERD更常见的Crow’s foot表示法不支持n元关系,因为每个关系都由一条只有两端的线表示
  • 在你的案例中,这是模糊的:Chen符号允许区分对关系的完全(必须)或部分(可以)参与的实体。不幸的是,当一段关系中有多个部分参与时,这就变得模棱两可了。此外,没有办法说A只与A1…A5中的一个有关系,而不是同时与几个有关系

一个更简单的解决方案

一个更简单的解决方案是将所有公共属性放入A中,并在A1.A5中只保留附加属性。然后,你会将A和An之间的关系表示为一个弱关系,An部分参与。

优点是你可以用每一种符号来表示它,而且它读起来简单明了。这不会阻止多个关系,所以你必须添加一条评论来澄清。

复杂的解决方案

另一种方法是寻求EERD表示法,并意识到A1.An是A的专业化。你可以用IsA关系来表示这一点。优点是它忠于你的设计,并清楚地解释了你在叙述中的意思。

然而,有几个不便之处:

  • 并非所有建模工具都支持EERD
  • EERD不是标准化的,事实上有几种变体。一个更稳健的选择是选择标准化的UML类图,并明确支持这里公开的不同解决方案
  • 最后,RDBMS不支持IsA。因此,您的概念模型很好,但仍然必须使用典型的三种模式(单表、类表和具体类表)之一将其映射到模型之外的数据库表