设计概念结构的E-R模型可采用四种方法。
(1) 自顶向下。先定义全局概念结构E-R模型的框架,再逐步细化。如图6.9(a)所示。
(2) 自底向上。先定义各局部应用的概念结构E-R模型,然后将它们集成,得到全局概念结构E-R模型。如图6.9(b)所示。
(3) 逐步扩张。先定义最重要的核心概念E-R模型,然后向外扩充,以滚雪球的方式逐步生成其他概念结构E-R模型。如图6.9(c)所示。
(4) 混合策略。该方法采用自顶向下和自底向上相结合的方法,先自顶向下定义全局框架,再以它为骨架集成自底向上方法中设计的各个局部概念结构。

图9 概念结构设计的方法
其中最常用的方法是自底向上。即自顶向下地进行需求分析,再自底向上地设计概念结构。
2.概念结构设计的步骤
自底向上的设计方法可分为两步,如图6.10所示:
(1) 进行数据抽象,设计局部E-R模型,即设计用户视图。
(2) 集成各局部E-R模型,形成全局E-R模型,即视图的集成。

图10 自底向上方法的设计步骤
3.数据抽象与局部E-R模型设计
概念结构是对现实世界的一种抽象。
所谓抽象是对实际的人、物、事和概念进行人为处理,它抽取人们关心的共同特性,忽略非本质的细节,并把这些特性用各种概念精确地加以描述,这些概念组成了某种模型。
概念结构设计首先要根据需求分析得到的结果(数据流图、数据字典等)对现实世界进行抽象,设计各个局部E-R模型。
(1) E-R方法
E-R方法是“实体-联系方法”(Entity-Relationship Approach)的简称。它是描述现实世界概念结构模型的有效方法。用E-R方法建立的概念结构模型称为E-R模型,或称为E-R图。
E-R图基本成分包含实体型、属性和联系。(在第1章已经介绍过它们的基本概念,这里只给出它们的表示方法。)
①实体型:用矩形框表示,框内标注实体名称。如图6.11(a)所示。
②属性:用椭圆形框表示,框内标注属性名称。如图6.11(b)所示。
③联系:指实体之间的联系,有一对一(1:1),一对多(1:n)或多对多(m :n)三种联系类型。例如系主任领导系,学生属于某一系,学生选修课程,工人生产产品,这里“领导”、“属于”、“选修”、“生产”表示实体间的联系,可以作为联系名称。联系用菱形框表示,框内标注联系名称。如图6.11(c)所示。

图11 E-R图的三种基本成份及其图形的表示方法
现实世界的复杂性导致实体联系的复杂性。表现在E-R图上可以归结为图6.12所示的几种基本形式:
①两个实体之间的联系,如图6.12(a)所示。
②两个以上实体间的联系,如图6.12(b)所示。
③同一实体集内部各实体之间的联系,例如一个部门内的职工有领导与被领导的联系,即某一职工(干部)领导若干名职工,而一个职工(普通员工)仅被另外一个职工直接领导,这就构成了实体内部的一对多的联系。如图6.12(c)所示。
需要注意的是,因为联系本身也是一种实体型,所以联系也可以有属性。如果一个联系具有属性,则这些联系也要用无向边与该联系连接起来。例如,学生选修的课程有相应的成绩。这里的“成绩”既不是学生的属性,也不是课程的属性,只能是学生选修课程的联系的属性。图6.12(b)中“供应数量”是“供应”联系的属性。

图12 实体及其联系图
E-R图的基本思想就是分别用矩形框、椭圆形框和菱形框表示实体、属性和联系,使用无向边将属性与其相应的实体连接起来,并将联系分别和有关实体相连接,注明联系类型。
图6.12为几个E-R图的例子,只给出了实体及其E-R图,省略了实体的属性。
图6.13为一个描述学生与课程联系的完整的E-R图。

