第一节 数据库设计概述
设计者需要拥有计算机专业知识和应用业务经验。
一 数据库生命周期
二 数据库设计目标
①满足应用功能需求
②良好的数据库性能
三 数据库设计内容
数据库设计是从用户对数据的需求出发,研究并构造数据库的过程。
(1)数据库结构设计:模式和子模式
(2)数据库行为设计:通常通过应用程序实现
四 数据库设计方法
是数据库设计更加合理的指导原则。可以分为三类:
①直观设计法
②规范设计法
③计算机辅助设计法
(1)直观设计法
利用设计者的经验和技巧来设计;由于缺乏科学的理论指导,设计质量难以保证,目前已不适用。
(2)规范设计法
普遍、通用。最常用的有:
①新奥尔良(New Orleans)设计方法
公认的较为完善和权威方法;分为四个阶段:
需求分析 \Rightarrow 概念结构设计 \Rightarrow 逻辑结构设计 \Rightarrow 物理结构设计
特点是:注重数据库结构设计,而不太考虑数据库行为设计。
②基于E-R模型的设计方法
基本思想是在需求分析的基础上用E-R图构造一个反映现实世界实体之间联系的模式;然后将此模式转换成某一特定DBMS下的概念模式。
③基于第三范式的设计方法
是一类结构化设计方法;基本思想是:在需求分析的基础上,首先确定数据库的模式、属性即属性见的依赖关系;然后将它们组织在一个单一的关系模式中;再分析模式中不符合第三范式的约束条件,进行模式分解,规范成若干个第三范式关系模式的集合。
(3)计算机辅助设计法
计算机辅助软件工程(CASE)工具。
例如:Rational公司的Rational Rose等工具。
五 数据库设计的过程
反复执行(修正设计)上图这些阶段的工作就是设计过程。
第二节 数据库设计基本步骤
目前分阶段规范设计方法得到广泛的应用;
按照自顶向下,逐步求精的原则。
设计的过程分解为若干个相互有依赖的阶段,每一阶段采用不同的技术与工具,解决不同的问题,从而将问题局部化,减少局部问题对整体设计的影响;因而有利于多人合作。
各阶段也被称为步骤。
数据库设计可分为:
①数据库结构设计:
需求分析 > 概念结构设计 > 逻辑结构设计 > 物理结构设计 > 数据库实施 > 数据库的运行与维护
②数据库行为设计:与一般传统程序设计区别不大,可利用软件工程中的方法和工具完成。
一 需求分析
需求分析是数据库设计的起点;是了解与分析用户的信息与应用处理要求后并将结果按照一定格式整理而形成需求分析报告。它是后续数据工作的依据。
基本方法:听取数据库应用部门工作人员报告并与之座谈。
可以提供需求调查表、查阅原始资料甚至跟班作业等。
1 确定数据库范围
设计人员借助机构与职能关系图来确定数据库范围;下入是一张示例图:
该图标识了机构及其承担的职能关系。
设计人员从中分析和了解主次关系,从而确定应用功能的主次序列,然后考虑经费、设备及人员因素;确定一个尽可能满足应用需求而又切实可行的数据库范围。
2 应用过程分析
指了解数据和数据处理之间的关系。
再数据库范围确定之后,设计人员应逐一地了解和分析每个部门或功能需要使用到那些数据以及数据的使用顺序,对数据做哪些处理、处理策略以及处理结果。
应用过程分析结果是数据库结构设计的重要依据,也是数据库应用程序编写的依据。
3 收集与分析数据
了解并分析数据的组成格式及操作特征,每个数据元素的语义及关系等。
数据流程图(软件工程中的一个概念)中设计的数据都是收集和分析的对象。
DFD图(Data Flow Diagram) DFD图,即数据流图,是表达功能模型的工具。它是一种描述数据变换的图形化工具,其中包含的元素可以是数据流、数据存储、加工、数据源和数据潭等。
(1)静态结构
不施加操作时数据的原始状态
①数据分类表
用于数据的总体描述;应给出每一单类数据单位的名称、用途、编制者以及使用者等说明;示例格式如下:
数据ID | 数据名 | 用途 | 主人 | 用户 | 来源 | 去向 | 存储时间 | 数据量(个数) |
②数据元素表
数据项或者属性。每一类数据的所有数据元素名称、类型、长度、意义及算法等都应再数据元素表中进行详尽地说明;示例格式如下:
数据ID | 数据元素ID | 元素名 | 意义 | 类型 | 长度 | 算法 | 备注 |
(2)动态结构
指将操作施加于数据之后数据的状况;可通过任务分类表和数据擦做特征表来说名。
①任务分类表
根据对数据流程图的分析,可将业务处理过程划分为不同的任务。通常一个任务是指为完成某一特定处理功能的相对独立的操作序列;示例格式如下:
任务ID | 名称 | 功能 | 类型 | 主人 | 用户 | 执行日期 | 频率 | 操作过程 | 备注 |
②数据操作特征表
用以描述任务和数据之间关系
任务ID | 数据ID | 建立 | 查询 | 插入 | 修改 | 删除 | 数据量 |
(3)数据约束
指使用数据时的特殊要求:
①Data的安全保密性(权限)
②Data的完整性(范围与验证)
③响应时间
④数据恢复
4 编写需求分析报告
是需求分析阶段的一个总结;逐步形成,反复修改完善,应能准确地表达应用需求;要求可读性强,且无二义性,能为数据库后续设计提供全面、准确和详细的资料。需要包含:
①DB应用功能与目标
②标明不同用户视图范围
③应用处理过程需求说明
④数据字典:即元数据
⑤数据量:静态+动态数据总量
⑥数据约束
二 概念结构设计
满足应用需求的用户信息结构,也称为概念模型。它独立于任何软硬件。方法有两类:
①实体分析法:自顶向下 <= 本教程使用的
②属性综合法:自底向上
三 逻辑结构设计
目标是将概念模型转化为等价的,并且为特定DBMS所支持的数据模型结构。
常见的模型结构有:
①层次模型
②网状模型
③关系模型 <= 本教程使用
(1)逻辑设计的输入与输出
输入:
①独立于特定DBMS的概念模型
②有关响应时间、安全保密性、数据完整性及恢复方面的要求说明,一致性规则说明
③数据量及使用频率
④特定DBMS特性:支持的数据模型及数据定义语言的说明
输出:
①一个特定DBMS支持的概念模型,或称之为模式
②一个或多个外部视图,或称之为子模式
③物理设计说明;主要有:存入数据库的数据量、使用频率及响应时间要求
④程序设计说明,编制各种程序名、执行逻辑步、存取数据名、顺序及操作特征的说明
(2)逻辑结构设计的步骤
四 物理设计
给定数据库逻辑结构,研究并构造物理结构的过程。具体的任务有:
①确定存储结构及存取方法
②建立索引和聚集
③物理块大小
④缓冲区个数和大小
⑤数据压缩的选择
⑥……
五 数据库实施
建立数据库并试运行。
(1)加载数据
将初始数据装在到数据库中。
(2)应用程序设计
严格来说它不是数据库设计的范畴,但它只能随着数据库结构设计的进展而逐步地并行进行。
(3)数据库试运行
按实际环境要求运行应用程序并进行各种操作并检验其功能和性能;根据试运行的记过进行改进。
六 数据库运行与维护
试运行后投入生产环境中运行;标识着数据库设计和应用开发工作基本完成,但帮补意味着设计和应用开发工作的终止。
因为可能会暴露出原本为发现的问题,也可能长期运行后导致存储结构的变坏或存取效率下降;另外,应用需求也有可能发生改变或者扩展。
所有这些都需要工作人员再系统中做好维护工作;监督、发现和分析问题,提出改进或扩展方案并付诸实施。此外,还应定期或者不定期进行数据转储,以保障可恢复性并实施安全和完整性控制。
维护中最困难的工作是数据库的重组与重构。
重组:回收碎片,提高空间利用率和存取效率。
重构:修改部分逻辑或物理结构,这往往因应用需求的改变与扩展或发现当初的设计欠妥而引起。
第三节 关系数据库设计方法
设计过程与其他数据库书记过程是一样的。
其中,关系数据库的概念结构设计与逻辑结构设计是关系数据设计过程的关键。
一 关系数据库设计过程与各级模式
二 概念结构设计方法
采用自顶向下法:
首先,建立局部信息结构;然后将它们合成全局信息结构并优化。其中使用E-R图作为概念模型设计的描述工具。
1 E-R图的表示方法
概念结构设计就是将需求分析得到用户需求抽象为信息结构(即概念模型)的过程,它通常用E-R图作为描述现实世界的建模工具。
实体之间的联系通常是不同实体型的实体集之间的联系。
单个实体的内在联系:
两个实体间联系的类型有:
多个实体间联系的类型有:
2 局部信息结构设计
不同用户视图所建立的满足该范围内用户需求的信息结构称为局部信息结构。
(1)确定局部范围
依据需求分析报告中用户视图范围;可根据情况增减。
(2)选择实体
依据数据分类表
(3)选择实体的关键字属性
实体的存在依赖于关键字;需要考虑唯一性。
(4)确定实体间的联系
(5)确定实体属性
标识属性:可用作关键字
说明属性:用作描述实体的一般特性,单值不允许嵌套和重复
一个E-R图的示例:
用户与部门局部E-R图:
用户与用户组之间局部E-R图:
用户组与权限之间局部E-R图:
3 全面信息结构设计
局部信息机构的合并。
消除局部信息结构中可能的数据不一致,增强共享性,控制冗余性。
合并过程是不断发现和解决冲突的过程。冲突的类型有:
①属性冲突
属性域冲突:相同属性的值的类型和取值范围不同
属性取值单位不同:如身高,有的使用米未单位,有的使用厘米作为单位
冲突解决办法:协商
②命名冲突
同名异义
异名同义
冲突解决办法:协商
③结构冲突
同一对象在E-R图A中作为实体,而在E-R图B中作为属性
同一实体在不同E-R图中属性个数、类型不同
实体之间的联系在不同E-R图中是不同类型的
解决办法:一般通过技术手段解决
全面E-R模型优化的目标:
①实体类型个数尽可能少
②实体类型所包含的属性尽可能少
③实体类型间的联系无冗余
全面E-R模型优化的步骤:
①相关实体类型合并
②消除不必要的冗余属性
③消除不必要的冗余联系
例:合并后的全面E-R模型
三 逻辑结构设计方法
概念模型转化为具体的DBMS所支持的逻辑数据模型,也就是生成数据库的模式和外模式。
1 E-R图向关系模型转换
①一个实体型转化为一个关系模式,实体属性作为关系的属性,实体的码做为关系的码。
②一个一对一(1:1)联系可以转化为一个独立关系模型,也可以域任意一端对应的关系模型合并。
③一个一对多(1:N)联系可以转化为一个独立的关系模型,也可以与N端对应的关系合并。
④一个多对多(M:N)联系转换为一个关系模式。
⑤三个或三个以上实体的一个多元联系可以转换为一个关系模式
⑥具有相同码的关系可以合并
例:前面的全局E-R图可以转换为以下关系(主键下划线标识)
用户(用户id,用户名,口令,年龄,所属用户组[外键],所在部门[外键])
用户组(组id,组名,描述)
部门(部门id,名称,地址,领导)
权限(权限id,权限名,权限描述)
拥有(id,组id,用户id)
拥有是由全面E-R模型中的多对多关系转化来的。
2 数据模型优化
数据库逻辑设计的结果不是唯一的;通常可以以关系规范化理论中作为指导。其方法为:
①确定各属性间的函数依赖关系
②对各关系模型之间的数据依赖进行极小化处理,消除冗余
③判断每个关系的范式,根据需要确定最合适的范式
④按需求分析阶段得到的处理要求,分析这些模式对于这样的应用环境是否合适
⑤对关系模型进行必要的分解,提高数据操作的效率和存储空间利用率
3 设计用户子模式
利用视图设计更符合局部用户需要的外模式,外模式与模式是相对独立的,外模式注重考虑用户的习惯与方便,包括:
①重新定义某些属性的别名,使得更加符合用户习惯;
②对不同用户级别定义不同的视图,保证安全性;
③简化用户对系统的使用;例如将复杂的查询定义为视图,简化用户使用。
四 物理设计方法
关系数据库的优点之一是用户通常不用进行数据存储结构和存取方法的设计。正因此使得用户失去对数据库存取路径的控制而影响到DB的存取效率。
物理设计的任务主要是对关系建立索引和聚集来实现与应用相关数据的逻辑连接和物理聚集,以改善对数据库的存取效率。
1 建立索引
索引的建立是通过DBMS提供的命令实现的。建立索引会带来维护索引的空间和开销,因而建立索引的对象通常应具有较少的插入、修改和删除操作。
一般用以建立索引的属性也应是其所在关系中使用较为频繁的属性。建立索引的方式有静态索引和动态索引两种。
静态索引指应用人员预先建立的索引,一旦建立,后续的应用程序均可直接使用该索引存取数据,适合用户较多且使用周期较长的数据。
这种索引结构在初始创建,数据装入时就已经定型,而且在整个系统运行期间,树的结构不发生变化,只是数据在更新。
缺点是不利于更新,插入或删除时效率低
动态索引是应用人员在程序内临时建立的索引,适合单独用户或临时使用。(似乎和普世的认知有差别,个人认为书上这里的定义是错的)
在整个系统运行期间,树的结构随数据的增删及时调整,以保持最佳的搜索效率。
缺点是实现算法复杂。
2 建立聚集
是将相关数据集中存放的物理存储技术,用来提高I/O命中率,改善存取速度,有DBMS提供。
集中存放是指将相关数据尽可能地存放于同一个物理块中,或同一个磁道,或同一个柱面,或相邻区域(块、磁道、柱面等)中。
数据使用频率较高的数据才有必要建立聚集,数据量通常较大,且更新操作应该少。