1
数据库原理与应用技术
1.5.4.3 4.4.3 概念模型设计的步骤
4.4.3 概念模型设计的步骤

概念模型设计阶段,一般使用语义数据模型描述概念模型。通常采用E-R模型作为概念模型设计的描述工具进行设计。

1. 设计局部E-R模型

概念模型设计的第一步,是先对应用环境中的数据进行分类、组织,确定实体、实体的属性、实体的标识,以及实体之间的联系类型,得到各个局部E-R模型,即利用数据抽象机制对需求分析阶段收集到的数据进行分类、组织(聚集),形成实体、实体的属性、标识实体的码、确定实体之间的联系类型(1∶1、1∶n、n∶m),设计局部E-R图。

需求分析阶段,已用多层数据流图和数据字典描述了整个系统。设计局部E-R图首先要根据系统的具体情况,在多层数据流图中选择一个适当层次的数据流图(通常是中层数据流图),然后以这一层次的数据流图为源点,以数据字典说明为出发点定义E-R图。数据字典中的“数据结构”、“数据流”和“数据存储”等已是若干属性的有意义的聚合。

设计局部概念模式的过程包含4个基本活动:确定范围、识别实体、定义属性及确定联系。将4个基本活动按一定顺序组织起来就形成了设计过程。典型的设计过程如图4-13所示。随着认识的不断加深,过程将会有反复。例如,在确定联系时,发现漏掉了实体,应该回到第二步。

图4-13 设计局部概念模式的一般过程

1)确定范围

范围就是待设计的局部概念模式要反映的问题域。可以从如下几方面考虑如何确定范围。

(1) 范围划分自然,易于管理。通常可以按部门、业务范围或业务主题来自然划分。

(2) 与其他范围界限清晰,相互影响小。

(3) 范围大小适度。一般而言,范围内的实体型以不超过10个为宜。

2)识别实体

这一步的任务,是在确定的范围内寻找和识别实体,并确定实体的码。识别实体需要对问题域有深入的了解,并能熟练运用前述的3种数据抽象。

如果之前已有系统的数据流图和数据字典,则重点考察数据存储,这是识别实体的基本出发点,因为我们只关心需要在数据库中长期保存的数据对象。

下面是识别实体时的一些启发式规则。

(1) 人员:大多数系统的问题域都涉及各种各样的人员,如学生、教师、教学秘书等。

(2) 组织:在系统中发挥一定作用的组织机构,如院系、学生班集体等。

(3) 物品:需要由系统管理的各种物品。要注意那些无形的事物,如一门课程、教学计划等。

(4) 事件:那些需要在数据库中记录的事件,如学生选修一门课、教师主讲某一门课、登记成绩等。

(5) 地点:与问题域相关的物理地点,如教室、学生宿舍等。

(6) 表格:这里“表格”的概念是广义的,如专业培养计划表、课程表、成绩单、学期成绩分类统计报表、课程主讲资格证书等。要特别注意的是:某些表格是某些事物经过多次映射后的组合产物,要避免简单地、不加分析地将表格抽象成一个实体。实践中,许多人工表格包含了若干实体信息;而有些表格记录的不是原始数据,它们可能是冗余信息。

3)定义属性

属性是描述实体静态特征的一个数据项。属性也是对实体分类的一个根本依据——一个实体集中的所有实体,应该具有相同的属性,即属性的个数、名称、数据类型相同。

针对每一个实体型,提出并回答以下问题,来启发自己从各种角度发现实体的属性。

(1) 按一般常识,这个实体型应该有哪些属性?实体的属性往往是很直观的,按照一般常识,可以知道应该由哪些属性来描述实体。例如,学生的姓名、性别、出生日期等。

(2) 在当前问题域中,这个对象应该有哪些属性?例如,学生的“身高”与教学系统有关吗?可能不需要这个属性。

(3) 实体有哪些需要区别的状态,是否需要增加一个属性来区别这些状态?例如,是否需要增加一个属性来标识学生是否已休学?

(4) 主属性(包含在码中的属性)有哪些?是否需要人为地定义主码?例如,学号、课程代码都是人工主码。

(5) 这个属性是导出属性吗?例如,学生“年龄”可以从“出生日期”导出,年龄不应作为学生的属性;学生当前所处的“年级”(取值为大一,大二,…)也不适合作为属性。

(6) 属性的位置合适吗?低层实体(子实体)中的共有属性应在高层实体(超实体)中定义。

(7) 属性是原子的吗?属性应该是不可再细分的数据项。

4)确定联系

对于识别出的所有实体型,可以进行两两组合,判断任意两个实体型之间是否存在联系。对于存在的联系,还要进一步考虑它们是否是依赖性联系或继承联系。对于m:n联系,若其自身有属性,则将该联系转换成一个关联实体。

