第7章 数据库设计
复习笔记
一、数据库设计
数据库设计是指对于一个给定的应用环境,构造(设计)优化的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能够有效地存储和管理数据,满足各种用户的应用需求。数据库设计的目标是为用户和各种应用系统提供一个信息基础设施和高效的运行环境。
01数据库设计的特点
(1)数据库建设的基本规律
“三分技术,七分管理,十二分基础数据”是数据库设计的特点之一。
(2)结构(数据)设计和行为(处理)设计相结合
数据库设计应该和应用系统设计相结合。也就是说,整个设计过程中要把数据库结构设计和对数据的处理设计密切结合起来。
02数据库设计方法
(1)新奥尔良(NewOrleans)方法。
(2)基于E-R模型的设计方法。
(3)3NF(第三范式)的设计方法。
(4)面向对象的数据库设计方法。
(5)统一建模语言(Unified Model Language,UML)方法。
03数据库设计的基本步骤
按照结构化系统设计的方法,考虑数据库及其应用系统开发全过程,将数据库设计分为以下6个阶段(如图7-1所示)。
图7-1 数据库设计步骤
在数据库设计过程中,需求分析和概念结构设计可以独立于任何数据库管理系统进行,逻辑结构设计和物理结构设计与选用的数据库管理系统密切相关。
(1)需求分析阶段
进行数据库设计首先必须准确了解与分析用户需求(包括数据与处理)。需求分析是整个设计过程的基础,是最困难和最耗费时间的一步。
(2)概念结构设计阶段
概念结构设计是整个数据库设计的关键,它通过对用户需求进行综合、归纳与抽象,形成一个独立于具体数据库管理系统的概念模型。
(3)逻辑结构设计阶段
逻辑结构设计是将概念结构转换为某个数据库管理系统所支持的数据模型,并对其进行优化。
(4)物理结构设计阶段
物理结构设计是为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)。
(5)数据库实施阶段
在数据库实施阶段,设计人员运用数据库管理系统提供的数据库语言及其宿主语言,根据逻辑设计和物理设计的结果建立数据库,编写与调试应用程序,组织数据入库,并进行试运行。
(6)数据库运行和维护阶段
数据库应用系统经过试运行后即可投入正式运行。在数据库系统运行过程中必须不断地对其进行评估、调整与修改。
这个设计步骤既是数据库设计的过程,也包括了数据库应用系统的设计过程。设计过程各个阶段的设计描述,可用图7-2概括地给出。
图7-2 数据库设计各个阶段的数据设计描述
04数据库设计过程中的各级模式
数据库设计的不同阶段形成数据库的各级模式,如图7-3所示。
图7-3 数据库的各级模式
(1)需求分析阶段,综合各个用户的应用需求;
(2)在概念设计阶段形成独立于机器特点,独立于各个DBMS产品的概念模式,在本篇中就是E-R 图;
(3)在逻辑设计阶段将E-R图转换成具体的数据库产品支持的数据模型,如关系模型,形成数据库逻辑模式;
(4)根据用户处理的要求、安全性的考虑,在基本表的基础上再建立必要的视图(View),形成数据的外模式;
(5)在物理设计阶段,根据 DBMS特点和处理的需要,进行物理存储安排,建立索引,形成数据库内模式。
二、需求分析
需求分析简单地说就是分析用户的要求。需求分析是设计数据库的起点,需求分析结果是否准确反映用,的实际要求将直接影响到后面各阶段的设计,并影响到设计结果是否合理和实用。
01需求分析的任务
需求分析的任务是通过详细调查现实世界要处理的对象(组织、部门、企业等),充分了解原系统(手工系统或计算机系统)的工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能。新系统必须充分考虑今后可能的扩充和改变,不能仅仅按当前应用需求来设计数据库。
调查的重点是"数据"和"处理",通过调查、收集与分析,获得用户对数据库的如下要求:(1)信息要求;(2)处理要求。
02需求分析的方法
进行需求分析首先是调查清楚用户的实际要求,与用户达成共识,然后分析与表达这些需求。
(1)调查步骤
①调查组织机构情况。
②调查各部门的业务活动情况。
③在熟悉了业务活动的基础上,协助用户明确对新系统的各种要求。
④确定新系统的边界。
(2)方法
①跟班作业。
②开调查会。
③请专人介绍。
④询问。
⑤设计调查表请用户填写。
⑥查阅记录。
结构化分析(Structured Analysis,SA)方法是一种简单实用的方法。SA 方法从最上层的系统组织机构入手,采用自顶向下、逐层分解的方式分析系统。
对用户需求进行分析与表达后,需求分析报告必须提交给用户,征得用户的认可。图7-4描述了需求分析的过程。
图7-4 需求分析过程
03数据字典
数据字典是系统中各类数据描述的集合,是进行详细的数据收集和数据分析所获得的主要成果。数据字典通常包括数据项、数据结构、数据流、数据存储和处理过程5个部分。
(1)数据项
①定义
数据项是不可再分的数据单位。
②描述
数据项描述=(数据项名,数据项含义说明,别名,数据类型,长度,取值范围,取值含义,与其他数据项的逻辑关系,数据项之间的联系}
其中,"取值范围"、"与其他数据项的逻辑关系"定义了数据的完整性约束条件,是设计数据检验功能的依据。
(2)数据结构
①定义
数据结构反映了数据之间的组合关系。一个数据结构可以由若干个数据项组成,也可以由若干个数据结构组成,或由若干个数据项和数据结构混合组成。
②描述
数据结构描述={数据结构名,含义说明,组成:{数据项或数据结构}}
(3)数据流
①定义
数据流是数据结构在系统内传输的路径。
②描述
数据流描述=(数据流名,说明,数据流来源,数据流去向,组成:(数据结构),平均流量,高峰期流量)其中,"数据流来源"是说明该数据流来自哪个过程:"数据流去向"是说明该数据流到哪个过程去。
(4)数据存储
①定义
数据存储是数据结构停留或保存的地方,也是数据流的来源和去向之一。
②描述
数据存储描述=(数据存储名,说明,编号,输入的数据流,输出的数据流,组成:(数据结构),数据量,存取频度,存取方式}
其中,“存取频度”指每小时或每天或每周存取几次、每次存取多少数据等信息;“存取方式”包括是批处理还是联机处理、是检索还是更新、是顺序检索还是随机检索等。
(5)处理过程
①定义
处理过程的具体处理逻辑一般用判定表或判定树来描述。数据字典中只需要描述处理过程的说明性信息。
②描述
处理过程描述={处理过程名,说明,输入:{数据流},输出:{数据流},处理:{简要说明}}
其中,“简要说明”中主要说明该处理过程的功能及处理要求。功能是指该处理过程用来做什么(而不是怎么做);处理要求包括处理频度要求,如单位时间里处理多少事务、多少数据量、响应时间要求等。
③注意事项
a.设计人员应充分考虑到可能的扩充和改变,使设计易于更改,系统易于扩充;
b.必须强调用户的参与,这是数据库应用系统设计的特点。
三、概念结构设计
将需求分析得到的用户需求抽象为信息结构(即概念模型)的过程就是概念结构设计。它是整个数据库设计的关键。
01概念模型
在需求分析阶段所得到的应用需求应该首先抽象为信息世界的结构,然后才能更好、更准确地用某一数据库管理系统实现这些需求。
概念模型的主要特点是:
(1)能真实、充分地反映现实世界,包括事物和事物之间的联系,能满足用户对数据的处理要求,是现实世界的一个真实模型。
(2)易于理解,可以用它和不熟悉计算机的用户交换意见。用户的积极参与是数据库设计成功的关键。
(3)易于更改,当应用环境和应用要求改变时容易对概念模型修改和扩充。
(4)易于向关系、网状、层次等各种数据模型转换。
概念模型是各种数据模型的共同基础,它比数据模型更独立于机器、更抽象,从而更加稳定。描述概念模型的有力工具是E-R模型。
02E-R模型
(1)实体之间的联系
a.一对一联系(1:1)
如果对于实体集A中的每一个实体,实体集B中至多有一个(也可以没有)实体与之联系,反之亦然,则称实体集A与实体集B具有一对一联系,记为1:1。
b.一对多联系(1:n)
如果对于实体集A中的每一个实体,实体集B中有n个实体(n2O)与之联系,反之,对于实体集B中的每一个实体,实体集A中至多只有一个实体与之联系,则称实体集A与实体集B有一对多联系,记为1:n。
c.多对多联系(m:n)
如果对于实体集A中的每一个实体,实体集B中有n个实体(n>10)与之联系,反之,对于实体集B中的每一个实体,实体集A中也有m个实体(m>10)与之联系,则称实体集A与实体集B具有多对多联系,记为m:n。
(2)E-R图
E-R图提供了表示实体型、属性和联系的方法。
①实体型用矩形表示,矩形框内写明实体名。
②属性用椭圆形表示,并用无向边将其与相应的实体型连接起来。
③联系用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体型连接起来,同时在无向边旁标上联系的类型(1:1、I:n或m:n)。
03扩展的E-R模型
(1)ISA联系
ISA 联系的一个重要的性质是子类继承了父类的所有属性,当然子类也可以有自己的属性。ISA 联系描述了对一个实体型中实体的一种分类方法。
(2)不相交约束与可重叠约束
不相交约束描述父类中的一个实体不能同时属于多个子类中的实体集,即一个父类中的实体最多属于一个子类实体集,用ISA联系三角形符号内加一个叉号"X"来表示。完备性约束描述父类中的一个实体是否必须是某一个子类中的实体,如果是,则叫做完全特化(total specialization),否则叫做部分特化(partial specialization)。
(3)基数约束
基数约束是对实体之间一对一、一对多和多对多联系的细化。参与联系的每个实体型用基数约束来说明实体型中的任何一个实体可以在联系中出现的最少次数和最多次数。约束用一个数对min…max表示,0smin≤max。
(4)Part-of联系
Part-of 联系即部分联系,它表明某个实体型是另外一个实体型的一部分。Part-of 联系可以分为两种情况,一种是整体实体如果被破坏,部分实体仍然可以独立存在,称为非独占的Part-of联系。非独占的Part-of联系可以通过基数约束来表达。与非独占联系相反,还有一种Part-of联系是独占联系。即整体实体如果被破坏,部分实体不能存在,在E-R 图中用弱实体类型和识别联系来表示独占联系。如果一个实体型的存在依赖于其他实体型的存在,则这个实体型叫做弱实体型,否则叫做强实体型。
04UML
UML是对象管理组织(Obiect Management Group,OMG)的一个标准,它不是专门针对数据建模的,而是为软件开发的所有阶段提供模型化和可视化支持的规范语言,从需求规格描述到系统完成后的测试和维护都可以用到UML。
(1)实体型
用类表示,矩形框中实体名放在上部,下面列出属性名。
(2)实体的码
在类图中在属性后面加"PK"(primary key)来表示码属性。
(3)联系
用类图之间的“关联”来表示。早期的UML只能表示二元关联,关联的两个类用无向边相连,在连线上面写关联的名称。
05概念结构设计
(1)实体与属性的划分原则
①作为属性,不能再具有需要描述的性质,即属性必须是不可分的数据项,不能包含其他属性。
②属性不能与其他实体具有联系,即E-R 图中所表示的联系是实体之间的联系。凡满足上述两条准则的事物,一般均可作为属性对待。
(2)E-R图的集成
E-R图的集成一般需要分两步走,如图7-5所示。
图7-5 E-R图集成
①合并E-R图,生成初步E-R图
合并这些E-R图时并不能简单地将各个E-R图画到一起,而是必须着力消除各个E-R图中的不一致,以形成一个能为全系统中所有用户共同理解和接受的统一的概念模型。合理消除各E-R图的冲突是合并E-R图的主要工作与关键所在。
各子系统的E-R图之间的冲突主要有三类:
a. 属性冲突;
b.命名冲突;
c.结构冲突。
②消除不必要的冗余,设计基本E-R图
冗余的数据是指可由基本数据导出的数据,冗余的联系是指可由其他联系导出的联系。冗余数据和冗余联系容易破坏数据库的完整性,给数据库维护增加困难,应当予以消除。消除了冗余后的初步E-R图称为基本E-R 图。消除冗余常见的两种方法为:
a.分析方法;
b.规范化理论。
四、逻辑结构设计
概念结构是独立于任何一种数据模型的信息结构,逻辑结构设计的任务就是把概念结构设计阶段设计好的基本E-R图转换为与选用数据库管理系统产品所支持的数据模型相符合的逻辑结构。
01E-R图向关系模型的转换
E-R 图转换为关系模型遵循如下原则:一个实体型转换为一个关系模式。实体的属性就是关系的属性,实体的码就是关系的码。
对于实体型间的联系则有以下不同的情况:
(1)一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,每个实体的码均是该关系的候选码。如果与某一端实体对应的关系模式合并,则需要在该关系模式的属性中加入另一个关系模式的码和联系本身的属性。
(2)一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为n端实体的码。
(3)一个m:n联系转换为一个关系模式,与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,各实体的码组成关系的码或关系码的一部分。
(4)3个或3个以上实体间的一个多元联系可以转换为一个关系模式。与该多元联系相连的各实体的码以及联系本身的属性均转换为关系的属性、各实体的码、组成关系的码或关系码的一部分。
(5)具有相同码的关系模式可合并。
02数据模型的优化
关系数据模型优化通常以规范化理论为指导,方法为:
(1)确定数据依赖;
(2)对于各个关系模式之间的数据依赖进行极小化处理,消除冗余的联系:
(3)按照数据依赖的理论对关系模式逐一进行分析,考察是否存在部分函数依赖、传函数依赖、多值依赖等,确定各关系模式分别属于第几范式;
(4)按照需求分析阶段得到的处理要求,分析对于这样的应用环境这些模式是否合适确定是否要对某些模式进行合并或分解;
(5)对关系模式进行必要的分解,提高数据操作的效率和存储空间的利用率,常用的两种分解方法是水平分解和垂直分解:
①水平分解是把(基本)关系的元组分为若干子集合,定义每个子集合为一个子关系,以提高系统的效率;
②垂直分解是把关系模式R的属性分解为若干子集合,形成若干子关系模式。
03设计用户子模式
定义用户外模式时可以注重考虑用户的习惯与方便。包括:
(1)使用更符合用户习惯的别名。
(2)可以对不同级别的用户定义不同的View,以保证系统的安全性。
(3)简化用户对系统的使用。
五、物理结构设计
为一个给定的逻辑数据模型选取一个最适合应用要求的物理结构的过程,就是数据库的物理设计。
01物理设计步骤
数据库的物理设计通常分为两步:
(1)确定数据库的物理结构,在关系数据库中主要指存取方法和存储结构。
(2)对物理结构进行评价,评价的重点是时间和空间效率。
如果评价结果满足原设计要求,则可进入到物理实施阶段,否则,就需要重新设计或修改物理结构,有时甚至要返回逻辑设计阶段修改数据模型。
02数据库物理设计的内容和方法
希望设计优化的物理数据库结构,使得在数据库上运行的各种事务响应时间小、存储空间利用率高、事务吞吐率大,因此需要:
(1)首先对要运行的事务进行详细分析,获得选择物理数据库设计所需要的参数。
(2)要充分了解所用关系数据库管理系统的内部特征,特别是系统提供的存取方法和存储结构。
03关系模式存取方法选择
(1)B+树索引存取方法的选择
选择索引存取方法就是根据应用要求确定对关系的哪些属性列建立索引、哪些属性列建立组合索引、哪些索引要设计为唯一索引等。
①如果一个(或一组)属性经常在查询条件中出现,则考虑在这个(或这组)属性上建立索引(或组合索引)。
②如果一个属性经常作为最大值和最小值等聚集函数的参数,则考虑在这个属性上建立索引。
③如果一个(或一组)属性经常在连接操作的连接条件中出现,则考虑在这个(或这组)属性上建立索引。
关系上定义的索引数并不是越多越好,系统为维护索引要付出代价,查找索引也要付出代价。
(2)hash索引存取方法的选择
选择 hash 存取方法的规则如下:如果一个关系的属性主要出现在等值连接条件中或主要出现在等值比较选择条件中,而且满足下列两个条件之一,则此关系可以选择hash存取方法。
①一个关系的大小可预知,而且不变。
②关系的大小动态改变,但数据库管理系统提供了动态hash存取方法。
(3)聚簇存取方法的选择
为了提高某个属性(或属性组)的查询速度,把这个或这些属性(称为聚簇码)上具有相同值的元组集所存放在的连续物理块称为聚簇。
聚簇功能可以大大提高按聚簇码进行查询的效率,它不但适用于单个关系,也适用于经常进行连接操作的多个关系。一个数据库可以建立多个聚簇,一个关系只能加入一个聚簇。
①设计候选聚簇的条件
a.对经常在一起进行连接操作的关系可以建立聚簇;
b.如果一个关系的一组属性经常出现在相等比较条件中,则该单个关系可建立聚簇;
c.如果一个关系的一个(或一组)属性上的值重复率很高,则此单个关系可建立聚簇即对应每个聚簇码值的平均元组数不太少。
②检查候选聚簇
a.从聚簇中删除经常进行全表扫描的关系;
b.从聚簇中删除更新操作远多于连接操作的关系;
c.不同的聚簇中可能包含相同的关系,一个关系可以在某一个聚簇中,但不能同时加入多个聚簇。要从这多个聚簇方案(包括不建立聚簇)中选择一个较优的,即在这个聚簇运行各种事务的总代价最小。
04确定数据库的存储结构
确定数据库物理结构主要指确定数据的存放位置和存储结构,包括确定关系、索引、聚簇、日志、备份等的存储安排和存储结构,确定系统配置等。
确定数据的存放位置和存储结构要综合考虑存取时间、存储空间利用率和维护代价三方面的因素。这三个方面常常是相互矛盾的,因此需要进行权衡,选择一个折中方案。
(1)确定数据的存放位置
为了提高系统性能,应该根据应用情况将数据的易变部分与稳定部分、经常存取部分和存取频率较低部分分开存放。
(2)确定系统配置
关系数据库管理系统产品一般都提供了一些系统配置变量和存储分配参数,供设计人员和数据库管理员对数据库进行物理优化。初始情况下,系统都为这些变量赋予了合理的默认值。但是这些值不一定适合每一种应用环境,在进行物理设计时需要重新对这些变量赋值,以改善系统的性能。
05评价物理结构
评价物理数据库的方法完全依赖于所选用的关系数据库管理系统,主要是从定量估算各种方案的存储空间、存取时间和维护代价入手,对估算结果进行权衡、比较,选择出一个较优的、合理的物理结构。如果该结构不符合用户需求,则需要修改设计。
六、数据库的实施和维护
完成数据库的物理设计之后,设计人员就要用关系数据库管理系统提供的数据定义语言和其他实用程序将数据库逻辑设计和物理设计结果严格描述出来,成为关系数据库管理系统可以接受的源代码,再经过调试产生目标模式,然后就可以组织数据入库了,这就是数据库实施阶段。
01数据的载入和应用程序的调试
数据库实施阶段包括两项重要的工作,一项是数据的载入,另一项是应用程序的编码和调试。组织数据录入就要将各源数据从各个局部应用中抽取出来,输入计算机,再分类转换,最后综合成符合新设计的数据库结构的形式,输入数据库。
02数据库的试运行
在原有系统的数据有一小部分已输入数据库后,就可以开始对数据库系统进行联调试,这又称为数据库的试运行。这一阶段要实际运行数据库应用程序,执行对数据库的各种操作,测试应用程序的功能是否满足设计要求。在数据库试运行时,还要测试系统的性能指标,分析其是否达到设计目标。
03数据库的运行和维护
在数据库运行阶段,对数据库经常性的维护工作主要是由DBA完成的,它包括:
(1)数据库的转储和恢复
DBA 要针对不同的应用要求制定不同的转储计划,以保证一旦发生故障能尽快将数据库恢复到某种一致的状态,并尽可能减少对数据库的破坏。
(2)数据库的安全性、完整性控制
(3)数据库性能的监督、分析和改造
有些 DBMS 产品提供了监测系统性能参数的工具,DBA 可以利用这些工具方便地得到系统运行过程中一系列性能参数的值。
(4)数据库的重组织与重构造
DBA在重组织的过程中,按原设计要求重新安排存储位置、回收垃圾、减少指针链等,提高系统性能。数据库的重组织并不修改原设计的逻辑和物理结构,而数据库的重构造则不同,它是指部分修改数据库的模式和内模式。