6.1问题的提出——为什么要学习关系数据理论
6.1.1问题——什么是一个好的数据库逻辑设计
关系模式存在问题:
- 数据冗余度太大,浪费存储空间
- 更新异常
- 插入异常
- 删除异常
问题原因
由于模式中的某些数据依赖引起
什么是数据依赖
- 完整性约束的一种表现形式
- 一个关系中属性间值的相等与否体现出来的数据间的相互关系
- 包含函数依赖,多值依赖,连接依赖等
- 不合适会造成插入异常,删除异常,更新异常和数据冗余
6.2规范化
6.2.1函数依赖
定义
设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等则称“X函数确定Y"或“Y函数依赖于X”,记作Ⅹ→Y
平凡函数依赖与非平凡函数依赖
平凡函数依赖:X→Y,且Y ⊆ \subseteq ⊆X
非平凡函数依赖:X→Y,且Y ⊈ \nsubseteq ⊈X
由于对于任意关系模式,平凡函数依赖必定成立,故通常讨论非平凡函数依赖
完全函数依赖和部分函数依赖
在关系模式R(U)中,如果Ⅹ→Y,并且对于X的任何一个真子集X,都有X’→Y,则称Y完全函数依赖于X。若Ⅹ→Y,但Y不完全函数依赖于Ⅹ,则称Y部分函数依赖于Ⅹ。
传递函数依赖
在R(U)中,如果X→Y,(Y ⊈ \nsubseteq ⊈X),Y!→Ⅹ,Y→Z
,则称Z对X传递函数依赖.
如果Y→X,即X←→Y,则Z直接依赖于X。
6.2.2码
候选码
K为关系R(U,F)中的属性或属性组合,若U完全函数依赖于K,则K为R的一个候选码
若U部分函数依赖于K,则K为R的一个超码
主码
若关系R有多个候选码,选定其中一个作为主码
主属性与非主属性
包含任何一个候选码中的属性,称为主属性
不包含任何码中的属性,称为非主属性或非码属性
全码
整个属性组是码
外码
关系模式R(U,F)中属性或属性组非R的码,但是另一个关系模式的码,称为外码
6.2.3范式
范式种类
规范化
一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这个过程就叫规范化
第一范式
如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF
第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据模式。
6.2.4第二范式
第一范式出现的问题
- 插入异常
- 删除异常
- 数据冗余度大
- 修改复杂
解决方法:投影法分解关系模式,消除部分函数依赖
定义
若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于R的码,则R∈2NF
6.2.5第三范式
第二范式出现的问题
- 插入异常
- 删除异常
- 数据冗余度大
- 修改复杂
解决方法投影分解法,消除传递函数依赖
定义
关系模式R(U,F)∈1NF,若R中不存在这样的码X、属性组Y及非主属性Z(Z ⊈ \nsubseteq ⊈Y),使得X→Y,Y→Z,Y!→X,成立,则称R(U,F)∈3NF。
性质
- 若R∈3NF,则R的每一个非主属性既不部分函数依赖于候选码也不传递函数依赖于候选码
- 如果R∈3NF,则R∈2NF
- 采用投影分解法将一个2NF的关系分解为多个3NF的关系,可以在定程度上解决原2NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。
- 将一个2NF关系分解为多个3NF的关系后,并不能完全消除关系模式中的各种异常情况和数据冗余。
6.2.6BC范式
第三范式存在问题
- 插入异常
- 删除异常
- 数据冗余度大
- 修改复杂
解决方法:投影分解法,去除主属性对码的部分函数依赖
定义:
设关系模式R<U,F>∈1NF,如果对于R的每个函数依赖X→Y,且Y ⊈ \nsubseteq