7.3.1 概念结构设计

7.3.1 概念结构设计

完成需求分析后,数据库设计者需将现实世界中存在的具体要求抽象成信息结构的表达方式,以方便选择具体的DBMS进行实现。这一转换过程称为概念结构设计。描述概念结构的常用工具是E-R模型,有关E-R模型的概念已经在第2章介绍过,本章在介绍概念结构设计时也采用E-R模型。

采用E-R模型进行概念结构设计可分为3步:

(1)设计局部E-R图

包括确定局部应用的范围、定义实体、属性及属性间的联系。设计局部E-R图的关键就是正确划分实体和属性。实体和属性在形式上并没有可以明显区分的界限,通常是按照现实世界中事物的自然划分来定义实体和属性。一般来说,确定实体与属性的原则如下:

能作为属性的尽量作为属性而不要划为实体;

作为属性的数据元素与所描述的实体之间的联系只能是1∶n的联系;

作为属性的数据项不能再用其他属性加以描述,也不能与其他实体或属性发生联系。对现实世界中的事物进行数据抽象,得到实体和属性。这里用到的数据抽象技术有两种,即分类和聚类。

①分类。分类定义某一类概念作为现实世界中的一组对象的类型,将一组具有某些共同特征和行为的对象抽象为一个实体。对象和实体之间是“is a member of”(是......一员)的关系。

例如,“张三”是学生,表示张三是学生(实体)中的一员,这些学生具有相同的特性和行为。

②聚集。聚集定义某一类型的组成成分,将对象类型的组成成分抽象为实体的属性。组成成分与对象类型之间是“is a part of”(是......的一部分)的关系。

分类和聚集的例子如图7-4所示。

图7-4 分类和聚集示例

在数据库实际设计过程中,实体和属性是相对而言的,需要根据实际情况进行调整,一个调整的基本原则是:实体具有描述信息,而属性没有,即属性是不可再分的数据项,不能包含其他属性。例如学生是一个实体,具有属性:学号、姓名、性别、系别等。如果不需要对系做更详细的分析,则“系别”作为一个属性存在就够了,但如果还需要对系别做进一步的分析,比如需要记录或者分析系的教师人数、办公地点、办公电话等,则此时“系别”就要作为一个实体存在。图7-5说明了“系别”升级为实体后E-R图的变化。

图7-5 “系别”作为一个属性或实体的E-R图

(2)设计全局E-R图

将局部E-R图集成为全局E-R图时,可以采用一次将所有的E-R图集成在一起的方式,也可以用逐步集成、进行累加的方式,即一次只集成少量几个E-R图,这样比较容易实现。

在全局E-R图设计过程中,要考虑以下几个方面:

①定义属性的数据类型、长度、精度、非空、默认值、约束规则等,定义触发器、存储过程、视图、角色、同义词、序列等对象信息。

②消除冲突:常见的冲突包含以下3类。

属性冲突:在不同局部E-R图中使用同一属性时采用了不一致的标记。比如,在某些局部应用中将学号定义为字符型,而在其他局部应用中又将其定义为数值型;学生身高有的用“米”为单位,有的用“厘米”为单位等。在实际应用中,属性冲突问题可以通过部门协商解决,也可以根据实际应用需求考虑是否将属性统一或分离表示。

命名冲突:包括同名异义或者异名同义,即不同意义的实体名、联系名或者属性名在不同的局部应用中有相同的名字,或者具有相同意义的实体名、联系名和属性名在不同的局部应用中有不同的名字。如科研项目,在财务部门成为项目,在科研部门称为课题。命名冲突可以考虑协商统一命名方式解决。

结构冲突:结构冲突常见的一种情况是:同一数据项在不同的局部应用中具有不同的抽象,有的地方作为属性,有的地方作为实体。例如,“职称”可能在某一局部应用中作为实体,而在另一局部应用中作为属性。解决这种冲突要根据实际情况而定,是把属性转换为实体还是把实体转换为属性,基本原则是保持数据项的一致。一般情况下,凡能作为属性对待的,尽量作为属性,以简化E-R图。结构冲突的另外一种情况是同一实体在不同的局部E-R图中所包含的属性个数不完全相同,解决的方法是让该实体的属性为个局部E-R图中属性的并集。结构冲突的最后一种情况是两个实体在不同的应用中呈现不同的联系,比如E1和E2两个实体在某个局部应用中可能是一对多联系,而在另一个局部应用总是多对多联系。这种情况,应该根据应用的语义对实体间的联系进行合适的调整。

③消除冗余。冗余包括实体数据的冗余和实体间的冗余联系。冗余数据是指可由基本数据导出得到的数据,冗余联系则是指可由其他关系联合导出的联系。冗余的存在会破坏数据库的完整性,给数据库的管理带来麻烦,以致引起数据不一致等错误。因此,必须消除数据上的冗余和联系上的冗余。然而,冗余也是相对的,有时考虑性能和效率等综合因素,一些冗余有存在的必要。

(3)优化全局E-R图

一个好的全局E-R图除了反映用户功能需求外,还应该满足以下条件:

实体的个数尽可能少。

实体所包含的属性尽可能少。

实体间联系无冗余。

优化的目的是使E-R图满足上述3个条件。要使实体个数尽可能少,可以进行相关实体的合并,一般是把主码相同的实体进行合并,另外也可以考虑将1∶1联系的两个实体合并为一个实体,同时消除冗余属性和冗余联系。