数据库原理--规范化理论

关系数据库规范化理论

一。问题的提出
现实工作中,如何将工作中的一组数据存储到计算机数据库中,如何对存储在数据库的数据能方便进行快捷的操作,这就是所谓的数据逻辑结构问题。这也是数据库管理中一个非常重要的问题
1。关系模式存在的问题
假设学生管理中有关系为:
SDUENT(学号,姓名,性别,出生年月,系名,课号,课名,成绩,学时)
(sno,sname,ssex,symd,depart,cno,cname,degree,Ctime)
001 王一 男 1990-11-12 计算机 K01 数学 90 80
001 王一 男 1990-11-12 计算机 K02 物理 90 80
001 王一 男 1990-11-12 计算机 K03 化学 90 70
001 王一 男 1990-11-12 计算机 K04 英语 90 100
001.....
002 王二 男 1990-11-12 计算机 K01 数学 90 80
002 王二 男 1990-11-12 计算机 K02 物理 90 80
002 王二 男 1990-11-12 计算机 K03 化学 90 70
002 王二 男 1990-11-12 计算机 K04 英语 90 100
002
....

分析此关系,会造成如下问题存在:
1)数据的冗余度(SNO,SNAME,SSEX,CNO,CNAME)
2)数据的不一致(修改CNAME可能造成数据不一致)
3)数据插入异常(有一门新课,如何保存课程信息)
4)数据删除异常(将一门课删除,这门课的信息一起删除)

分析结论:
此表问题多,不是一张好的关系模式,即不规范。
不规范的原因在于:数据之间存在数据依赖关系有关

2。学生表中数据之间的依赖关系分析
函数依赖:指关系表中属性之间存存的一定依赖关系。

学号决定(姓名,性别,出生年月,系名)
即当学号确定后,姓名,性别,出生年月,系名就唯一确定了。
换句话:学生表中不可能出现,学号相同且姓名不同的现象存在。

课号决定(课名,学时)

学号+课号决定(成绩)

记作: SNO-->SNAME,SSEX,SYMD,DEPART
CNO-->CNAME,CTIME
SNO,CNO-->DEGREE

正是以上的数据依赖关系,存在于一张关系表中,所以造成众多问题.


3.问题的解决:折分不规范表
R1(学号,姓名,性别,出生年月,系名)
R2(学号,课号,成绩)
R3(课号,课名,学时)

分析分解后的关系,是否解决以上问题。
冗余多基本解决
不一致基本解决
插入异常解决
删除异常解决

理论上问题
如何从将SDUENT关系进行分解,理论上依据是什么?

二. 函数依赖
1. 函数依赖定义:
定义1--函数依赖:在R(U)关系中,如果Y属性值依赖于X属性值,则称Y函数依赖于X.
记作:X->Y

例:关系模式(学号,姓名,性别...)
表中不存在着学号相同,而姓名不同的现象,(即学号是主码), 则学号唯一

决定了姓名,它们之间存在着函数依赖关系.
记为: 学号-->姓名
同理:学号-->性别
学号-->出生年月


定义2--平凡函数依赖:在R(X,Y)关系中,如果已有X->Y,且Y又是X中的一个子属性,则称X与Y的函数依赖为平凡函数依赖。
记作 Y∈X
例: 关系模式(学号,姓名,性别,课号,成绩)
(学号,课号)--学号
(学号,课号)--课号
且,学号是主码(学号,课号)中的一个子集,则称学号平凡孙数依赖于主码(学号,课号)

定义3--完全函数依赖: 在关系模式R(U)中,如果X->Y,且对于X中的任何一个子集X',都有X'≠>Y,则Y对X完全函数依赖.
记为: X_f_>Y

例: 在上表中,有(学号,课号)-->成绩,且学号≠成绩,课号≠成绩,成绩只能依赖于学号和课号,即不可能有学号和课号相同,而成绩不同的现象,故成绩完全依赖于(学号,课号).
记为:(学号,课号)_f_>成绩

定义4--部分函数依赖: 在关系模式R(U)中,如果X-->Y,但Y不是完全依赖于X,则称Y部分函数依赖于X.
记为:X_P_Y

例: 在上表中,有(学号,课号)-p->姓名,但姓名只是依赖于学号与课号中的学号,则此依赖为部份函数依赖。
记为(学号,课号)_p_>姓名。

定义5--传递函数依赖: 在关系模式R(U)中,如果X-->Y,且Y≮X,而Y-->z,则称z传递依赖于X.
记为: X_t_>z
例:
关系模式(学号,姓名,性别,系号,系名)
有(学号)-->系号,且系号不能决定学号,而(系号)-->系名
则: 系名传递函数依赖于学号
记为: 学号-t-系名



三。属性之间关系所存在的函数依赖

1。属性之间:1对1关系---存在函数依赖关系

2。属性之间:1对M关系--存在函数关系

3。属性之间:M对N关系---不存在函数依赖关系

例:关系(学号,姓名,性别,系号,系名,班号,宿舍区号)
关系主码:学号
函数依赖:
(学号)->姓名
(学号)->性别
(学号)->班号,
(学号)->系号
(系号)->系名,(系号)->宿舍区号
(学号)-T-系号
(学号)-T-宿舍区号

