数据库设计
数据库设计概述
数据库应用系统的生命期
- 数据库规划
- 需求描述与分析
- 数据库与应用程序设计
- 数据库设计实现
- 测试
- 运行维护
数据库设计的一般策略
有两种:自顶向下和自底向上
数据库设计的基本步骤
- 用户需求分析
- 概念结构设计
- 逻辑结构设计
- 物理结构设计
- 数据库实施阶段
- 数据库运行和维护阶段
系统需求分析
需求分析的任务、方法和目标
- 信息要求
- 处理要求
- 系统要求
需求分析阶段的文档
需求分析阶段的成果是系统需求说明书,主要包括
- 数据流图
- 数据字典
- 各种说明性表格
- 统计输出表
- 系统功能结构图等
数据字典(Data Dictionary,DD)是各类数据描述的集合,它是关于数据库中数据的描述,即元数据,而不是数据本身。如用户将向数据库中输入什么信息,从数据库中要得到什么信息,各类信息的内容和结构,信息之间的联系等。
数据字典包括
- 数据项
- 数据结构
- 数据流
- 数据存储
- 处理过程
概念结构设计
概念结构设计是在需求分析的基础上,依照需求分析中的信息要求,对用户信息加以分类、聚集和概括,建立信息模型
- 最常用的方法是实体-联系方法,简称E-R方法。它将现实世界的信息结构统一用实体、属性以及实体之间的联系来描述。
- 概念结构设计工作步骤包括
- 选择局部应用
- 选择适当层次的数据流图,让这一层的每一部分对应一个局部应用,实现某一项功能,从这一层入手,就能很好地设计分E-R图
- 逐一设计分E-R图
- 划分好各个局部应用之后,就要对每一个局部应用逐一设计分E-R图,又称为局部E-R图。
- 属性不可再分,即属性不再具有需要描述的性质,不能有属性的属性。
- 属性不能与其他实体发生联系,联系是实体与实体间的联系。
- 划分好各个局部应用之后,就要对每一个局部应用逐一设计分E-R图,又称为局部E-R图。
- E-R图合并
- 根据局部应用设计好各局部E-R图之后,就可以对各分E-R图进行合并。合并的目的在于解决冲突,消除冗余。
- 选择局部应用
分E-R图合并时,它们之间存在的冲突主要有以下三类:
- 属性冲突:同一属性可能会存在于不同的分E-R图中,由于设计人员不同或是出发点不同,对属性的类型、取值范围、数据单位等可能会不一致。
- 命名冲突:相同意义的属性,在不同的分E-R图上有着不同的命名,或是名称相同的属性在不同的分E-R图中代表着不同的意义,这些也需要进行统一。
- 结构冲突:同一实体在不同的分E-R图中有不同的属性,同一对象在某一分E-R图中被抽象为实体而在另一分E-R图中又被抽象为属性。
逻辑结构设计
在概念结构设计的基础上进行数据模型设计,可以是层次模型、网状模型和关系模型
逻辑结构设计阶段的主要工作步骤包括
- 确定数据模型
- 将E-R图转换成指定的数据模型
- 确定完整性约束
- 确定用户视图
E-R图向关系模式的转换
- 实体向关系模式的转换
- 联系向关系模式的转换
关系模式的规范化
- 关系模式的评价及修正。有时根据处理要求,可能还需要增加部分冗余以满足处理要求,这就需要做部分关系模式的处理,分解、合并或增加冗余属性,提高存储效率和处理效率。
确定完整性约束
用户视图的确定
- 根据数据流图确定处理过程使用的视图
- 根据用户类别确定不同用户使用的视图
数据库的物理设计
数据库在物理设备上的存储结构与存取方法称为数据库的物理结构。
为一个给定的逻辑数据模型设计一个最适合应用要求的物理结构的过程,就是数据库的物理设计。
物理设计的主要工作步骤包括:
- 确定数据分布
- 存储结构
- 访问方式
确定数据分布
- 根据不同应用分布数据。
- 根据处理要求确定数据的分布。
- 对数据的分布存储必然会导致数据的逻辑结构的变化,要对关系模式做新的调整,回到数据库逻辑设计阶段做必要的修改。
确定数据的存储结构
- 为提高数据的访问速度,通常会采用索引技术。在物理设计阶段,要根据数据处理和修改要求,确定数据库文件的索引字段和索引类型
- 存储结构具体指数据文件中记录之间的物理结构
确定数据的访问方式
- 存储记录结构设计
- 存储记录布局
- 存取方法的设计
数据库运行维护与管理
重组和重构
- 数据库重组是指
在不改变数据库逻辑和物理结构的情况下,去除数据库存储文件中的废弃空间以及碎片空间中的指针链,使数据库记录在物理上紧连。
- 数据库重构是指
数据库系统运行过程中,会因为一些原因而对数据库的结构做修改,包括表结构的修改和视图的修改
审计
- 审计是一种DBMS工具,它记录数据库资源和权限的使用情况。启用审计功能,可以产生审计跟踪信息,包括哪些数据库对象受到了影响,谁在什么时候执行了这些操作
- 审计是被动的,它只能跟踪对数据库的修改而不能防止,但作为一个安全性手段,起到对非法入侵的威慑作用,可以据此追究非法入侵者的法律责任
- 审计功能的开启会影响系统的性能
存储管理
在数据库系统运行过程中,随着数据的不断变更,会影响到系统的响应效率。通过以下手段进行存储管理,可有效地提高系统性能。
- 索引文件和数据文件分开存储,事务日志文件存储在高速设备上
- 适时修改数据文件和索引文件的页面大小
- 定期对数据进行排序
- 增加必要的索引项
SQL语句的编码检验
- 尽可能地减少多表查询或建立物化视图。
- 以不相关子查询替代相关子查询。
- 只检索需要的列。
- 用带IN的条件子句等价替换OR子句。
- 经常提交COMMIT,以尽早释放锁。
表设计的评价
- 如果频繁的访问是对两个相关的表进行连接操作,则考虑将其合并
- 如果频繁的访问只是在表中的某一部分字段上进行,则考虑分解表,将该部分单独作为一个表
- 对于更新很少的表,引入物化视图
- 物化视图是包括一个查询结果的数据库对象,它是远程数据的的本地副本,或者用来生成基于数据表求和的汇总表。物化视图存储基于远程表的数据,也可以称为快照。
索引维护和改进
- 如果查询是瓶颈,则在关系上建立适应的索引,通常在作为查询条件的属性上建立索引,可以提高查询效率
- 如果更新是瓶颈,每次更新都会重建表上的索引,引起效率的降低,则考虑删除某些索引
- 选择适当的索引类型,如果是经常使用范围查询,则B树索引比散列索引更高效
- 将有利于大多数据查询和更新的索引设为聚簇索引