概念结构设计阶段所涉及的信息不依赖于任何实际实现时的环境,即计算机的硬件和软件系统。概念结构设计的目标是产生一个用户易于理解的,反映系统信息需求的整体数据库概念结构。概念结构设计的任务是,在需求分析中产生的需求说明书的基础上按照一定的方法抽象成满足应用需求的用户的信息结构,即通常所称的概念模型。概念结构的设计过程就是正确选择设计策略、设计方法和概念数据模型并加以实施的过程。
概念数据模型的作用是:提供能够识别和理解系统要求的框架;为数据库提供一个说明性结构,作为设计数据库逻辑结构,即逻辑模型的基础。
概念模型的描述工具应该能够体现概念模型的特点,如 E-R 模型。近年来,由于面向对象数据模型具有更丰富的语义、更强的描述能力而越来越受到人们的重视,不但出现了商品化的面向对象 DBMS,而且开始实际应用于概念模型的设计中,作为数据库概念设计的工具。Teory 等人提出的扩展的 E-R 模型增加了类似面向对象数据模型中的普遍化和聚合等语义描述机制,为这种最为人们熟悉的数据模型注入了新的生机,为概念模型的描述增加了一种理想的选择。
概念结构的设计策略主要有自底向上、自顶向下、由里向外和混合策略。在具体实现设计目标时有两种极端的策略或方案,一是建立一个覆盖整个单位所有功能域的全局数据库,称之为全局方案或全局策略;另一种则是对每一个应用都建立一个单独的数据库,称之为应用方案或应用策略。
由于各个部门对于数据的需求和处理方法各不相同,对同一类数据的观点也可能不一样,它们有自己的视图,所以可以首先根据需求分析阶段产生的各个部门的数据流图和数据字典中的相关数据设计出各自的局部视图,然后进行视图集成。
1.视图设计
在实体分析法中,局部视图设计的第一步是确定其所属的范围,即它所对应的用户组,然后对每个用户组建立一个仅由实体、联系及它们的标识码组成的局部信息结构(局部数据模式)框架,最后再加入有关的描述信息,形成完整的局部视图(局部数据模式)。这样做的目的是为了集中精力处理好用户数据需求的主要方面,避免因无关紧要的描述细节而影响局部信息结构的正确性。整个过程可分为 4 个步骤:确定局部视图的范围;识别实体及其标识;确定实体间的联系;分配实体及联系的属性。
(1)确定局部视图的范围。需求说明书中标明的用户视图范围可以作为确定局部视图范围的基本依据,但它通常与子模式范围相对应,有时因为过大而不利于局部信息结构的构造,故可根据情况修改,但也不宜分得过小,过小会造成局部视图的数量太大及大量的数据冗余和不一致性,给以后的视图集成带来很大的困难。
局部视图范围确定的基本原则是:
各个局部视图支持的功能域之间的联系应最少。
实体个数适量。一个局部视图所包含的实体数量反映了该局部视图的复杂性,按照信息论中“72”的观点,人们在同一时刻可同时顾及的事情一般在 5~9 之间,其中以 6 或 7 最为适当。因此,一个局部视图内的实体数不宜超过 9 个,否则就会过于复杂,不便于人们理解和管理。
(2)识别实体及其标识。在需求分析中,人们已经初步地识别了各类实体、实体间的联系及描述其性质的数据元素,这些统称为数据对象,它们是进一步设计的基本素材。这一步的任务就是在确定的局部视图范围内,识别哪些数据对象作为局部视图的基本实体及其标识,并定义有关数据对象在 E-R 模型中的地位。
(3)确定实体间的联系。实际上,识别联系的主要任务是在需求分析阶段完成的。这里的工作一是从局部视图的角度进行一次审核,检查有无遗漏之处,二是确切地定义每一种联系。
在现实世界中,诸多形式的联系大致可分为三类:存在性联系、功能性联系和事件联系。存在性联系如学校有教师、教室有学生、工厂有产品、产品有顾客等;功能性联系如教师讲授课程、教师参与科研、仓库管理员管理仓库等;事件联系如学生借书、产品发运等。
根据上述分类仔细检查在给定的局部视图范围内是否有未识别的联系,在确认所有的联系都已识别并无遗漏之后,还需对联系进行正确的定义。定义联系就是对联系语义的仔细分析,识别联系的类型,确定实体在联系中的参与度。
① 二元联系的类型与定义。二元联系是指两个实体类之间的联系。根据参与联系的两个实体类值之间的对应关系分为一对一、一对多及多对多三种类型。
一对一联系:这是一种最简单的联系类型。若对于实体集 A 中的每一个实体,实体集 B 中至多有一个实体与之联系,反之亦然,则称实体集 A 与实体集 B 具有一对一联系,记为 1:1。例如在一个施工单位中,如果规定每项工程最多只能由一名工程师负责管理,而一名工程师最多也只能负责一项工程,则工程师与工程间的这种管理联系便是一对一联系。
一对多联系:若对于实体集 A 中的每一个实体,实体集 B 中有 n 个实体(n≥0)与之联系;反之,对于实体集 B 中的每一个实体,实体集 A 中至多有一个实体与之联系,则称实体集 A 与实体集 B 有一对多的联系,记为 1:n。以专业与学生间的关系为例:如规定一个专业可以管理许多学生,每个学生只能属于一个专业,这种联系就是一对多联系。
多对多联系:若对于实体集 A 中的每一个实体,实体集 B 中有 n 个实体(n≥0)与之联系,反过来,对实体集 B 中每一个实体,实体集 A 中也有 m 个实体(m≥0)与之联系,则称实体集 A 与实体集 B 具有多对多联系,记为 m:n。教师与学生这两个实体类间的教与学的联系就是多对多的联系。这时,只有<教师、学生>对才能确定一个特定的教学联系。因此,一般情况下可以以两个关联实体的标识拼凑作为联系的标识。但这种方法对某些情况就不能构成有效的联系标识。当一个实体值在同一个联系上可能存在多个不同的联系值时,就会出现这种情况。如教师与其讲授的课程之间的联系,同一个教师可讲授几门不同的课程,也可以多次讲授同一门课程,这是一种特殊的多对多联系。显然,对于教师与讲授课程间的联系,如在教师档案中要求记录担任教学工作的情况,就需要在联系标识中增加表示授课日期的属性,即其合适的联系标识可能为(教师号,课程号,授课日期)。
实体类内部的联系:这种联系发生在同一类实体的不同实体之间,因此称为内部联系或自联系,它也是一种二元联系,其表示方式与前面的二元联系并无不同,要注意仔细区别同一实体类中的不同实体在联系中扮演的不同角色及联系标识的选择。例如在职工类实体中间就存在着管理者与被管理者的联系。一个职工可以管理别的职工,称为管理者或领导者。一个管理者可以管理多个职工,而一个职工最多只从属于一位管理者,从而构成了一对多联系。若规定所有职工都要受管理(最高管理者考虑自己管理自己),但不是所有职工都是管理者,则此联系在“多”端呈现强制性。其中每个联系实体包含两个职工号值:职工号和管理员职工号,以区别不同的实体在联系中的角色。
若略去实体与其属性图,以上实体间的二元联系可用图3-4表示。
② 多元联系的识别与定义。两个以上的实体类之间的联系称为多元联系。例如在供应商向工程供应零件这类事件中,如果任一供应商可向任一工程供应任一种零件,则为了确定哪个供应商向哪个工程供应了何种零件,就必须定义一个三元联系,因为只有供应商、工程及零件三者一起才能唯一地确定一个联系值。其联系的标识由参与联系的实体类的标识拼接而成,在此例中由供应商、工程、零件三个实体类的标识拼接而成。
2.视图集成
视图集成就是要将反映各用户组数据的局部数据模式综合成单位中某个确定范围内的单一数据视图,即全局数据模式,又称模式汇总。该全局数据模式是未来数据库结构的基础,因此视图集成是数据库设计过程中一个十分重要的步骤,也是一项较为复杂和困难的任务。当所有局部视图设计完毕,就可开始视图集成。集成过程中会发生一些冲突,冲突的表现和处理策略如下:
① 同名异义。为了发现不同视图间的同名异义问题,可以列出所有同名数据对象,然后逐一判别其语义。对同名异义冲突通常采用换名加以解决,既可对同名者之一换名,也可对两者都给以重新命名。识别语义的主要方法是进行值域分析。
② 异名同义。识别异名同义比较困难,一般由设计者对所有对象一个不漏地逐一鉴别。它同样采用换名的方法解决。若归并时试图将它们合并为一个对象,则可以把其中之一的名称作为合并后的对象名;若集成后,它们仍以两个不同的对象存在,则可对其一换名。当然,若原名都不合适,则可以对两者都重新命名。
③ 同名不同层次。如果两个对象同名,但其中之一是作为一个视图中的实体,而另一个是另一视图中的属性,则在集成时就会发生同名不同层次的冲突。解决这种冲突的办法有两个,一是将属性转换为实体,二是将实体变换成属性。
例如,设一局部视图中有一部门实体 DEPT,而在另一与之集成的视图中有职工实体EMP,且 EMP 有属性 DEPT,于是发生了同名不同层次的冲突。此时,可将 EMP 的 DEPT 属性去掉,另设一个实体 DEPT 与 EMP 建立联系,这时再与另一视图集成就容易多了。
再如,设一局部视图中有一名为 STOR 的仓库实体,其中含有一属性部门号(DEPT-NO);在另一局部视图中有一单位实体 DEPT,其中仅含有一个属性 DEPT-NO。对这类同名不同层次的冲突,可将 DEPT 实体变换为其所在视图中与 DEPT 相关的另一实体的属性,然后再进行集成。
实体变换为属性时通常要满足一些特定条件,例如,该实体通常只含有一个与同名属性具有共同特征的属性,且一定存在一个与该实体存在联系的另外的实体。
④ 虽同名同义,但对象联系测度不同。所谓联系测度是指实体的联系是一对一、一对多还是多对多。若同名同义对象在一个局部视图中为一对多联系,在另一局部视图中为多对多联系,则在集成时将发生联系测度冲突。一般而言,一对多包含一对一,多对多包含一对多。所以解决这种冲突的方法往往取较高测度为集成后的相应联系的测度。