一. 数据库设计过程的概述
1. 基本概念
(1). 数据库设计定义
数据库设计就是根据各种应用处理的要求、硬件环境及操作系统特性等,将现实世界中的数据进行合理组织,并利用已有的数据库管理系统(DBMS)来建立数据库系统的过程。
2. 设计流程
(1). 需求分析(设计的基础、最困难、最耗时)
1. 目的
了解和分析系统将要提供的功能及未来数据库用户的数据需求
2. 系统需求分析流程
① 需求概述和系统边界
② 主要业务处理流程
③ 功能需求分析
④ 数据需求分析
⑤ 业务规则及完整性约束分析
3. 结果
这一阶段分析的结果是形成用户的需求规格说明
(2). 概念设计
1. 要求
根据需求分析中得到的信息,设计者次阶段需选择适当的工具将这些需求转化为数据库的概念模型
2. 流程
一般是建立各个子系统(即对应外模式的局部应用)的概念模型,再综合得到整个系统的概念模型。
3. 主要内容
我们主要基于E-R模型的数据库概念设计,通过实体、联系、属性等概念和工具精确的描述系统的数据模型,不受采用逻辑数据模型的限制影响,根据数据库系统的具体实现转换为特定的逻辑数据模型
4. 主要步骤
① 确定基本实体集及属性
② 主要业务局部概念建模
③ 定义联系集及属性
④ 画出完整的E-R图
(3). 逻辑设计
1. 步骤
将数据库的概念设计转化为所选择的数据库管理系统支持的逻辑数据模型,即数据库模式
(4). 模式求精
1. 目的
以关系数据理论作为指导,对已得到的关系数据库模式进行分析,找出潜在的问题并加以改进和优化,如减少数据冗余,消除更新、插入、删除异常
2. 定义
模式求精是运用关系理论(如函数依赖理论、多值依赖理论等)对已有的关系模式进行结构调整、分解、合并、优化,以满足应用系统的功能和性能需求
3. 步骤
(5). 物理设计
1. 概念
考虑数据库要支持的负载和应用需求,为逻辑数据库选取一个最合适现实应用的物理结构
包括数据库文件组织格式、内部存储结构、建立索引、表的聚集
2. 目标
- 提高数据库性能,以满足应用的性能需求
- 有效利用存储空间
- 在性能和代价之间做出最优平衡
3. 数据库的物理结构依赖DBMS和运行环境,设计人员要考虑以下内容
- 数据库的物理组织
- 确定数据存储结构
- 确定数据存取路径
- 确定系统配置
- 物理结构评价
- 影响物理设计的主要因素
(6). 应用与安全设计
1. 数据库系统安全要求
数据库系统必须指出哪些用户可以访问数据库以及它们通过哪些存储过程访问数据库,还要描述每个用户在每个过程所扮演的角色,对每个角色必须明确指出它们能够存取数据库的哪些部分
二. 数据设计流程的详解
2.1 概念设计——E-R模型
2.1.1 E-R模型基本概念及表示
在现实世界中,事物内部以及事物之间存在着各种各样的联系
事物内部的联系表现为组成事物的各个特征之间的联系
事物之间的联系表现为不同事物之间的联系E-R模型采用实体集、联系集、属性3个基本概念分别描述事物、联系、特征
(1). 实体与实体集
1. 什么是实体?
2. 实体的特征
3. 什么是实体集
4. 实体集的特征
5. 实体集的分类
- 弱实体集
- 强实体集
(2). 属性
1. 什么是属性?
2. 属性的特征
3. 属性的域
4. 描述学生实体集的数据字典
5. 属性的分类
- 简单属性
- 复合属性
- 单值属性
- 多值属性
- 派生属性
注:
6. 多值属性的变换
- 方案一
方法:将多值属性转换为多个单值属性进行表示
缺点:
- 缺少弹性,当需要增加电话时,需要修改模型
- 浪费存储空间,不是所有学生都有4个电话
- 方案二
方法:将多值属性单独建模为一个弱实体集,他依赖于原实体集而存在
(3). 联系与联系集
1. 什么是联系?
2. 什么是联系集
3. 多联系
4. 实体的角色
5. 联系集的度
(4). 使用E-R图来表示实体集、属性、联系
2.1.2 约束
(1). 映射约束
1. 什么是联系集R的映射基数
2. 二元联系中,映射基数分类
(1). 一对一
- 定义
A中的一个实体至多同B中的一个实体相联系,B中的一个实体至多同A中的一个实体相联系 - 举例:实体集销货单和发票参与的联系集开发票
(2). 一对多
- 定义
A中的一个实体至多同B中的任意数目的实体相联系,而B中的一个实体至多同A中的一个实体相联系 - 举例:实体集班级和学生参与的联系集包含
(3). 多对多
- 定义
A中的一个实体可以同B中任意数目的实体相联系,而B中的一个实体也可以和A中任意数目的实体相联系 - 举例:实体集学生和课程参与的联系集选课
(4). 使用E-R图来反映联系集的映射基数
(5). 什么类型联系集可以有自己的联系属性
- 多对多的联系集
- 一对多的联系集
(2). 码约束
1. 实体集的码
超码
候选码
主码
2. 联系集的码
3. 联系集的属性安置
联系集可以有属性,也可以没有属性,要根据应用语义而定,但多值联系必有属性
二元联系集的属性安置,要根据联系集的映射基数而定
- 一对一联系集的属性:可以安置在任一边的实体集上
- 一对多联系集的属性:可安置在联系集上,也可安置在多的那一边的实体集上
- 多对多联系集的属性:描述相关联实体集间的交互性语义,只能安置于联系集上
(3). 依赖约束
实体集间的联系含有各种不同的语义,各实体在联系集中的成员资格也不一样。有的实体集完全独立于其他实体集而存在,有的实体集依赖于另一实体集的存在而存在
1. 定义
2. 分类
实体集与联系集之间的依赖约束
实体集之间的依赖约束
(4). 参与约束
分类
- 实体集A全部参与联系集R
- 实体集A部分参与联系集R
(5). 多值联系
1. 定义
指在同一个给定的联系集中,相关联的相同实体之间可能存在多个联系
2. 举例
3. 上述E-R模型存在的问题
- 问题一:
当一个客户向同一银行申请多笔贷款时,则联系集中无法唯一标识一个联系
(即贷款不仅是一个多对多联系,还是一个多值联系) - 问题二
如果有多个银行联合发放一笔贷款,或由多个用户共同借一笔贷款,则会出现数据冗余问题
(在联系集中反映该笔贷款的贷款编号、贷款日期、等重复多遍)
4. 解决办法
将多值联系建模为依赖实体集或弱实体集
2.1.3 弱实体集
1. 什么是弱实体集
2. 标识实体集
3. 标识联系集
4. 部分码
5. E-R图实例
6. E-R表示弱实体集
- 双矩形表示弱实体集
- 双菱形表示标识联系集
- 虚下划线表示弱实体集部分码
注:
7. 弱实体集的适用范围
(1). 多值联系建模为弱实体集
(2). 多值属性转换为弱实体集
2.1.4 扩展E-R模型
(1). 类层次
- 什么是ISA
表示高层实体和低层实体之间的“父类-子类”联系,称为类层次或属性继承(子类继承父类所有属性) - E-R模型实例
E-R模型使用实体集的继承和ISA联系来描述这种概念上的层次关系
(2). 聚合
1. 什么是聚合?
2. 聚合的E-R建模
- 方式一
- 方式二
2.1.5 E-R模型建模问题
(1). E-R建模的基本原则
-
忠实性
简单性
-
避免冗余
选择实体集还是属性
- 满足以下规则可作为属性对待
- 选择实体集还是联系集
多元联系转化为二元联系
举例一:
举例二:
(2). 依赖约束的建模
(3). 多值联系的建模
1. 将多值联系建模为弱实体集
2. 将多值联系建模为依赖实体集
2.1.6 数据库概念设计实例
大学选课系统
2.2 逻辑设计——E-R模型转换为关系模型
2.2.1 E-R模型转化方法
(1). 强实体集转化方法
(2). 弱实体集转化方法
(3). 复合属性及多值属性转化方法
(4). 类层次转化方法
(5). 聚合转化方法
2.2.2 E-R模型转化实例
大学选课系统
2.3 数据库模式求精
2.3.1 设计数据库出现的问题
(1). 数据冗余导致的问题
-
什么是数据冗余
- 数据冗余会导致什么问题
- 解决方法
(2). 模式分解导致的问题
- 模式分解引出的问题
- 如何解决呢?
问题一的解决办法
问题二的回答
所以:不是所有的模式分解都是有益的
2.3.2 模式求精的要求和解决办法
(1). 模式求精的要求
减少冗余进行模式分解,分解后的模式是具有无损连接、保持依赖的特性
(2). 模式求精的解决办法
通过以下方法解决数据冗余和模式分解带来的问题:
- 函数依赖
- 范式
- 函数依赖理论
- 模式分解算法
2.3.3 函数依赖定义
函数依赖(functional dependency ,FD)是一种完整性约束,是现实世界事物属性之间的一种制约关系,它广泛的存在于现实世界之中
函数依赖指关系模式中属性之间存在的一种约束。这种约束关系既可以是现实世界事物或联系的属性之间的客观存在的约束,也可以是数据库设计者根据应用需求或设计需要强加给数据的一种约束
无论什么约束,进入数据库的数据都要严格遵守
(1). 什么是函数依赖
(2). 函数依赖的说明
(3). 函数依赖的分类
1. 平方与非平凡函数依赖
- 定义
- 注:
2. 完全函数依赖和部分函数依赖
- 定义
- 举例理解完全、部分依赖
-
部分函数依赖的问题
导致数据冗余集各种异常
3. 传递函数依赖
- 定义
- 举例理解传递函数依赖
-
传递函数依赖带来的问题
导致数据冗余及产生各种异常(更新异常、插入异常、删除异常)
2.3.4 范式
1. 出现原因
判断一个关系模式,缺点他的设计好坏,设计不好就要将其分解为一些小的关系模式,来减少数据库中数据冗余的过程
所以我们要了解当前关系模式中属性之间的关系(范式)
2. 定义
范式来自英文Normal form,简称NF。
设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式
3. 分类
上述范式一级比一级要求得严格,一般来说,数据库只需满足第三范式(3NF)就行了他们之间的联系:
4. 第一范式:表中无表
- 定义
- 第一范式目标
- 举例
5. 第二范式:非主属性完全依赖于候选码的整体
- 定义
- 举例
解决办法:
- 总结
- 第二范式目标
- 第二范式的缺点
6. 第三范式:所有非主属性都直接依赖于候选码的整体
-
定义
-
第三范式的目标是:
- 举例理解
7. 巴斯-科德范式(BCNF):消除主属性对码的部分和传递依赖
- 为什么需要BC范式
- 定义
- 满足BCNF的关系模式必然满足下列结论
2.3.5 函数依赖理论
1. 函数依赖集闭包
-
引出问题一
对于给定的关系模式r(R)及其函数依赖集F,有时候只考虑给定的函数依赖集是不够的,而需要考虑在r(R)上总是成立的所有函数依赖
-
举例:为什么只考虑给定的F是不够的
原因:通过方法证明,给定的函数依赖可以引出新的函数依赖
-
引出定义一
- 什么是闭包
- 如何计算给定函数依赖集F的闭包
- 举例:理解通过Armstrong公理求函数依赖集闭包
2. 属性集闭包
-
为什么需要属性集闭包
如果想要判断一个给定的函数依赖α→β是否在函数依赖集F的闭包中,不用计算F+就可以判断出来,通过计算属性集闭包方式来判断
-
属性集闭包的定义
属性集闭包计算方法
举例理解
- 计算属性集闭包的作用
- 为什么要根据属性集闭包找出所有的候选码
- 候选码的寻找步骤
- 举例理解
3. 正则覆盖
4. 无损连接分解(必须具有)
- 无损连接定义
- 无损连接分解定义
- 举例
5. 保持依赖分解(可以没有)
- 保持依赖定义
- 保持依赖分解定义
- 举例
2.3.6 模式分解算法
定义:一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级的范式
1. 具有函数依赖的数据库设计目标
BCNF、无损连接、保持依赖
但是由于有时不能同时达到这3个目标,不得不在BCNF和3NF中作出选择,而这取决于实际应用需求
2. BCNF分解算法
- 定义
- BCNF分解算法理解
- 举例判断关系模式是否为BCNF,不是的话怎么分解
先分解谁结果可能一样,也可能不一样
3. 3NF分解算法
2.3.7 模式求精实例
网上书店