数据库:ER图

目录


这个学期上数据库课,于是想做一些笔记,以备期末复习。首先是如何画数据库的ER图。

实体集

实体是客观世界的对象,实体集就是一类相似实体的集合。实体集用矩形表示,名称为名词复数且首字母大写。
实体集中的实体有相同的属性。属性用椭圆表示,名称为名词单数。
每个实体集都可以选取一个或多个属性作为主码,主码可以唯一确定一个实体。主码的属性用下划线标出。
entity

联系集

联系是两个或多个实体之间的一种关联,联系集就是一类相似联系的集合。联系集用菱形表示,名称为动词且首字母大写。
联系集也可以有描述性属性,同样用椭圆表示,但联系必须能够用参与它的实体的集合唯一表示。
relation

码约束

若一个实体最多出现在一个联系中,则形成码约束,这样的联系集也称为“一对多”,其中“多”指的是被约束的实体集。码约束用箭头来表示。
keyConstraint

参与约束

若一个实体集中的实体全部参与联系,则形成参与约束,这样的实体集也称为“完全的”。参与约束用粗线表示。
participationConstraint

弱实体

若一个实体集没有主码,但可以与其它实体集的主码结合形成唯一标识,则为弱实体集,与其结合的实体集为识别属主集。
弱实体集中作为唯一标识的属性为部分码,用下划虚线标出。
为了唯一标识每个弱实体,识别属主集和关联弱实体集必须参与一个“一对多”联系集,即识别联系集,弱实体集在识别联系集中必须是完全参与的。
weakEntity

类层次

可以对一个实体集分类形成ISA结构,即每个子类都具有超类的属性和各自的属性。ISA结构可以指定两种约束:Overlap 和 Covering。
Overlap约束指的是存在一个实体属于不同子类,即子类集合的交集可以不为空集。默认不存在Overlap约束,即子类集合的交集必须为空集。
Covering约束指的是不存在一个实体属于超类但不属于子类,即子类集合的并集必须为全集。默认不存在Covering约束,即子类集合的并集可以不为全集。
hierarchy

聚合与三元联系

当一个联系集关联三个实体集时,可以选择聚合或三元联系。
三元联系指的是用一个联系集关联三个实体集。
relation3
聚合指的是用一个联系集关联两个实体集,再用另一个联系集关联第三个实体集和第一个联系集。
aggregation
一开始我总觉得三元联系和聚合差不多,甚至没必要区分,因为根据三元联系实例总能构造三元联系和聚合,虽然有时候其中一种表达更准确,但有时候确实没有哪个显得更好用。
不过,当实体集加上码约束后情况就不一样了。假设有三个实体集ABC,构造聚合,R1联系AB,R2联系C和R1,然后对R2联系的R1加上码约束,表示AB实体的每一个R1联系最多出现在一个R2联系中。而三元联系无法表示这种情况,即使对A和B都加上码约束,得到的联系也不完全相同,比如a1-b1-c和a1-b2-c可以同时属于一个聚合实例中,却不能同时属于一个三元联系中。

总结

设计ER图的步骤:首先考虑有哪些实体集和联系集以及对应的属性,然后再加上码约束,最后适当采用特殊结构保证描述准确。

参考资料

Raghu Ramakrishnan, Johannes Gehrke. Database Management Systems (Third Edition)[M]. 北京:清华大学出版社, 2003.