R1(学号,姓名,性别,班号,系号)
R2(系号,系名,宿舍区号)


四。公理
从函数依赖的一套推理规则。由ARMSTRONG提出,即ARMSTRONG公理
公理1:自反律--如果B->A,则A->B
公理2:增广律--如果A->B,则AC->BC
公理3:传递律--如果A->B,且B->C,则A->C

由上面公理得到推论
推论1:自合规则--A->A
推论2:分解规则--如果A->BC,则A->B,A->C
推论3:合并规则--如果A->B,A->C,则 A->BC
推论4:复合规则--如果A->B,C->D,则 AC->BD

范例:设有关系模式R,有A,B,C,D,E,F

是它的属性集中的子集,R满足下列函数依赖:
F={A->BC,CD->EF},证明:函数依赖AD->F成立。
证明:
1)A->BC 给定
2)A->C 分解规则
3)AD->CD 增广律
4)CD->EF 给定
5)AD->EF 传递律(由第3,4得)
6)AD->F 分解规则

五.范式及规范化

1.什么叫范式及范式分析
1)所谓范式:满足一定的约束条件的关系式。
2)范式分析:将一个存在有数据冗余、插入异常、删除异常问题的关系模式,分解为多个关系模式的过程,称为“范式分析”,或叫范式规范化.
3)分解原则:分解后的若干关系,经连接运算后仍能恢复原关系的所有信息及函数依赖关系。

2. 范式的判定条件及规范化

1) 第一范式 (first normal form,简记为1NF)
定义:如果关系模式R中的每个属性A的值域都是不可分的原子项,那么称R是第一范式。

说明:满足1NF的关系称为规范化的关系,否则称为非规范化的关系。
关系数据库研究的关系都是规范化的关系

规范化:如果一个非规范化的关系,依次检查每个属性的取值,如果是组合情况,即不是最小单位,就进行属性值的最小化拆分,分解不可再分的原子项即可。

2。第二范式 2NF
定义:如果一个关系模式R是1NF,且每个非主属性完全函数依赖于主码,那么称R是第二范式(2NF)的模式。
规范化:通过消除关系中非主属性对主码的部分依赖成分,使之满足2NF。
无损分解:即分解原关系为2NF后,不应丢失原来的信息,即分解后的若干关系,经连接运算后仍能恢复原关系的所有信息。

例: 有关系:(学号,姓名,性别,课号,成绩)
范式分析:首先:关系表1NF范式
关系主码为:(学号,课号)
函数依赖为:
(学号,课号)_p__(姓名) ,
(学号)->(姓名)
(学号,课号)_p__(性别) ,
(学号)->(性别)
(学号,课号)_f___(成绩)
故关系模式不是2NF
投影分解:R1(学号,姓名,性别)
R2(学号,课号,成绩)

新关系函数依赖分析:
R1:主码:学号
依赖:学号-F->姓名,学号-F->性别
R2: 主码: 学号+课号-F->成绩


3。第三范式 3NF
定义:如果关系模式R是2NF,且每个非主属性都不传递依赖于R的候选键,那么称R是第三范式(3NF)的模式。
或:R关系中的每个非主属性既不部分依赖于主码,也不传递依赖于主码,这样的R关系称为第三范式。

例:表(学号,姓名,性别,出生年月)---1NF,2NF,3NF
分析: 主码:学号
平坦结构:1NF

(学号)-f->(姓名)
(学号)-f->(性别)
(学号)-f->(出生年月)
故:此表为1NF,2NF,3NF

例:表(教师号,姓名,性别,系号,系名,系电话)
分析:主码: 教师号
平坦结构: 1NF
函数依赖:
(教师号)-F->(姓名)
(教师号)-F->(性别)
(教师号)-F->(系号)
(系号)->(系名)
(系号)->(系电话)
(教师号)-T->(系名)
(教师号)-T->(系电话)
故表是2NF,但不是3NF

无损分解: R1(学号,姓名,性别,系号)
R2(系号,系名,系电话)

4。BC范式 (BCNF) 扩充第三范式
定义:在关系模式R(U)中,如果所有非平凡的、完全的函数依赖的决定因素是码,则这个关系为BCNF范式。
定义: 在关系模式R(U)中,如果对于R中的每个函数依赖X->Y,若Y不属于X,则X必含有候选码,则R称为BCNF.
记为:R∈BCNF
BC范式必定是第三范式。

推论: 如果一个关系R为BCNF,则有以下要求:
1. 所有非主属性对每一个码都是完成函数依赖
2. 所有主属性对于每一个不包含它的码,也是完全函数依赖.
3. 没有任何属性完全函数依赖于非码的其他属性.

例: 关系(学号,姓名,性别,年龄)
语义:
候选码: 学号(主码,主属性)
分析: 1.所有非主属性(姓名,性别,年龄)完成依赖于学号.
2.只有一个主属性
3.所有非主属性之间不存在相互完全函数依赖
结论: 关系为1NF,2NF,3NF,BCNF

