首页 理论教育数据库技术与应用教程:概念结构设计

数据库技术与应用教程:概念结构设计

【摘要】:概念结构设计重点在于信息结构的设计,而“处理”则由行为设计来考虑。概念结构设计使用集合概念,抽取现实业务系统的元素及其应用语义关联,最终形成E-R模型。图6—2自顶向下需求分析、自底向上概念结构设计图6—3自底向上的概念结构设计2.采用E-R模型的概念结构设计设计数据库概念结构的最著名、最常用的是E-R模型。数据抽象与局部E-R图设计概念结构是对现实世界的一种抽象。

概念结构设计的重点在于信息结构的设计,它将需求分析得到的用户需求抽象为信息结构,即概念层数据模型,是整个数据库系统设计的关键,独立于逻辑结构设计和数据库管理系统。

1.概念结构设计的特点和策略

概念结构设计的任务是产生反映企业组织信息需求的数据库概念结构,即概念层数据模型。

(1)概念结构的特点

概念结构应具备如下特点。

·有丰富的语义表达能力,能表达用户的各种需求,包括描述现实世界中各种事物和事物与事物之间的联系,能满足用户对数据的处理需求。

·易于交流和理解。概念结构是数据库设计人员和用户之间的主要交流工具,因此必须能通过概念模型和不熟悉计算机的用户交换意见,用户的积极参与是数据库成功的关键。

·易于更改。当应用环境和应用要求发生变化时,能方便地对概念结构进行修改,以反映这些变化。

·易于向各种数据模型转换,易于导出与DBMS有关的逻辑模型。

描述概念结构的一个有力工具是E-R模型。

(2)概念结构设计的策略

概念结构设计的策略主要有如下几种。

·自底向上。先定义每个局部应用的概念结构,然后按一定的规则把它们集成起来,从而得到全局概念结构。

·自顶向下。先定义全局概念结构,然后再逐步细化。

·由里向外。先定义最重要的核心结构,然后再逐步向外扩展。

·混合策略。将自顶向下和自底向上方法结合起来使用。先用自顶向下设计一个概念结构的框架,然后以它为框架再用自底向上策略设计局部概念结构,最后把它们集成起来。

最常用的设计策略是自底向上策略。从这一步开始,需求分析所得到的结果按“数据”和“处理”分开考虑。概念结构设计重点在于信息结构的设计,而“处理”则由行为设计来考虑。这也是数据库设计的特点,即“行为”设计与“结构”设计分离进行。但由于两者原本是一个整体,因此在设计概念结构和逻辑结构时,要考虑如何有效地为“处理”服务,而设计应用模型时,也要考虑如何有效地利用结构设计提供的条件。

概念结构设计使用集合概念,抽取现实业务系统的元素及其应用语义关联,最终形成E-R模型。

概念结构设计最常用的方法是自底向上方法,即自顶向下进行需求分析,然后自底向上设计概念结构,其过程如图6-2所示。我们这里也只介绍自底向上设计概念结构的方法,它通常分为两步:第一步是抽象数据并设计局部概念模型,第二步是集成局部概念模型,得到全局概念模型,如图6-3所示。

图6—2 自顶向下需求分析、自底向上概念结构设计

图6—3 自底向上的概念结构设计

2.采用E-R模型的概念结构设计

设计数据库概念结构的最著名、最常用的是E-R模型。采用E-R模型的概念结构设计可分为如下三步。

·数据抽象与局部E-R模型设计。局部E-R模型的设计内容包括确定局部E-R模型的范围、定义实体、联系以及它们的属性。

·全局E-R模型设计。这一步是将所有局部E-R图集成为一个全局E-R图,即全局E-R模型。

·优化全局E-R模型。

下面分别介绍这三个步骤的内容。

(1)数据抽象与局部E-R图设计

