ER图:三元关系 - 如何正确阅读?

23

我不太确定如何在ER图中阅读三元关系。假设这是给出的三元关系:

账户-用户-项目三元关系

需要手指两个实体集,并以此来阅读它。

手指账户和用户: 一个账户和一个用户可以与M个项目相关联。

手指账户和项目: 一个账户和一个项目可以与M个用户相关联。

手指项目和用户: 一个项目和一个用户可以与1个账户相关联。

这些配对关系是否总是一对一的关系,或者可能有多少对?

3个回答

57

回答有点迟了,但可能对未来的读者有所帮助。

假设三元关系有参与实体A、B和C(对于度数>3的情况,它会变得非常复杂)。

阅读这个关系的方法是始终将3个参与实体中的2个隔离出来,并查看它们如何相对第三个实体。并且需要对所有可能的配对进行此操作。

更具体地说:每次配对的2个实体都需要被视为“之一”,并且要回答的问题是“多少”第三个实体可以对应于此配对。

抽象例子

"一个A和一个B可以{拥有/与/属于}X?C的?"。我们需要根据我们的业务模型来回答X?应该是1还是N。这是要分配给连接三元关系与实体C之间的边上的三元关系的基数。

必须为所有可能的组合(不是排列,因为配对顺序无关紧要)重新制定此短语。因此,为了回答问题有多少对?,简单的数学规定在2个事物的组中组合3个事物的可能方式是:

3!/(2!*(3-2)!)= 3

因此,使用我们的业务模型回答所有可能的问题短语为:

  • A和B中的一个和C中的一个可以{拥有/与/属于}C的? X?
  • A和C中的一个和B中的一个可以{拥有/与/属于}B的? Y?
  • B和C中的一个和A中的一个可以{拥有/与/属于}A的? Z?

具体例子

我借用了我在网上找到的这张图片。

在此输入图片描述

这张图反映了我们业务模式的现实情况:

  • 1名医生为1位特定患者记录M次治疗
  • 1名医生为N位患者记录1种特定治疗
  • 1位患者接受1名医生提供的1种特定治疗

因此,三元关系记录(log)是参与实体治疗-患者-医生(按照该顺序)之间的M-N-1关系。


非常清晰的解释,谢谢。对于那些在m和n之间互换混淆的人来说,它们是相同概念的不同变量名称:对象数量。 - arlyon
在考虑两个人成对时,我们应该考虑那些已经有关联的一对还是任意一对?具体来说,是应该将“一个医生和他治疗过的一个患者”配对,还是“任意一个医生与数据库中的任意一个患者”配对? - Soumya
1
@Soumya 不太重要。我们在抽象地考虑,“一个医生对应一个患者=>他们之间有多少治疗关系?”显然,这适用于治疗患者的医生的情况,因为这种关系连接了两者。但我们想回答的问题是“phys-pat夫妇有多少治疗关系?”(现在才回复,真是晚了! :)) - Thalis K.
@ThalisK。换句话说,您的意思是三元关系的含义不明确? - AngryJohn
1
@AngryJohn 一点也不是。只是需要仔细阅读并正确理解它。将所有可能的配对作为每个配对的一个部分,并查看它们与第三个部分的关系。 - Thalis K.

0

虽然回答有些晚,但可能对未来的读者有所帮助。是的,@user2276094,你说得对。

正如你所提到的,三元关系中的多重性是通过将一个实体(目标实体)与另外两个实体隔离开来设计的,并将目标实体(例如员工)与另外两个实体(例如客户和分支机构)的一个固定对相关联。

因此,您可以将这些关系中的多重性表述为(例如员工在分支机构注册客户):

对于一个固定的员工实例和一个分支机构实例,可能会有客户,也可能没有客户(因为一些员工可能不会注册客户,他们可能参与其他职责)。

对于一个固定的分支机构实例和一个客户实例,必须有且仅有一个员工(因为一个客户只能由一个员工注册一次)。

对于一个固定的员工实例和一个客户实例,必须有且仅有一个(假设客户只能在一个分支机构注册)。


0

很可能这是一个层次结构,意味着有许多账户和许多用户。它也意味着账户小于或等于用户。这意味着更多的用户对应一个账户。我很可能会使用三叉数据结构和字典树。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接