前言
在一个不规范化的关系模式中可能会出现数据冗余、插入异常、更新异常和删除异常,如果要解决这些问题就要用到规范化理论
规范化
规范化可以直观地描述将具有不合适性质的关系转换为更合适的形式。一个低一级范式的关系模式通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化
函数依赖
设R(U)是属性集U上的关系模式,X, Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数确定Y或Y函数依赖于X,记作X->Y
函数依赖和别的数据依赖一样是语义范畴的概念,只能根据语义来确定一个函数依赖
- 非平凡函数依赖 ,X->Y,但Y⊈X,则称X->Y是非平凡的函数依赖
- 平凡函数依赖,X->Y,但Y⊆X,则称X->Y是平凡的函数依赖
- 完全函数依赖,X->Y,并且对于X的任何一个真子集X’,都有X’-/->Y,则称Y对X完全函数依赖
- 部分函数依赖,X->Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖
- 传递函数依赖,X->Y,Y-/->X,Y->Z,Z⊈Y则称Z对X传递函数依赖
码
详细在数据库原理(五)- 关系数据结构及形式化定义中可知
范式
关系数据库中的关系是要满足一定要求的,满足不同程度要求的为不同范式,规范化共有1NF、2NF、3NF、BCNF、4NF、5NF五个等级,对于各种范式之间的关系可以描述为:
5NF ⊂ 4NF ⊂ BCNF ⊂ 3NF⊂ 2NF ⊂ 1NF
1NF
1NF需要满足每个分量必须是不可分的数据项
student(Sno,Sname,Ssex)
2NF
若R∈1NF,且每一个非主属性完全函数依赖于任何一个候选码,则R∈2NF
R(Sno,Con,Ggrade) F{(Sno,Cno)->Ggrade} //如学号+课程号才可以知道这门课程的成绩,
又假如使用学号就可以知道这门课程的成绩,这个关系模式中具有部分函数依赖
3NF
若R∈2NF,且每一个非主属性不传递函数依赖于码
错误示例
R(Sno,Sdept,Sloc) F{Sno->Sdept,Sdept->Sloc}
//通过学号可以知道所在系,通过所在系可以知道宿舍楼所在地,以此可知通过学号可以知道你的宿舍楼所在地 ,
R关系模式中包括传递函数依赖
我们可以通过模式分解来消除R关系中的传递依赖,达到3NF
R1(Sno,Sdept) R2(Sdept,Sloc)
BCNF
- 所有非主属性对每一个候选键都是完全函数依赖;
- 所有的主属性对每一个不包含它的候选键,也是完全函数依赖;
- 没有任何属性完全函数依赖于非候选键的任何一组属性
多值依赖
设R(U)是一个属性集合U上的一个关系模式,X, Y, 和Z是U的子集,并且Z=U-X-Y,多值依赖X->->Y成立当且仅当对R的任一个关系r,r在(X,Z)上的每个值对应一组Y的值,这组值仅仅决定于X值而与Z值无关。
若X->->Y,而Z=空集,则称X->->Y为平凡的多值依赖;否则,称X->->Y为非平凡的多值依赖.
4NF
如果它是BC范式,并且没有多值依赖关系,那么关系将是4NF
5NF
如果它在4NF 中并且不包含任何连接依赖关系并且连接应该是无损的,则关系在5NF 中,当所有表都被分成尽可能多的表以便避免冗余时,满足5NF
数据依赖的公理系统
数据依赖的公理系统是模式分解的理论基础,下面首先讨论函数依赖的一个有效而完备的公理系统 —— Armstrong公理系统
Armstrong公理系统设为U为属性集总体,F是U上的一组函数依赖,于是有关系模式R<U,F>来说有以下推理规则:
- 自反律(Reflexivity):若Y Í X Í U,则X →Y为F所蕴含(平凡函数依赖)
- 增广律(Augmentation):若X→Y为F所蕴含,且Z Í U,则XZ→YZ为F所蕴含
- 传递律(Transitivity):若X→Y及Y→Z为F所蕴含,则X→Z为F所蕴含(传递函数依赖)
根据前面三条推理规则可以得到下面三条很有用的推理规则
- 合并规则:由X→Y,X→Z,有X→YZ (2,3)
- 伪传递规则:由X→Y,WY→Z,有XW→Z (2,3)
- 分解规则:由X→Y及 ZÍY,有X→Z (1,3)
模式的分解
对于一个模式的分解时多种多样的,但是分解后产生的模式应与原模式等价
人们从不同的角度去观察问题,对”等价“的概念形成了三种不同的定义:
- 分解具有无损连接性
- 分解具有保持函数依赖
- 分解既要保持函数依赖,又要具有无损连接性
这三个定义是实行分解的三条不同的准则。按照不同的分解准则,模式所能达到的分离程度各不相同,各种范式就是对分离程度的测度