数据库设计
7.1数据库设计概述
数据库设计,广义地讲,是数据库及其应用系统的设计,即设计整个数据库应用系统;狭义地讲,是设计数据库本身,即设计数据库各级模式并建立数据库,这是数据库应用系统设计的一部分。数据库设计是指对于一个给定的应用环境,构造(设计)优化的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使之能够有效地存储和管理数据,满足各种用户的应用需求,包括信息管理要求和数据操作要求。信息管理要求是指在数据库中应该存储和管理哪些数据对象;数据操作要求是指对数据对象需要进行哪些操作。
7.1.1数据库设计的特点
“三分技术,七分管理,十二分基础数据”是数据库设计的特点之一。“十二分基础数据”强调了数据的收集、整理、组织和不断更新是数据库建设中的重要环节。结构(数据)设计和行为(处理)设计相结合;数据库设计应该和应用系统设计相结合。
7.1.2数据库设计的基本步骤
在数据库设计过程中,需求分析和概念结构设计可以独立于任何数据库管理系统进行,逻辑结构设计和物理结构设计与选用的数据库管理系统密切相关。
1.需求分析阶段(数据库设计规划阶段)
进行数据库设计首先必须准确了解与分析用户需求(包括数据与处理)。需求分析是整个设计过程的基础,是最困难和最耗费时间的一步。
2.概念结构设计阶段
概念结构设计是整个数据库设计的关键,它通过对用户需求进行综合、归纳与抽象,形成一个独立于具体数据库管理系统的概念模型。
3.逻辑结构设计阶段
逻辑结构设计是将概念结构转换为某个数据库管理系统所支持数据模型,并对其进行优化。
4.物理结构设计阶段
物理结构设计是为逻辑数据模型选取一个最适合应用环境的物理结构(包括存储结构和存取方法)。
5.数据库实施阶段
设计人员运用数据库管理系统提供的数据库语言及其宿主语言,根据逻辑设计和物理设计的结果建立数据库,编写与调试应用程序,组织数据入库,并进行试运行。
6.数据库运行和维护阶段
数据库应用系统经过试运行后即可投入正式运行。在数据库系统运行过程中必须不断地对其进行评估、调整和修改。
7.2需求分析(数据库设计规划阶段)
7.2.1需求分析的任务
需求分析的任务是通过详细调查现实世界要处理的对象(组织、部门、企业等),充分了解原系统(手工系统或计算机系统)的工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能。
调查的重点是“数据”和“处理”,通过调查、收集与分析,获得用户对数据库的如下要求:
(1)信息要求。指用户需要从数据库中获得信息的内容与性质。由信息要求可以导出数据要求,即在数据库中需要存储哪些数据。
(2)处理要求。指用户要完成的数据处理功能,对处理性能的要求。
(3)安全性与完整性要求。
可行性分析是数据库设计规划阶段的一步。
7.2.2数据字典
数据流(程)图DFD和数据字典DD是对需求分析结果进行描述的两个主要工具。
数据字典是进行详细的数据收集和数据分析所获得的主要成果。它是关于数据库中数据的描述,即元数据,而不是数据本身。数据字典是在需求分析阶段建立,在数据库设计过程中不断修改、充实、完善的。数据字典通常包括数据项、数据结构、数据流、数据存储和处理过程几部分。其中数据项是数据的最小组成单位,若干个数据项可以组成一个数据结构。数据字典通过对数据项和数据结构的定义来描述数据流、数据存储的逻辑内容。
数据项:不可再发的数据单位。
数据结构:数据结构反映了数据之间的组合关系。一个数据结构可以由若干个数据项组成,也可以由若干个数据结构组成,或由若干个数据项和数据结构混合组成。
数据流:是数据结构在系统内传输的路径。
数据存储:是数据结构停留或保存的地方,也是数据流的来源和去向之一。
处理过程:处理过程的具体处理逻辑一般用判定表或判定树来描述。
7.3概念结构设计
将需求分析得到的用户需求抽象为信息结构(即概念模型)的过程就是概念结构设计。设计数据库概念结构,常用的数据抽象方法是聚集和概括。
7.3.1概念模型
主要特点:能真实、充分的反映现实世界,包括事物和事物之间的联系,能满足用户对数据的处理要求,是现实世界的一个真实模型。易于理解,可以用它和不熟悉计算机的用户交换意见。易于更改,当应用环境和应用要求改变时容易对概念模型修改和补充。易于向关系、网状、层次等各种数据模型转换。
7.3.2E-R模型
1.实体之间的联系
实体内部的联系通常是指组成实体各属性之间的联系,实体之间的联系通常是指不同实体型的实体集之间的联系。
两个实体型之间的联系
一对一联系:如果对于实体集A中的每一个实体,实体集B中至多有一个(也可以没有)实体与之联系,反之亦然。
一对多联系:如果对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系,反之,对于实体集B中的每一个实体,实体集A中至多有个一个实体与之联系。
多对多联系:如果对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系,反之,如果对于实体集B中的每一个实体,实体集A中有n个实体(n≥0)与之联系。
两个以上的实体型之间的联系。
单个实体型内的联系。
一般地,把参与联系的实体型的数目称为联系的度。两个实体型之间的联系度为2,也称二元联系。
2.E-R图
实体型用矩形表示,属性用椭圆形表示,联系用菱形表示。
7.3.5概念结构设计
1.实体与属性的划分原则
为了简化E-R图的处置,现实世界的事物能作为属性对待尽量作为属性对待。作为属性,不能再具有需要描述的性质,即属性必须是不可分的数据项。属性不能与其他实体具有联系。
2.E-R图的集成
即首先设计各子系统的分E-R图,然后将它们集成起来,得到全局E-R图。E-R图的集成一般分两步走。合并:解决各分E-R图之间的冲突,将分E-R图合并起来生成初步E-R图。修改和重构:消除不必要的冗余,生成基本E-R图。
(1)合并E-R图,生成初步E-R图
各子系统的E-R图之间的冲突主要有三类:属性冲突、命名冲突和结构冲突。
属性冲突:属性域冲突,即属性值的类型、取值范围或取值集合不同。属性取值单位冲突。
命名冲突:同名异义,即不同意义的对象在不同的局部应用中具有相同的名字。异名同义,即同一意义的对象在不同的局部应用中具有不同的名字。
结构冲突:同一对象在不同应用中具有不同的抽象。同一实体在不同子系统的E-R图中所包含的属性个数和属性排列次序不完全相同。实体间的联系在不同的E-R图中为不同的类型。
(2)消除不必要的冗余,设计基本E-R图
在初步E-R图中可能存在一些冗余的数据和实体间冗余的联系。所谓冗余的数据是指可由基本数据导出的数据,冗余的联系是指可由其他联系导出的联系。
消除冗余主要采用分析方法,即以数据字典和数据流图为依据,根据数据字典中关于数据项之间逻辑关系的说明来消除冗余。但并不是所有冗余数据和冗余联系都必须加以消除,有时为了提高效率,不得不以冗余信息作为代价。规范化理论消除冗余:确定分E-R图实体之间的数据依赖。求FL的最小覆盖GL,差集为D=FL-GL。冗余的联系一定在D中,而D中的联系不一定是冗余的。当实体之间存在多种联系时,要将实体之间的联系在形式上加以区分。
7.4逻辑结构设计
7.4.1E-R图向关系模型的转换
E-R图向关系模型的转换要解决的问题是,如何将实体型和实体间的联系转换为关系模式,如何确定这些关系模式的属性和码。关系模式的设计应尽可能含有直接关系的属性,不要包含有有间接关系的属性。
数据库逻辑设计中进行模型转换时,首先将概念模型转换为与特定的DBMS无关的,但为一般的关系模型、网状模型或层次模型所表示的一般模型;然后将一般模型转换为特定DBMS支持的逻辑模型。
一个实体型转换为一个关系模式,关系的属性就是实体的属性,关系的码就是实体的码。
一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,每个实体的码均是该关系的候选码。如果与某一端实体对应关系模式合并,则需要在该关系模式的属性中加入另一个关系模式的码和联系本身的属性。
一个1:n联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。如果转换为一个独立的关系模式,则与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为n端实体的码。
一个m:n联系转换为一个关系模式,与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,各实体的码组成关系的码或关系码的一部分。
三个或三个以上实体间的一个多元联系可以转换为一个关系模式,与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,各实体的码组成关系的码或关系码的一部分。
具有相同码的关系模式可合并。
7.4.2数据模型的优化
数据库逻辑设计的结果不是唯一的。确定数据依赖。对于各个关系模式之间的数据依赖进行极小化处理,消除冗余的联系。按照数据依赖的理论对关系模式逐一进行分析,考察是否存在部分函数依赖、传递函数依赖、多值依赖等,确定各关系模式分别属于第几范式。对关系模式进行必要分解,提高数据操作效率和存储空间利用率。水平分解和垂直分解。
7.4.3设计用户子模式
可以利用视图功能设计更符合局部用户需求的用户外模式。使用更符合用户习惯的别名。可以对不同级别的用户定义不同的视图,以保证系统的安全性。简化用户对系统的使用。
7.5物理结构设计
确定数据库的物理结构,在关系数据库中主要指存取方法和存储结构。对物理结构进行评价,评价的重点是时间和空间效率。
7.5.1数据库物理设计的内容和方法
对于数据库查询事务:查询的关系;查询条件所涉及的属性;连接条件所涉及的属性;查询的投影属性。
对于数据更新事务:被更新的关系;每个关系上的更新操作条件所涉及的属性;修改操作要改变的属性值。
通常关系数据库物理设计的内容主要包括为关系模式选择存取方法,以及设计关系、索引等数据库文件的物理存储结构。
7.5.2关系模式存取方法的选择
常用的存取方法为索引方法和聚簇方法。
1.B+树索引存取方法的选择
所谓选择索引存取方法,实际上就是根据应用要求确定对关系的哪些属性列建立索引、哪些属性列建立组合索引、哪些属性列要设计唯一索引。如果一个(或一组)属性经常在查询条件中出现,则考虑在这个(或这组)属性上建立索引(或组合索引)。如果一个属性经常作为最大值和最小值等聚集函数的参数,则考虑在这个属性上建立索引。如果一个或一组属性经常在连接操作的连接条件中出现,则考虑建立索引。
2.hash索引存取方法的选择
如果一个关系的属性主要出现在等值连接条件中或主要出现在等值比较条件中,而且一个关系的大小可预知,而且不变;关系的大小动态变化,但数据库管理系统提供了动态hash存取方法,则可选择hash存取方法。
3.聚簇存取方法的选择
为了提高某个属性或属性组的查询速度,把这个或这些属性上具有相同值的元组集中存放在连续的物理块中称为聚簇,该属性或属性组称为聚簇码。聚簇功能不但适用于单个关系,也适用于经常进行连接操作的多个关系。即把多个连接关系的元组按连接属性值聚集存放。
一个数据库可以建立多个聚簇,一个关系只能加入一个聚簇。对经常在一起进行连接操作的关系可以建立聚簇;如果一个关系的一组属性经常出现在相等比较条件中,则该单个关系可建立聚簇;如果一个关系的一个或一组属性上的值重复率很高,则此单个关系可建立聚簇。从聚簇中删除经常进行全表扫描的关系;从聚簇中删除更新操作远多于连接操作的关系;不同的聚簇可能包含相同的关系,一个关系可以在某一个聚簇中,但不能同时加入多个聚簇。
7.5.3确定数据库的存储结构
1.确定数据的存放位置
2.确定系统配置
7.6数据库的实施和维护
7.6.3数据库的运行和维护
在数据库运行阶段,对数据库经常性的维护工作主要是由数据库管理员完成的。
数据库的转储和恢复
数据库的安全性、完整性控制
数据库性能的监督、分析和改造
数据库的重组织和重构造数据库的重组织并不修改原设计的逻辑和物理结构,而数据库的重构造则不同,它是指部分修改数据库的模式和内模式。