图13 学生与课程联系的完整的E-R图
(2) 数据抽象
设计局部E-R模型的关键就是正确划分实体和属性。实体和属性之间在形式上并无可以明显区分的界限,通常是按照现实世界中事物的自然划分来定义实体和属性,将现实世界中的事物进行数据抽象,得到实体和属性。
在系统需求分析阶段,最后得到了多层数据流图、数据字典和系统分析报告。建立局部E-R模型,就是根据系统的具体情况,在多层的数据流图中选择一个适当层次的数据流图,作为设计分E-R图的出发点,让这组图中毎一部分对应一个局部应用。在前面选好的某一层次的数据流图中,每个局部应用都对应了一组数据流图,局部应用所涉及的数据存储在数据字典中。现在就是要将这些数据从数据字典中抽取出来,参照数据流图,确定每个局部应用包含哪些实体,这些实体又包含哪些属性,以及实体之间的联系及其类型。
一般有两种数据抽象:分类和聚集。
①分类(Classification)
分类定义某一类概念作为现实世界中一组对象的类型,将一组具有某些共同特性和行为的对象抽象为一个实体。对象和实体之间是“ is member of”的关系。
例如,在教学管理中,“赵亦”是一名学生,表示“赵亦”是学生中的一员,她具有学生们共同的特性和行为。
②聚集(Aggregation)
聚集定义某一类型的组成成份,将对象类型的组成成份抽象为实体的属性。组成成份与对象类型之间是“ is part of”的关系。
例如,学号、姓名、性别、年龄、系别等可以抽象为学生实体的属性,其中学号是标识学生实体的主键。
(3) 局部E-R模型设计
数据抽象后得到了实体和属性,实际上实体和属性是相对而言的,往往要根据实际情况进行必要的调整。在调整中要遵循两条原则:
①实体具有描述信息,而属性没有。即属性必须是不可分的数据项,不能再由另一些属性组成。
②属性不能与其他实体具有联系,联系只能发生在实体之间。
例如:学生是一个实体,学号、姓名、性别、年龄、系别等是学生实体的属性,系别只表示学生属于哪个系,不涉及系的具体情况,换句话说,没有需要进一步描述的特性,即是不可分的数据项,则根据原则①可以作为学生实体的属性。但如果考虑一个系的系主任、学生人数、教师人数、办公地点等,则系别应看作一个实体。如图6.14所示。

图6.14 系别作为一个属性或实体
又如,“职称”为教师实体的属性,但在涉及住房分配时,由于分房与职称有关,即职称与住房实体之间有联系,则根据原则②,职称应作为一个实体。如图6.15所示。

图15 职称作为一个属性或实体
此外,我们可能会遇到这样的情况,同一数据项,可能由于环境和要求的不同,有时作为属性,有时则作为实体,此时必须根据实际情况而定。一般情况下,凡能作为属性对待的,应尽量作为属性,以简化E-R图的处理。
下面举例说明局部E-R模型设计。
在简单的教务管理系统中,有如下语义约束。
①一个学生可选修多门课程,一门课程可为多个学生选修,因此学生和课程是多对多的联系;
②一个教师可讲授多门课程,一门课程可为多个教师讲授,因此教师和课程也是多对多的联系;
③一个系可有多个教师,一个教师只能属于一个系,因此系和教师是一对多的联系,同样系和学生也是一对多的联系。
根据上述约定,可以得到如图6.16所示的学生选课局部E-R图和如图6.17所示的教师任课局部E-R图。形成局部E-R模型后,应该返回去征求用户意见,以求改进和完善,使之如实地反映现实世界。

图16 学生选课局部E-R图

图17 教师任课局部E-R图
E-R图的优点就是易于被用户理解,便于交流。
4.全局E-R模型设计
局部E-R模型设计完成之后,下一步就是集成各局部E-R模型,形成全局E-R模型,即视图的集成。视图集成的方法有两种:
①多元集成法,一次性将多个局部E-R图合并为一个全局E-R图,如图6.18(a)所示。
②二元集成法,首先集成两个重要的局部视图,以后用累加的方法逐步将一个新的视图集成进来,如图6.18(b)所示。在实际应用中,可以根据系统复杂性选择这两种方案。一般采用逐步集成的方法,如果局部视图比较简单,可以采用多元集成法。一般情况下,采用二元集成法,即每次只综合两个视图,这样可降低难度。无论使用哪一种方法,视图集成均分成两个步骤,如图6.19所示。

图18 局部视图合并成全局视图
a.合并,消除各局部E-R图之间的冲突,生成初步E-R图。
b.优化,消除不必要的冗余,生成基本E-R图。