例: 关系(学生S,课程C,名次P)
语义:每一学生,可选修不同课程,且有一名次
每门课程中每一名次只有一个学生(没有并列名次)
依赖:(S,C)->P
(C, P)->S
候选码: (S,C)和(C,P)
分析: 主码任意取等候码中一个,非主属性完全依赖于主码,
并没有非主属性与主码之间的传递关系,除(S,C)(C,P)
外没有其他决定因素.
结论: 关系为BCNF

例: 关系(学生S,教师T,课程C)
语义:每一教师只教一门课,每门课可由多个教师教,每一学生可选修某门课程,对应一个固定教师

依赖:(S,C)->T
(S,T)->C
(T)->C
候选码: (S,C)和(S,T)
分析1: 主码任意取等候码中一个,非主属性完全依赖于主码
则表是3NF.
分析2 T->C,这里T是决定因素,但T不包含码,则表不是BCNF
分解STC关系:
R1(S,T)
R2(T,J)

例: 关系(街道名S,城市名C,邮政编号Z)
语义:
依赖: (S,C)->Z

(Z,S)->C
Z->C
候选码: (S+C), (Z,S)
分析1: 表中所有属性都属于候选码,且不存存非主属性,也没有相互传递依赖关系,故表为3NF,但它不是BCNF.
分析2: 表中存在z->C,Z是决定因素,但Z不包含码,所以关系(SCZ)不是BCNF.
分解关系:
R1(Z,C)
R2(S,Z)






范例:关系(学生,课号,课名,教师)---2NF,非3NF,非BC范式
学号 姓名 课号 课程 教师
0001 王刚 K01 C++ 王强
0002 刘洪 K02 VB 刘强
0003 张红 K03 JAVA 张梅
................

分析:学号-->姓名
学号-->课号
课号-->老师
学号_t_>教师
以上有传递依赖的关系,故该不是第三范式,也非BC范式
分解:R1(学号,姓名,课程)
R2(课程,老师)
说明:分解后的二个关系中的函数依赖达到定义中的要求,故是BC范式


范例:学生(学号,姓名,性别,课号,课名,成绩)---1NF,非2NF
范式分析:学生关系中主码为:(学号,课号)
(学号,课号)_p__(姓名) 非完全函数依赖
(学号,课号)_p__(性别) 非完全函数依赖
(学号,课号)_p___(课名) 非完全函数依赖
(学号,课号)_f___(成绩) 完全函函数依赖
分析结果: 关系表中不是所有非主属性都是完全函数依赖主码,故不是BC范式
投影分解:R1(学号,姓名,性别)
R2(学号,课号,成绩)
R3(课号,成绩)
分解结果分析:R1,R2,R3关系中所有非主属性都完全函数依赖主码,故三个关系都是BC范式。

4。4 关系模式的分解

关系模式规范化:将一个存在有数据冗余、插入异常、删除异常问题的关系模式,分解为多个关系模式(范式)的过程,称为“范式分析”,或叫范式规范化

规范化原则:分解过程必须是无损分解:即分解后的若干关系,经连接运算后仍能恢复原关系的所有信息及函数依赖关系。(分解后的关系模式信息没有丢失,且数据间语义联系必须存在)

一。无损分解

1。无损分解定义:原关系模式下任一舍法的关系值在分解后应能通过自然连接运算恢复起来。

2。无损分解的充要条件:R1 R2--(R1-R2) 或 R1 R2--(R1-R2)

二。无损分解的测试方法 (难点)


三。保持函数依赖的分解




思考
1。设有如下的关系模式R:
课程名 教师名 教师地址
C1 王刚 D1
C2 刘强 D1
C3 马列 D3
C4 王刚 D1

A D E
a1 d

1 e2
a2 d6 e2
a3 d4 e3

1)列出它的所有候选码 :课程名
2)列出它的函数依赖关系:F=(课程名--教师名,教师名--教师地址,课程名_t__教师地址)
3)它当前属于第几范式?:根据函数依赖关系,它属于:2NF

1)列出它的所有候选码 :A,D
2)列出它的函数依赖关系:F=(A--D,A--E,D--A,D--E,A_f_D,A_f_E,D_f_A,D_f_E)
3)它当前属于第几范式?:根据函数依赖关系,它属于:BC




2。设有如下的关系模式R:
工程号 材料号 数量 开工日期 完工日期 价格
P1 I1 4 9805 9902 250
P1 I2 6 9805 9902 300
P1 I5 15 9805 9902 180
P2 I1 6 9811 9912 250
P2 I4 18 9811 9912 350

1)它当前为第几范式?1NF
2)它当前是否存在操作异常?冗余现象、修改异常、删除异常
在什么情况下发生异常?新增材料时日期数据会冗余,修改日期时可能会产生数据不一致,删除某工程号时可能将某一材料信息一同删除。
3)将它分解为更高级范式(1NF,2NF,3NF)

3。设有关系框架R(),R关系中的函数相关性集合F=(),当R关系分解为P()后,证明R的分解是否为无损分解?













相关文档
最新文档