ER图中的一对多关系

25

我试图在 ER 图中展示以下内容:

There are instructors and courses, a course is taught by only one instructor
whereas an instructor can give many courses.

输入图像描述

输入图像描述

我的问题是,这两个图之间有什么区别?换句话说,我们把哪一条线变成箭头是不重要的吗?或者说,唯一重要的是箭头的方向?

此外,如果我们考虑映射的基数,它是一对多还是多对一?如果我们从课程的角度来看,那么它就是多对一;但如果我们从教师的角度来看,那么它就是一对多。我们如何决定这一点? 谢谢。

4个回答

48
在ER图中,当表示关系时不使用箭头。一些教师会在想要确定基数时使用此箭头,但这只是为了得到基数(1:1、1:M和N:M)。
我已经附上了Chen符号和Crow符号的ER图,你可以选择其中任意一个。

ER Digram

决定关系的基数是一个实际场景,没有硬性规则来获得它。你需要从关系的一侧开始,取一个元组(实例),看另一个实体有多少个元组参与了这个关系。然后反过来做。然后你就知道每个实体对关系的参与元组数。当你决定基数时,请考虑数学中的集合理论和函数(即教师集合、课程集合和教授关系类型),这很容易,但如果你不是数学背景,就想想实际场景。
例如:
a)对于1个教师,他或她可以教授多门(M)课程
b)对于1门课程,只有1个教师
因此,在教师方面,a)和b)始终为1,在课程方面,a)和b)为M和1,因此教师:课程的基数为1:M。

但是如果我在两个实体之间有一个钻石属性,这样做是否正确? - QWERTY
@DeniseTan 是的,这是完全可能的。多对多关系可以通过一个连接表来规范化为两个一对多关系。这将被表示为一个抽象模型,该模型还可以包含属性(例如时间戳)。例如,在SO中,问题和标签之间存在多对多关系。问题的标签可以由question_tags关系表示。此关系可能具有inserted_at字段,表示标签分配的时间戳。 - Buğra Ekuklu

2
我认为另一个答案并不完全正确。应该使用箭头,并使用给每个方向赋予有意义名称的符号。在这种情况下,一个方向是“教授”,另一个方向是“被教授”。可以在名称旁边使用箭头或将名称放置在其所指的实体附近。您可以使用一条线(带有两个箭头)或两条线(每条线带有一个箭头)。
我还建议基数只是一种约束类型,符号应反映出来。例如,关系的两个名称可以是“教授(多个)”和“被教授(恰好一个)”。重点是要明确和清晰地说明您的约束条件。
最好明确并清楚地说明您的约束条件。

0
考虑一个“员工”实体集和“部门”实体集,它们之间有一个关系集作为“管理”。 员工-------------管理--------------------部门 (实体集) (关系集) (实体集) 一对多的关系意味着员工集合中的一个实体可以与部门实体集中的多个实体相关联,但是,部门集合中的一个实体最多只能与员工实体集中的一个实体相关联。 这意味着如果员工和部门实体集之间存在一对多的关系,则每个员工可以管理多个部门,同时每个部门最多由一个雇主管理。

0

两者的基数完全相反。

简洁的直线意味着许多。

箭头表示一个。

如果我们认为两者具有相同的基数。

那么,多对多应该按照第二个约定表示(请假设关系集为菱形,实体集为矩形)

   INSTRUCTOR <---- TEACHES -----> COURSE 

这实际上没有任何意义。

如果我们考虑两者的相反基数。

那么,多对多应该按照以下第二个约定表示(请假设关系集为菱形,实体集为矩形)

  INSTRUCTOR ----- TEACHES ------ COURSE

没有明确的箭头通常被认为是多对多关系。因此,只有在考虑到两个相反方向时才是正确的。


有任何支持你的答案的来源吗? - momo

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