关系规范化理论 | 数据库原理
虽然但是吧……
这节课学习的内容在实践中基本不会用到这些概念, 不过感觉如果想深入了解数据库的底层特别是看数据库的底层数据操作函数源代码, 特别是想要了解其处理逻辑的原则, 那么这些概念应该还是很有参考性的.
所以就记了这篇文章了
泛关系模型
简单说就是全部数据都写到一个表中,这样子会造成大量的数据冗余
函数依赖和范式
定义4.1
定义4.2
定义4.3
由定义可以导出下列概念:
决定因素
若X→y,则X叫做决定因素
平凡的函数依赖
X-→V,yCX,则称X-→y是平凡的函数依赖
非平凡的函数依赖
X→y,且X不包含Y,则称X→y是非平凡的函数依赖。
互相依赖
若X→y,y→X,则记作X←-→y。 若y不函数依赖于X,则记作X→W。
完全函数依赖
在R(U)中,如果X→Y, 并且对于X的任何一个真子集X’,都有X!→Y,则称 Y对X完全函数依赖。记作: x – F-> Y,
部分函数依赖
在R(U)中, 如果X→Y,并且对于X的一一个真子集X’ , 有X’→Y,则称Y对X部分函数依赖。记作: x- P y
传递函数依赖
在R(U)中,如果X- >Y,(Y不是X的真子集),Y !-> X, Y→Z, 则称Z对X传递函数依赖。记作X→Z(通过t),
码的函数依赖
候选码, 主码, 主属性
主码:
若候选码多于一个,则选定其中的一个为主码。
外码:
关系模式R中属性或属性组X并非R的码,但X是另一-个关系模式的码,则称X是R的外码
- 主码与外码提供了一个表示关系间联系的手段
主属性:
包含在任何一一个侯选码中的属性。
全码:
整个属性组都是主属性
超码:
一个包含关键字的属性集合也能用函数决定(不是完全函数依赖,而是部分函数确定)属性全集,这种包含主码的属性集合称为超码。
范式(规范化)
我们将低级范式转化为高级范式的过程就称为规范化
第一范式(1NF)
定义:满足关系的每一个分量是不可分的数据项这- 条件的关系模式就属于第一-范式(1NF)。
解决方法:用原子属性取代复合属性
问题:存在多值属性,不属于1NF 解决方法:将多值属性拆分
缺点:
- 冗余太大
- 操作异常 1)插入异常 2)删除异常 3)修改异常
第二范式(2NF)
定义: 若R∈1NF, 且每一个非主属性完全函数依赖于码,则R∈ 2NF。
就是在一范式的基础上不存在部分函数依赖, 只存在完全函数依赖
作用: 消除非主属性对主码的部分函数依赖
问题: 存在非主属性对码的部分函数依赖
解决方法: 分解为多个满足2NF的关系模式
缺点:
- 仍存在
第三范式(3NF)
定义:关系模式R (U,F)中若不存在这样的码X,属性组Y及非主属性组Z (Z不是Y的真子集) ,使得X- >Y,(Y!->X),Y>Z成立,则称R(U,F)∈3NF
若R∈2NF,且每一个非主属性不传递依赖于码,则R E3NF。
即:若R∈3NF, 且每一个非主属性既不部分依赖于码也不传递依赖于码。
作用: 消除非主属性的传递函数依赖
优点:
- 分解后的关系模式,减小了冗余,消除了操作异常,
若R∈3NF,且每一个非主属性既不部分依赖于码也不传递依赖于码。 若R∈2NF,且每一个非主属性不传递依赖于码则R∈3NF。
- 凡是满足3NF的关系,–般都能获得满意的效果。但是某些情况下,3NF仍会出现问题。原因是没有对主属性与关键字之间给出任何限制,
- 如果出现主属性部分或传递依赖于KEY,则也会使关系性能变坏
BC范式(BCNF)
定义:关系模式R(U,F)∈1NF。若X-→Y且Y$ X时X必含有码,则R(U,F) ∈BCNF
即:关系模式R(U,F)中,若每一个决定因素都包含码,则R(U,F)∈BCNF。
实际上BCNF就是在3NF的基础上使得每个决定元素都包含码(候选码)
一个 满足BCNF的关系模式有:
- 所有非主属性对每一个码都是完全函数依赖。
- 所有主属性对每一个不包含它的码也是完全函数依赖。
- 没有任何属性完全函数依赖于非码的任何一组属性。