文章目录
- 第九章关系规范化理论
- 9.1关系模式设计问题
- 9.2函数依赖
- 9.2.1基本概念
- 9.2.2一些术语和符号
- 9.2.3函数依赖的推理规则
- 9.2.4闭包及候选键求解方法
9.1关系模式设计问题
一、数据冗余问题
二、数据更新问题
三、数据插入问题
四、数据删除问题
小结:出现这些问题是由于关系模式没有处理好,解决以上问题就是进行模式分解成两个或多个关系模式,在分解的过程中消除那些“不良”的函数依赖,从而获得良好的关系模式。
9.2函数依赖
9.2.1基本概念
一般把X函数决定Y,或Y函数依赖于X表示X——>Y
(例如:X为城市,Y为省,城市决定省,省依赖于城市)
9.2.2一些术语和符号
(1)如果X——>Y,但Y不包含于X,则称X——>Y是非平凡的函数依赖。
(2)如果Y函数不依赖与X,则记作X——/Y
(3)如果X——>Y,则称X为决定因子
(4)如果X——>Y,并且Y——>X,则记作X<——>Y
(5)如果X——>Y,并且对于X的任意真子集X'都有X'——/>Y,则称Y完全函数依赖于X,记作X——>fY;如果X'——>Y成立,则称Y部分函数依赖于X,记作X——>pY
(6)如果X——>Y(非平凡函数依赖,并且Y——/>X)、Y——>Z,则称Z传递函数依赖于X
(7)设K为关系模式R的一个属性或属性组,若满足:
K——f>A1,K——f>A2,........,K——f>An
则称K为关系模式R的候选键(或候选码)。称包含候选键中的属性为主属性,不包含在任何候选码中的属性称为非主属性。
小结:单属性是一个关系的主键/候选键时,是完全函数依赖;多属性则对应部分函数依赖。
9.2.3函数依赖的推理规则
1、Armstrong公理
(1)自反律
(2)增广律
(3)传递律
2、Armstrong公理推论
(1)合并规则
(2)分解规则
(3)伪传递规则
(4)复合规则
9.2.4闭包及候选键求解方法
一、函数依赖的闭包
1、定义:在关系模式R(U,F)中,U是R的属性全集,F是R上的一组函数依赖。所有被F逻辑蕴含的函数依赖的全集称为F+的闭包。
2、计算F+的过程
步骤一:初始F+=F
步骤二:对F+中的每一个函数依赖f,在f上应用自反性和增广性,将结果加入F+中,对F+中的一对函数依赖f1和f2,如果f1和f2可以使用传递律结合起来,则将结果加入F+中
步骤三:重复步骤二,直至F+不在增大为止。
3、例题:
设有关系模式R(A,B,C,G,H,I)及其函数依赖集F={A→B,A→C,CG→H,CG→I,B→H},判断A→H,CG→HI是否属于F+
解:
(1)A→H,由于有A→B,B→H,根据传递性,A→H
(2)CG→HI,由于CG→H,CG→I,根据合并规则,CG→HI
因此,A→H,CG→HI属于F+
二、属性依赖闭包
1、定义:设有关系模式R(U,F),U为R的属性集,F是R上的函数依赖集,X是 U的一个子集(X属于U)。用函数依赖推理规则可从F推出的函数依赖X→A中所有A的集合,称为属性集x关于F的闭包,记为X+(或X+f)。即:
X+={AIX→A能够由F根据Armstrong公理导出}
2、对关系模式R(UF),求属性集X相对于函数依赖集F的闭包X的算法如下:
步骤1:初始,X+=X。
步骤2:如果F中有某个函数依赖Y→Z满足Y属于X+。则X+=XUZ
步骤3:重复步骤2,直到X+不再增大为止。
三、候选键的求解方法
1、对于给定的关系模式R(A1,A2,``````,An)和函数依赖F,现将R的属性分为如下四类:
(1)L类:仅出现在函数依赖左部的属性
(2)R类:仅出现在函数依赖右部的属性
(3)N类:在函数依赖的左部和右部均不出现的属性
(4)LR类:在函数依赖的左部和右部均出现的属性
例如:A→B,B→C,A→C,I
A为L类,B为N类,C为R类,I为LR类
2、求解思路:
(1)L、N
(2)(L,N)+=U
(3)! 不等于LR
(4)(L,N,LR)+=U
(5)得候选键