两个实体型之间可能存在多种联系,例如,“教师”与“课程”之间存在两种不同的联系:一个教师能讲多门课,这反映的是教师的能力或任教资格;一个教师讲过或正在讲多门课,这反映的是教师的教学工作或教学经历。

实体和属性并没有非常严格的界限,实体与属性是相对而言的。同一事物,在一种应用环境中作为“属性”,在另一种应用环境中就必须作为“实体”。例如,学校中的系,在某种应用环境中,它只是作为“学生”实体的一个属性,表明一个学生属于哪个系;而在另一种环境中,由于需要考虑一个系的系主任、教师人数、学生人数、办公地点等,这时它就需要作为实体了。

需要注意的是,如果一个实体型中出现了多值属性(某个实体在属性上取多个值)或符合多值属性,通常将这个属性转换为一种关系模式。

例如,实体型课程具有课程编号、名称和预备课程三个属性,如图4-14(a)所示。一门课程可能有也可能没有预备课程,可能有一门也可能有多门预备课程,所以,预备课程是一个多值属性。由于预备课程也是实体型课程的实体,因此,可以把预备课程更改为一个联系型,如图4-14(b)所示。

图4-14 多值属性和联系型

例如,一个学生实体有一项奖励属性,由于学生在学校里可能会有多项奖励,每项奖励由奖励日期和奖励名称组成,所以该属性是多值属性。当E-R图转成关系模式时,把该属性处理成一个联系型,名称为拥有,如图4-15所示。

图4-15 多值复合属性和联系型

具体实践中一般有如下两条准则。

(1) 作为属性,不能再有需要描述的性质,即属性必须是不可分的数据项,不能包含其他属性。

(2) 属性不能与其他实体有联系。E-R图中所表示的联系只发生在实体之间。

例如,“学生”由学号、姓名等属性作进一步描述,根据准则(1) ,“学生”只能作为实体,不能作为属性。

例如,在医院中,一个病人只能住在一个病房,病房号可以作为病人实体的一个属性;但如果病房还要与医生实体发生联系,即一个医生负责几个病房的病人的医疗工作,则病房根据准则(2) 应作为一个实体。E-R图如图4-16所示。

图4-16 病人住院局部E-R图

2. 设计全局E-R模型

全局E-R模型设计中,要先对比各个子系统的局部E-R模型,再综合成一个系统的全局E-R模型。设计过程如图4-17所示。

图4-17 全局E-R模型设计过程

设计全局E-R模型包括以下3步。

第一步:视图集成(综合成全局概念模式)确定公共实体类型。视图集成要尽可能合并对应的部分,保留特殊的部分,删除冗余的部分,必要时要对模型进行适当的修改,构造新实体类型。视图集成后,要对整体概念结构进行验证,整体概念结构必须具备一致性,不存在矛盾。整体概念结构要反映单个视图的结构,包括实体及实体之间的联系,整体概念结构还必须满足需求分析阶段确定的所有要求。

第二步:局部E-R模型的合并。

第三步:消除各种冲突。

在局部E-R模型的合并过程中,会产生下列3种冲突。

(1) 属性冲突:分属性域的冲突(如属性值的类型、取值范围、取值集合)和属性值单位(如人的身高有的用米表示,有的用厘米表示)的冲突。例如,有的部门把学号定义为整数,有的部门把学号定义为字符型。不同的部门对学号的编码也不同。又如年龄,某些部门以出生日期形式表示学生的年龄,而有些部门用整数表示职工的年龄。

(2) 命名冲突:分为同名异义冲突和异名同义冲突等两类。同名异义即不同意义对象在不同的局部应用中具有相同的名字。异名同义即同一意义的对象在不同的局部应用中具有不同的名字。例如,本科生和研究生都可以用“学生”实体名,这两个“学生”实体名的含义是不同的,即它们的描述属性各不相同,分别表示不同的实体类型,这是同名异义。又如,学生的“出生日期”与学生的“出生年月”,它们都表示学生的出生时间,用了不同的属性名,这是异名同义。

(3) 结构冲突:同一对象在不同应用中具有不同的抽象。例如,教师在有的应用中是属性,在有的应用中则为实体。同一对象在不同的E-R图中所包含的属性个数和属性排列的顺序不同。相同的实体或联系,在不同的视图中可能有不同的约束条件。例如,对于“选课”联系,本科生和研究生对选课的最少门数和最多门数要求就不一样。

3. 全局E-R模型的优化

全局E-R模型的优化是得到一个满足应用要求的较优的概念设计模型的过程,它主要包括以下3方面的内容。

(1) 实体类型的合并。

(2) 冗余联系的消除。

(3) 冗余属性的消除。