目录
数据库设计
1、数据库设计概述
1)、数据库设计的特点
2)、 数据库设计方法
3)、 数据库设计的基本步骤
4)、数据库设计过程中的各级模式
2、需求分析
1)、需求分析的任务
2)、需求分析的方法
3)、数据字典
3、概念结构设计
1)、概念模型
2)、E-R 模型
3)、概念结构设计
数据库设计 ,广义地讲:整个数据库应用系统的设计;狭义的说就是数据库本身的设计。设计一个好的数据库与设计一个好的数据库应用系统密不可分。
数据库设计的目标是为用户和各种应用系统提供一个信息基础设施和高效率的运行环境。高效率的运行环境是指数据库数据的存取效率高 、数据库存储空间的利用率高 、数据库系统运行管理的效率高
数据库设计的一般定义:数据库设计是指对于一个给定的应用环境,构造(设计)优化的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能够有效地存储和管理数据,满足各种用户的应用需求,包括信息管理要求和数据操作要求。 信息管理要求:在数据库中应该存储和管理哪些数据对象 ;数据操作要求:对数据对象需要进行哪些操作,如查询、增、删、改、统计等操作。
1、数据库建设的基本规律
三分技术,七分管理,十二分基础数据 。技术:其次;管理 :数据库建设项目管理,企业(即应用部门)的业务管理 ;基础数据: 数据的收集、整理、组织和不断更新。工作量大,繁琐,细致。对数据分析挖掘,改进业务管理。
2. 结构(数据)设计和行为(处理)设计相结合
将数据库结构设计和数据处理设计密切结合。在早期的数据库应用系统开发过程中,常常把数据库设计和应用系统的设计分离开来,如图:
而传统的软件工程:重行为设计,忽视对应用中数据语义的分析和抽象。结构化设计和逐步求精的方法;早期的数据库设计:重结构设计,致力于数据模型和数据库建模方法研究,忽视了行为设计对结构设计的影响。
运用软件工程思想,按一定的设计规程用工程化方法设计数据库,其基本思想:过程迭代和逐步求精。迭代算法是用计算机解决问题的一种基本方法。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。
经典方法:新奥尔良方法(比较著名):将数据库设计分四个阶段:需求分析(分析用户要求)、概念设计(信息分析和定义)、逻辑设计(设计实现)和物理设计(物理数据库设计);基于E-R模型的数据库设计方法(概念设计阶段广泛采用);3NF(第三范式)的设计方法(逻辑阶段可采用的有效方法);面向对象的数据库设计方法 ;统一建模语言(UML)方法;计算机辅助设计法(指在数据库设计的某些过程中模拟某一规范化设计的方法,并以人的知识或经验为主导,通过人机交互方式实现设计中的某些部分);计算机辅助软件工程工具(如 SYSBASE公司的PowerDesigner、Rational公司的Rational Rose、Oracle公司的Design 2000)等。
数据库设计分6个阶段:需求分析 、概念结构设计 、逻辑结构设计 、物理结构设计 、数据库实施 和 数据库运行和维护,如图所示:
在数据库设计过程中,需求分析和概念设计独立于任何数据库管理系统,逻辑设计和物理设计与选用的数据库管理系统密切相关。
数据库设计开始之前,首先必须选定参加设计的人员,包括系统分析人员、数据库设计人员、应用开发人员、数据库管理员和用户代表。系统分析人员和数据库设计人员是数据库设计的核心,自始至终参与数据库设计,其水平决定了数据库系统的质量。数据库管理员和用户代表主要参加需求分析与数据库的运行和维护(用户积极参与带来的好处:加速数据库设计,提高数据库设计的质量)。应用开发人员(包括程序员和操作员)在实施阶段参与进来,分别负责编制程序和准备软硬件环境。
需求分析阶段:准确了解与分析用户需求(包括数据与处理)。是整个设计过程的基础,是最困难、最耗费时间的一步。是否做得充分与准确,决定了构建数据库的速度和质量。概念结构设计阶段:是整个数据库设计的关键。通过对用户需求进行综合、归纳与抽象,形成一个独立于具体数据库管理系统的概念模型。逻辑结构设计阶段:将概念结构转换为某个DBMS所支持的数据模型,并对其进行优化。物理结构设计阶段:为逻辑数据结构选取一个最适合应用环境的物理结构(包括存储结构和存取方法)。数据库实施阶段:根据逻辑设计和物理设计的结果构建数据库,编写与调试应用程序,组织数据入库并进行试运行。数据库运行和维护阶段:经过试运行后即可投入正式运行,在运行过程中必须不断对其进行评估、调整与修改。
这个设计步骤既是数据库设计的过程,也包括了数据库应用系统的设计过程。设计一个完善的数据库应用系统往往是上述6个阶段的不断反复。 把数据库的设计和对数据库中数据处理的设计紧密结合起来,将这两个方面的需求分析、抽象、设计、实现在各个阶段同时进行,相互参照,相互补充,以完善两方面的设计。
和前面的一样,数据库设计的不同阶段形成数据库的各级模式,如下图:
需求分析阶段:综合各个用户的应用需求;数据库设计不同阶段形成的数据库各级模式;概念设计阶段:形成独立于机器特点,独立于各个数据库管理系统产品的概念模式(E-R图);逻辑设计阶段:首先将E-R图转换成具体的数据库产品支持的数据模型,如关系模型,形成数据库逻辑模式,然后根据用户处理的要求、安全性的考虑,在基本表的基础上再建立必要的视图(View),形成数据的外模式;物理设计阶段:根据数据库管理系统特点和处理的需要,进行物理存储安排,建立索引,形成数据库内模式。
需求分析就是分析用户的需要与要求,需求分析是设计数据库的起点。需求分析的结果是否准确地反映了用户的实际要求,将直接影响到后面各个阶段的设计,并影响到设计结果是否合理和实用。
需求分析的任务通过详细调查现实世界要处理的对象(组织、部门、企业等),充分了解原系统(手工系统或计算机系统)工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能。新系统必须充分考虑今后可能的扩充和改变,不能仅仅按当前应用需求来设计数据库。
需求分析的重点是 “数据” 和 “处理” ,通过调查、收集与分析,获得用户对数据库的以下要求:信息要求:用户需要从数据库中获得信息的内容与性质,由用户的信息要求可以导出数据要求,即在数据库中需要存储哪些数据;处理要求:对处理功能的要求、对处理的响应时间的要求以及对处理方式的要求(批处理 / 联机处理);安全性与完整性要求。
调查清楚用户的实际需求并进行初步分析,与用户达成共识,然后进一步分析与表达这些需求。
需求调查的内容如下:1)、调查组织机构情况:组织部门的组成情况,各部门的职责等;2)、调查各部门的业务活动情况:各个部门输入和使用什么数据,如何加工处理这些数据,输出什么信息,输出到什么部门,输出结果的格式是什么 等;3)、在熟悉业务活动的基础上,协助用户明确对新系统的各种要求:信息要求,处理要求,安全性与完整性要求 ;4)、确定新系统的边界:对前面调查的结果进行初步分析,确定哪些功能由计算机完成或将来准备让计算机完成,确定哪些活动由人工完成。由计算机完成的功能就是新系统应该实现的功能。
在调查过程中,可以根据不同的问题和条件使用不同的调查方法,常用的调查方法有:跟班作业:通过亲身参加业务工作了解业务活动的情况,能比较准确地理解用户的需求,但比较耗时;开调查会:通过与用户座谈来了解业务活动情况及用户需求;请专人介绍 ;询问:对某些调查中的问题,可以找专人询问;设计调查表请用户填写:如果调查表设计合理,则很有效,且易于为用户接受;查阅记录:查阅与原系统有关的数据记录 。
做需求调查时,往往需要同时采用多种方法,无论使用何种调查方法,都必须有用户的积极参与和配合。
调查了解用户需求后,还需要进一步分析和表达用户的需求。在众多分析方法中,结构化分析(SA) 方法是一种简单实用的方法。SA 方法从最上层的系统组织机构入手,采用自顶向下、逐层分解的方式分析系统:1、把任何一个系统都抽象为如图方式:
反映系统概貌,要反映更详细的内容,可将处理功能分解为若干子功能,每个子功能还可以继续分解,直到把系统工作过程表示清楚为止。2、 分解处理功能和数据,其中包括 1)、分解处理功能:将处理功能的具体内容分解为若干子功能,再将每个子功能继续分解,直到把系统的工作过程表达清楚为止;2)分解数据:在处理功能逐步分解的同时,其所用的数据也逐级分解,形成若干层次的数据流图。(数据流图表达了数据和处理过程的关系);3)、表达方法:数据用数据字典来描述,主要描述数据在系统中流动和处理的工具,表达了数据与处理的关系;处理过程用判定表或判定树来描述(判定树本质上同判定表是一样的,当用户不易接受判定表这种描述方式时,可用判定树的形式,判定树是一种图形表示,更易被用户理解)。下面举的例子(左为判定表,右为判定树):
接着便是 3、将分析结果再次提交给用户,征得用户的认可。
数据字典是关于数据库中数据描述的集合,即元数据,不是数据本身。数据字典在需求分析阶段建立,在数据库设计过程中不断修改、充实、完善,是进行详细的数据收集和数据分析所获得的主要结果。
数据字典的内容包括:数据项、数据结构、数据流、数据存储及处理过程。数据项是数据的最小组成单位,若干个数据项可以组成一个数据结构。数据字典通过对数据项和数据结构的定义来描述数据流、数据存储的逻辑内容。
1、数据项:
数据项是不可再分的数据单位。对数据项的描述通常包括以下内容:数据项描述={数据项名,数据项含义说明,别名,数据类型,长度,取值范围,取值含义,与其他数据项的逻辑关系},其中取值范围、与其他数据项的逻辑关系定义了数据的完整性约束条件,是设计数据检验功能的依据。 可以用关系规范化理论为指导,用数据依赖的概念分析和表示数据项之间的联系。
2、数据结构:
数据结构反映了数据之间的组合关系。一个数据结构可以由若干个数据项组成,也可以由若干个数据结构组成,或由若干个数据项和数据结构混合组成。对数据结构的描述通常包括一下内容:数据结构描述 ={数据结构名,含义说明,组成:{数据项或数据结构}}
3、数据流:
数据流是数据结构在系统内传输的路径对数据流的描述通常包括以下内容:数据流描述={数据流名,说明,数据流来源,数据流去向,组成:{数据结构},平均流量,高峰期流量}。其中数据流来源是说明该数据流来自哪个过程;数据流去向是说明该数据流将到哪个过程去;平均流量是指在单位时间(每天、每周、每月等)里的传输次数;高峰期流量则是指在高峰时期的数据流量。
4、数据存储:
数据存储是数据结构停留或保存的地方,也是数据流的来源和去向之一。它可以是手工文档或手工凭单,也可以是计算机文档。对数据存储的描述通常包括以下内容:数据存储描述={数据存储名,说明,编号,流入的数据流 ,流出的数据流 ,组成:{数据结构},数据量,存取频度,存取方式}。其中流入的数据流:指出数据来源;流出的数据流:指出数据去向;数据量:每次存取多少数据,每天(或每小时、每周等)存取几次等信息;存取频度:每小时、每天或每周存取次数及每次存取的数据量等信息;存取方法:批处理/联机处理;检索/更新;顺序检索/随机检索。
5、处理过程:
处理过程的具体处理逻辑一般用判定表或判定树来描述。数据字典中只需要描述处理过程的说明性信息。通常包括以下内容:处理过程描述={处理过程名,说明,输入:{数据流},输出:{数据流},处理:{简要说明}}。其中 简要说明 主要说明该处理过程的功能及处理要求;功能是指该处理过程用来做什么(而不是怎么做);处理要求指处理频度要求(如单位时间里处理多少事务,多少数据量);响应时间要求等。这些处理要求是后面物理设计的输入及性能评价的标准。
将需求分析得到的用户需求抽象为信息结构 (即概念模型)的过程就是概念结构设计 。概念模型的特点:1)、能真实、充分地反映现实世界,是现实世界的一个真实模型。2)、易于理解,从而可以用它和不熟悉计算机的用户交换意见。3)、易于更改,当应用环境和应用要求改变时,容易对概念模型修改和扩充。4)、易于向关系、网状、层次等各种数据模型转换。
概念模型是各种数据模型的共同基础,它比数据模型更独立于机器、更抽象,从而更加稳定。描述概念模型的有力工具是 E-R 模型。
前面已简单提到过 E-R 模型的一些概念,包括实体、属性、实体之间的联系等,初步了解了实体之间的联系。下面仍先对实体之间的联系作进一步介绍,然后讲解 E-R 图。
实体之间的联系:实体内部的联系通常是指组成实体的各属性之间的联系,实体之间的联系通常是指不同实体型的实体集之间的联系。
1)、两个实体型之间的联系:一对一联系(1∶1)、一对多联系(1∶n)、多对多联系(m∶n)。2)、一般地,两个以上的实体型之间也存在着一对一、一对多、多对多联系。 例如:对于课程、教师与参考书3个实体型,如果一门课程可以有若干个教师讲授,使用若干本参考书,而每一个教师只讲授一门课程,每一本参考书只供一门课程使用,则课程与教师、参考书之间的联系是一对多的。3)、同一个实体集内的各实体之间也可以存在一对一、一对多、多对多的联系。 例如:职工实体型内部具有领导与被领导的联系,即某一职工(干部)“领导”若干名职工,而一个职工仅被另外一个职工直接领导,因此这是一对多的联系。
设计概念结构的四类方法:1)、自顶向下:首先定义全局概念结构的 框架,然后逐步细化。2)、自底向上:首先定义各局部应用的概念结构,然后将它们集成起来,得到全局概念结构。3)、逐步扩张:首先定义最重要的核心概念结构,然后向外扩充,以滚雪球的方式逐步生成其他概念结构,直至总体概念结构。4)、混合策略:将自顶向下和自底向上相结合,用自顶向下策略设计一个全局概念结构的框架,以它为骨架集成由自底向上策略中设计的各局部概念结构。
常用策略:自顶向下地进行需求分析,自底向上地设计概念结构。自底向上设计概念结构的步骤:第1步,抽象数据并设计局部视图;第2步,集成局部视图,得到全局概念结构。
1、实体与属性的划分
数据抽象的用途:对需求分析阶段收集到的数据进行分类、组织(聚集)、概括,形成实体、实体的属性(标识实体的码)、确定实体之间的联系类型(1:1,1:n,m:n) 。实体:现实世界中一组具有某些共同特性和行为的对象就可以抽象为一个实体。对象和实体之间是 “is member of” 的关系。例:在学校环境中,可把张三、李四等对象抽象为学生实体。属性:对象类型的组成成分可以抽象为实体的属性。组成成分与对象类型之间是 “is part of” 的关系。例:学号、姓名、专业、年级等可以抽象为学生实体的属性,其中学号为标识学生实体的码。
为了简化E-R图的处置,现实世界的事物能作为属性对待的,尽量作为属性对待。 有以下两条准则:1)、作为属性,不能再具有需要描述的性质,属性必须是不可分的数据项,不能包含其他属性。2)、属性不能与其他实体具有联系,即 E-R 图中所表示的联系是实体之间的联系。符合上述两条特性的事物一般作为属性对待。
例:职工是一个实体,职工号、姓名、年龄是职工的属性。 职称如果没有与工资、福利挂钩,根据准则 1可以作为职工实体的属性。 如果不同的职称有不同的工资、住房标准和不同的附加福利,则职称作为一个实体更恰当。例:在医院中,一个病人只能住在一个病房,病房号可以作为病人实体的一个属性。如果病房还要与医生实体发生联系,即一个医生负责几个病房的病人的医疗工作,则根据准则2病房应作为一个实体。例:如果一种货物只存放在一个仓库,那么就可以把存放货物的仓库的仓库号作为描述货物存放地点的属性。如果一种货物可以存放在多个仓库中,或者仓库本身又用面积作为属性,或者仓库与职工发生管理上的联系,那么就应把仓库作为一个实体。
2、E-R 图的集成
在开发一个大型信息系统时,经常采用的方法是自顶向下进行需求分析,然后自底向上设计概念结构。即首先设计各个子系统的E-R图,然后把他们集成起来,得到全局的 E-R 图。
设计分 E-R 图的步骤:1)、以数据字典为出发点定义E-R图。每个局部应用都对应了一组数据流图,局部应用涉及的数据都已经收集在数据字典中了。数据字典中的“数据结构”、“数据流”和“数据存储”等已是若干属性的有意义的聚合。现在就是要将这些数据从数据字典中抽取出来,参照数据流图,标定局部应用中的实体、实体的属性、标识实体的码,确定实体之间的联系及其类型(1:1、1:n、m:n)。2)、按上面给出的准则进行必要的调整。
集成分两步走:第一步:合并,消除冲突,生成初步E-R图。各子系统的E-R图之间的冲突主要有三类:1)、属性冲突:属性域,取值单位;2)、命名冲突:同名异义、异名同义;3)、结构冲突:同一对象被当成实体还是属性,同一实体在不同子系统的属性个数或者属性顺序不同,实体间的联系不同。第二步:修改和重构,消除冗余,生成基本 E-R图。数据的冗余:可由基本数据导出的数据;实体间冗余的联系:可由其他联系导出的联系。需要注意:并不是所有的冗余数据和冗余联系都必须消除,有时为了效率,需要以冗余信息作为代价。在设计数据库概念结构时,哪些冗余信息必须消除,哪些冗余信息允许存在,需要根据用户的整体需求来确定。
消除冗余的方法:以数据字典和数据流图为依据,根据数据字典中关于数据项之间逻辑关系的说明来消除冗余。利用规范化理论,函数依赖的概念提供了消除冗余联系的形式化工具。如果是为了提高效率,人为地保留了一些冗余数据,则应把数据字典中数据关联的说明作为完整性约束条件。一种更好的方法是把冗余数据定义在视图中。