文章目录
- 五、关系数据理论
- 1 数据依赖
- 1.1 概念回顾
- 1.2 关系模式的形式化定义
- 1.3 函数依赖
- 2 范式
- 2.1 第一范式(1NF)
- 2.2 第二范式(2NF)
- 2.3 第三范式(3NF)
- 2.4 BC范式
- 3 关系规范化
- 3.1 关系规范化程度原理图
- 3.2 关系规范化步骤
五、关系数据理论
1 数据依赖
1.1 概念回顾
- 关系:描述实体与属性、实体间的联系
- 关系模式:用于定义关系,对关系的描述
- 关系数据库:一组关系的组成
- 关系数据库模式:定义这组关系的关系模式的全体
1.2 关系模式的形式化定义
R(U,D,DOM,F)
- R:关系名
- U:属性集合
- D:属性类型(域)
- DOM:属性向域的映像集合
- F:属性间数据的依赖关系集合(函数依赖)
简化为:R(U,F)
当且仅当U上的一个关系r满足F时,r称为关系模式R(U,F)的一个关系
1.3 函数依赖
数据依赖指的是一个关系中属性间的依赖关系。主要的数据依赖是函数依赖。
函数依赖:R中的所有关系实例均要满足的约束条件。
多值依赖:一个X对应多个Y,即X→→Y
非平凡多值依赖:X→→Y,但Z=空。非平凡多值依赖:X→→Y,也X→→Z
举个例子:(函数依赖)
- 一个表中人不允许重名,则:姓名 → 年龄,学号 → 姓名
- 即:姓名决定年龄,学号决定姓名
- X → Y:X决定Y;Y依赖于X
- X ↔ Y:相互依赖,相互决定
函数依赖分类
- 平凡函数依赖:若 X → Y,但 Y ⊆ X(废话)
- 非平凡函数依赖:若 X → Y,但 Y ⊄ X
- 完全函数依赖:X是一个集合(不是也行),他能 X → Y,但X的子集不能推出Y,X —> f _f f Y
- 部分函数依赖:X是一个集合,他能 X → Y,但X的子集也能推出Y,X → p _p p Y
- 传递函数依赖:X → Y,Y → Z,且Y⊄X,Y!→X,则Z传递函数依赖于X
码
设K是关系模式R(U,F)中的属性或者属性集合
如果:K → f _f f U,即U完全依赖于K,则称K为R的一个候选码,若关系模式中有多个候选码,则选其中一个作为主码
码的特点:
- 候选码能唯一的表示关系的元组,是关系模式中一组最重要的属性
- 组成候选码的属性称为主属性,其他属性称为非主属性
如何推出候选码?
把所有的函数依赖写出来,选出能决定所有属性的属性集合,这个集合就是码
2 范式
关系数据库中的关系必须满足一定的要求,满足不同程度要求的为不同范式
范式:符合某一种级别的关系模式的集合
某一关系模式R为第n范式,简记为 R ∈ n N F R∈nNF R∈nNF
2.1 第一范式(1NF)
定义:要求一个关系模式中所有的属性都是不可分的基本数据项
特点:
- 对关系模式最基本的要求就是满足第一范式
- 不满足第一范式的数据库模式不能称为关系数据库
- 满足第一范式的关系模式不一定是一个好的关系模式
缺点:存在很多不完全函数依赖会有很多问题,如:
- 插入异常、数据冗余、删除异常等
- 插入异常:由于码值的一部分为空而不能将有用的信息作为一个元组插入到关系中
- 更新异常:例如改员工的组,那么员工的所有销售额对应的分组和组长都要更新。维护数据完整性代价大
- 删除异常:例如将某个组的员工移动到另一组,这个组的信息会随着组员的调动而全部丢失
原因:存在于模式中的某些数据依赖引起的
解决:分解关系模式来消除不合适的数据依赖
2.2 第二范式(2NF)
定义:若关系模式满足1NF,且每一个非主属性完全依赖于关系模式的码,则该关系模式满足2NF
缺点:存在传递函数依赖,导致冗余异常。主属性可能部分函数依赖于码
解决:继续分解(投影分解法)===>3NF
2.3 第三范式(3NF)
定义:若关系模式满足1NF,且不存在非主属性对码的传递函数依赖,则该关系模式满足3NF
特点:2NF是特殊的3NF,可证明,即 R ∈ 3 N F R∈3NF R∈3NF可推出 R ∈ 2 N F R∈2NF R∈2NF
缺点:主属性可能部分函数依赖于码。导致数据冗余等异常。
2.4 BC范式
定义:满足1NF基础上,每一个函数依赖的决定属性集都包含候选码,则 R ∈ B C N F R∈BCNF R∈BCNF
性质:
- 非主属性完全函数依赖每个候选码
- 主属性完全依赖于不包含它的候选码
- 没有任何属性完全依赖于非码的任何一组属性
和3NF的关系:
- 属于BC范式,必属于3NF
- 属于3NF,且只有一个候选码,必属于BC
重要性:
- 如果一个关系模式满足BC范式,说明它已经在函数依赖的范畴内实现了彻底分解
- 达到最高的规范化程度
- 消除了插入异常和删除异常
3 关系规范化
3.1 关系规范化程度原理图
3.2 关系规范化步骤
无损连接性的模式分解:
- 原始关系模式 与 分解后的所有子关系模式自然连接的总结果 相等
- 保证不丢失信息
- 会丢失函数依赖
保持函数依赖的模式分解:
- 原始模式的函数依赖一定也由分解得到的某个关系模式中函数依赖所包含
- 减轻或解决各种异常情况
注:分解后必须满足无损链接和保持函数依赖