9.1关系模式设计的问题
1、数据冗余问题
2、数据更新问题
3、数据插入问题
4、数据删除问题
9.2函数依赖
1、基本概念:一般把X函数决定Y,或Y函数依赖于X表示为:XY。
2、一些术语和符号:
(1)如果XY,但Y不包含于X,则称X
Y是非凡的函数依赖。如不做特别说明,我们讨论的都是非平凡的函数依赖。
(2)如果Y不函数依赖于X,则记作X不函数依赖于X。
(3)如果XY,并且Y
X,则称X为决定因子。
(4)如果XY,并且Y
X,则记作X
Y。
(5)如果XY,并且对于X的一个任意真子集X'都有X’不函数依赖于Y,则称Y完全函数依赖于X,记作X
fY;如果X‘
Y成立,则称Y部分函数依赖于X,记作X
pY。
(6)如果XY(非平凡函数依赖,并且Y不函数依赖于X)、Y
Z,则称Z传递函数依赖于X。
(7)设K为关系模式R的一个属性或属性组,若满足:
KfA1,K
fA2,……,K
fAn
则称K为关系模式R的候选键(或候选码)。称包含在候选键钟的属性为主属性,不包含在任何候选码中的属性称为非主属性。
3.函数依赖的推理规则
(1)Armstrong公理
自反律:若YX
U,则X
Y在R上成立。
增广律:若XY在R上成立,且Z
U,则XZ
YZ在R上也成立。
传递律:若XY和Y
Z在R上成立,则X
YZ在R上也成立。
(2)Armstrong公理推论
合并规则:若XY和X
Z在R上成立,则X
YZ在R上也成立。
分解规则:若XY和Z
Y在R上成立,则X
Z在R上也成立。
伪传递规则:若XY和YW
Z在R上成立,则XW
Z在R上也成立。
复合规则:若XY和W
Z在R上成立,则XW
YZ在R上也成立。
4.闭包及候选键求解方法
(1)函数依赖集的闭包
定义:在关系模式R(U,F)中,U是R的属性全集,F是R上的一组函数依赖。设X、Y是U的子集,对于关系模式R的任一关系r,如果r满足F,则r满足XY,那么称F逻辑蕴涵X
Y,或称函数依赖X
Y可由F导出。
所有被F逻辑蕴涵的函数依赖的全集称为F的闭包,记作F+。
(2)属性集闭包
定义:设有关系模式R(U,F),U为R的属性集,F是R上的函数依赖集,X是U的一个子集(XU)。用函数依赖推理规则可从F推出的函数依赖X
A中所有A的集合,称为属性集X关于F的闭包,记为X+(或X+F)。即:
X+={A|XA能够由F根据Armstrong公理导出}
步骤1:初始,X+=X。
步骤2:如果F中有某个函数依赖YZ满足Y
X+。则X+=X+U Z。
步骤3:重复步骤2,直到X+不再增大为止。
(3)候选键的求解方法
对于给定的关系模式R(A1,A2,……,An)和函数依赖集F,现将R的属性分为如下四类:
①L类:仅出现在函数依赖左部的属性。
②R类:仅出现在函数依赖右部的属性。
③N类:在函数依赖的左部和右部均不出现的属性。
④LR类:在函数依赖的左部和右部均出现的属性。
对R中的属性X,可有以下结论:
①若X是L类属性,则X一定包含在关系模式R的任何一个候选键中;若X+包含了R的全部属性,则X为关系模式R的唯一候选键。
②若X是R类属性,则X不包含在关系模式R的任何一个候选键中。
③若X是N类属性,则X一定包含在关系模式R的任何一个候选键中。
④若X是LR类属性,则X可能包含在关系模式R的某个候选键中。