概念结构是对现实世界的一种抽象。所谓抽象是对实际的人、物、事和概念进行人为处理,抽取所关心的共同特性,忽略非本质细节,并把这些特性用各种概念准确地加以描述,这些概念组成了某种模型。概念结构设计首先要根据需求分析得到的结果(数据流和数据字典等)对现实世界进行抽象,然后设计各个局部E-R模型。

①数据抽象

在系统需求分析阶段,得到了多层数据流图、数据字典和系统分析报告。建立局部ER图,就是根据系统的具体情况,在多层数据流图中选择一个适当层次的数据流图,作为E-R图设计的出支点,让这组图中的每个部分对应一个局部应用。在选好的某一层次的数据流图中,每个局部应用都对应了一组数据流图,具体应用所涉及的数据存储在数据字典中。现在就是要将这些数据从数据字典中抽取出来,参照数据流图,确定每个局部应用包含的实体、实体包含的属性以及实体之间的联系以及联系的类型。

设计局部E-R图的关键就是正确地划分实体和属性。实体和属性在形式上并没有可以明显区分的界限,通常是按照现实世界中事物的自然划分来定义实体和属性。对现实世界中的事物进行数据抽象,得到实体和属性。这里用到的数据抽象技术有两种:分类和聚集。

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

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

图6—4 分类示例

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

在E-R模型中,若干个属性的聚集就组成了一个实体的属性。例如,学号、姓名、性别等属性可聚集为学生实体的属性。聚集的示例如图6-5所示。

图6—5 聚集示例

②局部E-R图设计

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

图6—6 “系别”作为一个属性或实体的E—R图

下面举例说明局部E-R图的设计。

设在一个简单的教务管理系统中,有如下简化的语义描述。

A.一名学生可同时选修多门课程,一门课程也可同时被多名学生选修。对学生选课须记录考试成绩信息,每个学生每门课程只能有一次考试。对每名学生须记录学号、姓名、性别信息,对课程须记录课程号、课程名、课程性质信息。

B.一门课程可由多名教师讲授,一名教师可讲授多门课程。对每个教师讲授的每门课程须记录授课时数信息。对每名教师须记录教师号、教师名、性别、职称信息;对每门课程须记录课程号、课程名、开课学期信息。

C.一名学生只属于一个系,一个系可有多名学生。对系需要记录系名、系学生人数和办公地点等信息。

D.一名教师只属于一个部门,一个部门可有多名教师。对部门需要记录部门名、教师人数和办公电话信息等。

根据上述描述可知该系统共有5个实体,分别是:学生、课程、教师、系和部门。其中学生和课程之间是多对多联系;课程和教师之间也是多对多联系;系和学生之间是一对多联系;部门和教师之间也是一对多联系。

这5个实体的属性如下,其中的码属性(能够唯一标识实体中每个实例的一个属性或最小属性组,也称为实体的标识属性)用下划线标识:

学生:学号,姓名,性别。

课程:课程号,课程名,开课学期,课程性质。

教师:教师号,教师名,性别,职称。(www.chuimin.cn)

系:系名,学生人数,办公地点。

部门:部门名、教师人数,办公电话。

学生和课程之间的局部E-R图如图6-7所示,教师和课程之间的局部E-R图如图6-8所示。

图6—7 学生和课程的局部E—R图

图6—8 教师和课程的局部E—R图

教师和部门之间的局部E-R图如图6-9所示,学生和系之间的局部E-R图如图6-10所示。

图6—9 教师和部门之间的局部E—R图

图6—10 学生和系的局部E—R图

(2)全局E-R图设计

把局部E-R图集成为全局E-R图时,可以采用一次将所有的E-R图集成在一起的方式,也可以用逐步集成、进行累加的方式,即一次只集成少量几个E-R图,这样实现起来比较容易。当将局部E-R图集成为全局E-R图时,须消除各分E-R图合并时产生的冲突。解决冲突是合并E-R图的主要工作和关键所在。

各局部E-R图之间的冲突主要有三类:属性冲突、命名冲突和结构冲突。

①属性冲突。

属性冲突包括如下几种情况。