图19 视图集成
(1) 合并局部E-R图,生成初步E-R图
这个步骤将所有的局部E-R图综合成全局概念结构。
全局概念结构它不仅要支持所有的局部E-R模型,而且必须合理地表示一个完整、一致的数据库概念结构。
由于各个局部应用不同,通常由不同的设计人员进行局部E-R图设计,因此,各局部E-R图不可避免地会有许多不一致的的地方,我们称之为冲突。
合并局部E-R图时并不能简单地将各个E-R图画到一起,而必须消除各个局部E-R图中的不一致,使合并后的全局概念结构不仅支持所有的局部E-R模型,而且必须是一个能为全系统中所有用户共同理解和接受的完整的概念模型。
合并局部E-R图的关键就是合理消除各局部E-R图中的冲突。
E-R图中的冲突有三种:属性冲突、命名冲突和结构冲突。
①属性冲突
属性冲突又分为属性值域冲突和属性的取值单位冲突。
a.属性值域冲突,即属性值的类型、取值范围或取值集合不同。比如学号,有些部门将其定义为数值型,而有些部门将其定义为字符型。又如年龄,有的可能用出生年月表示,有的则用整数表示。
b.属性的取值单位冲突。比如零件的重量,有的以公斤为单位,有的以斤为单位,有的则以克为单位。
属性冲突属于用户业务上的约定,必须与用户协商后解决。
②命名冲突
命名不一致可能发生在实体名、属性名或联系名之间,其中属性的命名冲突更为常见。
一般表现为同名异义或异名同义(实体、属性、联系名)。
a.同名异义,即同一名字的对象在不同的部门中具有不同的意义。
比如,“单位”在某些部门表示为人员所在的部门,而在某些部门可能表示物品的重量、长度等属性。
b.异名同义,即同一意义的对象在不同的部门中具有不同的名称。
比如,对于“房间”这个名称,在教务管理部门中对应着为教室,而在后勤管理部门对应为学生宿舍。
命名冲突的解决方法同属性冲突,需要与各部门协商、讨论后加以解决。
③结构冲突
a.同一对象在不同应用中有不同的抽象,可能为实体,也可能为属性。例如,教师的职称在某一局部应用中被当作实体,而在另一局部应用中被当作属性。
这类冲突在解决时,就是使同一对象在不同应用中具有相同的抽象,或把实体转换为属性,或把属性转换为实体。但都要符合6.3.3中所介绍的准则。
b.同一实体在不同应用中属性组成不同,可能是属性个数或属性次序不同。
解决办法是,合并后实体的属性组成为各局部E-R图中的同名实体属性的并集,然后再适当调整属性的次序。
c.同一联系在不同应用中呈现不同的类型。比如E1与E2在某一应用中可能是一对一联系,而在另一应用中可能是一对多或多对多联系,也可能是在E1、E2、E3三者之间有联系。
这种情况应该根据应用的语义对实体联系的类型进行综合或调整。
下面以教务管理系统中的两个局部E-R图为例,来说明如何消除各局部E-R图之间的冲突,进行局部E-R模型的合并,从而生成初步E-R图。
首先,这两个局部E-R图中存在着命名冲突,学生选课局部E-R图中的实体“系”与教师任课局部E-R图中的实体“单位”,都是指“系”,即所谓的异名同义,合并后统一改为“系”,这样属性“名称”和“单位”即可统一为“系名”。
其次,还存在着结构冲突,实体“系”和实体“课程” 在两个不同应用中的属性组成不同,合并后这两个实体的属性组成为原来局部E-R图中的同名实体属性的并集。解决上述冲突后,合并两个局部E-R图,生成如图6.20所示的初步的全局E-R图。

图20 教务管理系统的初步E-R图
(2) 消除不必要的冗余,生成基本E-R图
所谓冗余,在这里指冗余的数据和实体之间冗余的联系。冗余的数据是指可由基本的数据导出的数据,冗余的联系是由其他的联系导出的联系。在上面消除冲突合并后得到的初步E—R图中,可能存在冗余的数据或冗余的联系。冗余的存在容易破坏数据库的完整性,给数据库的维护增加困难,应该消除。我们把消除了冗余的初步E-R图称为基本E-R图。
通常采用分析的方法消除冗余。数据字典是分析冗余数据的依据,还可以通过数据流图分析出冗余的联系。
如在图6.20所示的初步E-R图中,“课程”实体中的属性“教师号”可由“讲授”这个教师与课程之间的联系导出,而学生的平均成绩可由“选修”联系中的属性“成绩”中计算出来,所以“课程”实体中的 “教师号” 与“学生”实体中的“平均成绩”均属于冗余数据。
另外,“系”和“课程”之间的联系“开课”,可以由“系”和“教师”之间的“属于”联系与“教师”和“课程”之间的“讲授”联系推导出来,所以“开课”属于冗余联系。
这样,图6.20的初步E-R图在消除冗余数据和冗余联系后,便可得到基本的E-R模型,如图6.21所示。

图21 教务管理系统的基本E-R图
最终得到的基本E-R模型是企业的概念模型,它代表了用户的数据要求,是沟通“要求”和“设计”的桥梁。它决定数据库的总体逻辑结构,是成功建立数据库的关键。如果设计不好,就不能充分发挥数据库的功能,无法满足用户的处理要求。
因此,用户和数据库人员必须对这一模型反复讨论,在用户确认这一模型已正确无误的反映了他们的要求后,才能进入下一阶段的设计工作。
