7.5 实体-联系图
7.5.1 基本结构
7.5.2 映射基数
箭头线段形式
小结
l..h表示形式
7.5.3 复杂的属性
7.5.4 角色
7.5.5 非二元的联系集
7.5.6 弱实体集
弱实体集
标识性联系
E-R图中弱实体集和强实体集的区别
7.5.7 大学的E-R图
7.5 实体-联系图
1.3.3节曾经简要地介绍过,E-R图(E-R diagram)可以图形化表示数据库的全局逻辑结构。E-R图既简单又清晰,这些是致使E-R模型广泛使用的重要性质。
7.5.1 基本结构
E-R图包括如下几个主要构件:
- 分成两部分的**
矩形代表实体集**。本书中有阴影的第一部分包含实体集的名字,第二部分包含实体集中所有属性的名字。 - 菱形代表联系集。
- 未分割的矩形代表联系集的属性。构成主码的属性以
下划线标明。 线段将实体集连接到联系集。虚线将联系集属性连接到联系集。双线显示实体在联系集中的参与度。双菱形代表连接到弱实体集的标志性联系集(我们将在7.5.6节讲述标志性联系集和弱实体
考虑图7-7中的ER图,它由通过二元联系集advisor关联的两个实体集instructor和student组成。同instructor相关联的属性为ID、name和salary。同student相关联的属性为ID、name和tot_cred.。如图7-7所示,实体集的属性中那些组成主码的属性以下划线标明。
如果一个联系集有关联的属性,那么我们将这些属性放入一个矩形中,并且用虚线将该矩形与代表联系集的菱形连接起来。例如,在图7-8中,我们有描述性属性dame附带到联系集 advisor上,表示教师成为导师的日期。
7.5.2 映射基数
箭头线段形式
实体集instructor和student之间的联系集advisor可以是一对一、一对多、多对一或多对多的。为了区别这些类型,我们在所讨论的联系集和实体集之间画一个箭头(→)或一条线段(一),如下所示。
一对一:我们从联系集 advisor向实体集 instructor和 student各画一个箭头(见图7-9a)。这表示一名教师可以指导最多一名学生,并且一名学生可以有最多一位导师。
一对多:我们从联系集 advisor画一个箭头到实体集instructor,以及一条线段到实体集 student(见图7-9b)这表示一名教师可以指导多名学生,但一名学生可以有至多一位导师。
多对一:我们从联系集advisor画一条线段到实体集instructor,以及一个箭头到实体集student。这表示一名教师可以指导至多一名学生,但一名学生可以有多位导师。
多对多:我们从联系集advisor向实体集instructor和student各画一条线段(见图7-9c)。这表示一名教师可以指导多名学生,并且一名学生可以有多位导师。
小结
箭头表示一线段表示多
l..h表示形式
ER图还提供了一种描述每个实体参与联系集中的联系的次数的更复杂的约束的方法。实体集和二元联系集之间的一条边可以有一个关联的最大和最小的映射基数,用l..h的形式表示,其中
l表示最小的映射基数,- 而
h表示最大的映射基数。 - 最小值
l为1表示这个实体集在该联系集中全部参与,即实体集中的每个实体在联系集中的至少一个联系中出现。 - 最大值
h为1表示这个实体参与至多一个联系,而最大值为*代表没有限制。
例如,考虑图7-10:
在advisor和student之间的边有1..1的基数约束,意味着基数的最小值和最大值都是1,也就是,每个学生必须有且仅有一个导师。
从advisor到instructor边上的约束0..*说明教师可以有零个或多个学生。因此, advisor联系是从instructor到student的一对多联系,更进一步地讲, student在advisor联系中的参与是全部的,表示一个学生必须有一个导师。
很容易将左侧边上的0..*曲解为联系advisor是从instructor到student多对一的,而这正好和正确的解释相反。
图7-10中的E-R图的另一种画法是在基数约束的位置画一条从student到advisor的双线,以及一个从advisor到instructor的箭头。这种画法可以强制实施同图7-10中所示约束完全一样的约束。
7.5.3 复杂的属性

图7-11说明了怎样在E-R图中表示复合属性。这里一个具有子属性first_name、 middle_initial和last_name的复合属性name代替了instructor的简单属性name。再例如,假定我们给实体集instructor增加个地址。地址可以定义为具有属性street、city、sate和a_code的复合属性address属性street本身也是一个复合属性,其子属性为street_number、 street_name和apartment_number。
在图7-11还给出了一个由”{phone_number}“表示的多值属性phone_number和一个由”{age()}“表示的派生属性age。
7.5.4 角色
在E-R图中,我们通过在菱形和矩形之间的连线上进行标注来表示角色。图7-12给出了course实体集和prereq联系集之间的角色标识course id和prereq_id。
7.5.5 非二元的联系集
非二元的联系集也可以在E-R图中简单地表示。图7-13包含三个实体集instructor、 student和project,它们通过联系集proi_ guide相关联。
在非二元的联系集中,我们可以表示某些类型的多对一联系。假设一个student在每个项目上最多只能有一位导师。这种约束可用从proj_guide的边指向instructor的箭头来表示。
省略部分内容….
7.5.6 弱实体集
考虑一个section实体,它由课程编号、学期、学年以及开课编号唯一标识。显然,开课实体和课程实体相关联。假定我们在实体集section和course之间创建了一个联系集sec_course。
现在,发现sec_course中的信息是冗余的,由于section已有属性course_id,它标识该开课所关联的课程。消除这种冗余的一个方法是删除联系sec_course;然而,这么做使得section和course之间的联系隐含于一个属性中,这并不是我们想要的。
消除这种冗余的另一个方法是**在实体section中不保存属性course_id,而只保存剩下的属性sec_id,year以及semester**。然而,这样的话实体集section就没有足够的属性唯一标识一个指定的section实体;即使每个section实体都是唯一的,不同课程的开课也可能会有相同的sec_id、year以及semester.。为解决这个问题,我们将联系sec_course视为一个特殊的联系,它给唯一标识section实体提供额外信息,即course_id.
弱实体集
- 没有足够的属性以形成
主码的实体集称作弱实体集(weak entity set)。 - 有主码的实体集称作强实体集(
strong entity set)。
弱实体集必须与另一个称作标识( identifying)或属主实体集(owner entity set)的实体集关联才能有意义。
每个弱实体必须和一个标识实体关联;也就是说,弱实体集存在依赖(existence dependent)于标识实体集。
我们称标识实体集拥有(own)它所标识的弱实体集。
标识性联系
将弱实体集与其标识实体集相联的联系称为标识性联系( identifying relationship)
标识性联系是从弱实体集到标识实体集多对一的,并且弱实体集在联系中的参与是全部的。标识性联系集不应该有任何描述性属性,因为这种属性中的任意一个都可以与弱实体集相关联。
在我们的例子中, section的标识实体集是course,将section实体和它们对应的course实体关联在起的sec_course是标识性联系。
虽然弱实体集没有主码,但是我们仍需要区分依赖于特定强实体集的弱实体集中的实体的方法。弱实体集的分辨符(discriminator)是使得我们进行这种区分的属性集合。例如,弱实体集section的分辨符由属性sec_id、year以及semester组成,因为对每门课程来说,这个属性集唯一标识了这门课程的移一次开课。弱实体集的分辨符也称为该实体集的部分码
弱实体集的主码由标识实体集的主码加上该弱实体集的分辨符构成。在实体集section的例子中,它的主码是{course_id,sec_id, year, semester},其中course_id是标识实体集course的主码,sec_id,year, semester区分同一门课程的不同section实体。
注意,我们可以选择使sec_id对于大学所提供的所有课程都不重复,在这种情况下实体集section将会具有一个主码。然而,一个section的存在在概念上仍依赖于一个course,通过使之成为弱实体集可以明确这种依赖关系。
E-R图中弱实体集和强实体集的区别
在ER图中,弱实体集和强实体集类似,以矩形表示,但是有两点主要的区别:
- 弱实体集的
分辨符以虚下划线标明,而不是实线。 - 关联
弱实体集和标识性强实体集的联系集以双菱形表示。
在图7-14中,弱实体集section通过联系集sec_course依赖于强实体集course。
该图还表明了如何使用双线表明全部参与;(弱)实体集section在联系sec_course中的参与是全部的,表示每次开课都必须通过sec_course同某门课程关联。最后,从sec_course指向course的箭头表示每次开课与单门课程相关联。
弱实体集可以参与标识性联系以外的其他联系。例如, section实体可以和time_slot实体集参与个联系,以标识开课的时间。
弱实体集可以作为属主与另一个弱实体集参与一个标识性联系。
一个弱实体集也可能与不止一个标识实体集关联。这样,一个特定的弱实体将被一个实体的组合标识,其中每个标识实体集有一个实体在该组合中。
弱实体集的主码可以由标识实体集的主码的并集加上弱实体集的分辨符组成。
在某些情况下,数据库设计者会选择将一个弱实体集表示为属主实体集的一个多值复合属性。
在我们的例子中,这种方法需要实体集course具有一个多值复合属性section。如果弱实体集只参与标识性联系,而且其属性不多,那么在建模时将其表示为一个属性更恰当。相反地,如果弱实体集参与到标识性联系以外的联系中,或者其属性较多,则建模时将其表示为弱实体集更恰当。很明显, section不符合建模成多值复合属性的要求,而将其建模为弱实体集更恰当。
7.5.7 大学的E-R图
图7-15展示了本书迄今所使用的大学所对应的E-R图。除了增加了若干约束,以及section为弱实体以外,该ER图与我们在74节中看到的大学E-R模型的文字性描述等价。
在我们的大学数据库中,我们限制每名教师必须有且仅有一个相关联的系。因此,如图7-15所示,在instructor和inst_dept之间有一条双线,表示instructor在inst_dept中全部参与;即每名教师必须和一个系相关联。另外,存在一个从inst_dept到department的箭头,表示每个教师可以有至多一个相关联的系。