·属性域冲突。即属性的类型、取值范围和取值集合不同。例如,在有些局部应用中可能将学号定义为字符型,而在其他局部应用中可能将其定义为数值型。又如,年龄有些局部应用可能定义为出生日期,有些定义为整数。

·属性取值单位冲突。例如,学生身高,有的用“米”作为单位,有的用“厘米”作为单位。

②命名冲突

命名冲突包括同名异义和异名同义,即不同意义的实体名、联系名或属性名在不同的局部应用中具有相同的名字,或者具有相同意义的实体名、联系名和属性名在不同的局部应用中具有不同的名字。如科研项目,在财务部门称为项目,在科研处称为课题。

属性冲突和命名冲突通常可以通过讨论、协商等方法解决。

③结构冲突

结构冲突有如下几种情况。

A.同一数据项在不同应用中有不同的抽象,有的地方作为属性,有的地方作为实体。例如,“职称”可能在某一局部应用中作为实体,而在另一局部应用中却作为属性。

解决这种冲突必须根据实际情况而定,是把属性转换为实体还是把实体转换为属性,基本原则是保持数据项一致。一般情况下,凡能作为属性对待的,应尽可能作为属性,以简化E-R图。

B.同一实体在不同的局部E-R图中所包含的属性个数和属性次序不完全相同。

这是很常见的一类冲突,原因是不同的局部E-R模型关心的实体的侧面不同。解决的方法是让该实体的属性成为各局部E-R图中属性的并集,然后再适当调整属性次序。

C.两个实体在不同的应用中呈现不同的联系,比如,E1和E2两个实体在某个应用中可能是一对多联系,而在另一个应用中是多对多联系。

这种情况应该根据应用的语义对实体间的联系进行合适调整。

如图6-11所示是将两个局部E-R图合并成一个全局E-R图的示例。

图6—11 将局部E—R图合并为全局E—R图示例

下面说明合并前面介绍的简单教务管理系统局部E-R图的过程。

首先,合并如图6-7和图6-10所示的局部E-R图,这两个局部E-R图中不存在冲突,合并后的结果如图6-12所示。

图6—12 合并学生和课程、学生和系的局部E—R图

然后,合并如图6-8和图6-9所示的局部E-R图,这两个局部E-R图也不存在冲突,合并后的结果如图6-13所示。

图6—13 合并教师和课程、教师和部门的局部E—R图

最后,再将合并后的两个局部E-R图合并为一个全局E-R图,在进行这个合并操作时,发现这两个局部E-R图中都有“课程”实体,但该实体在两个局部E-R图所包含的属性不完全相同,即存在结构冲突。消除该冲突的方法是:合并后“课程”实体的属性是两个局部E-R图中“课程”实体属性的并集。合并后的全局E-R图如图6-14所示。

图6—14 合并后的全局E—R图

(3)优化全局E-R模型

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

·实体个数尽可能少。

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

·实体间联系无冗余。

优化的目的就是使E-R图满足上述三个条件。要使实体个数尽可能少,可以进行相关实体的合并,一般是把具有相同主码的实体进行合并,另外,还可以考虑将1∶1联系的两个实体合并为一个实体,同时消除冗余属性和冗余联系。但也应该衡量具体情况,有时候适当的冗余可以提高数据查询效率

分析如图6-14所示的全局E-R图,发现“系”实体和“部门”实体代表的含义基本相同,因此可将这两个实体合并为一个实体。在合并时发现这两个实体存在如下两个问题。

·命名冲突:实体“系”中有一个属性是“系名”,而在实体“部门”中将这个含义相同的属性命名为“部门名”,即存在异名同义属性。合并后可统一为“系名”。

·结构冲突:实体“系”包含的属性是系名、学生人数和办公地点,而实体“部门”包含的属性是部门名、教师人数和办公电话,因此在合并后的实体“系”中应包含这两个实体的全部属性。

我们将合并后的实体命名为“系”。优化后的E-R图如图6-15所示。

图6—15 优化后的全局E—R模型