阿姆斯特朗公理
包含规则
若属性集Y属于X, 则有属性集Y函数依赖于X
传递规则
若属性集A,B, C之间存在函数依赖关系A->B, B->C, 则A->C
增广规则
若A->B则AC->BC
合并规则
若A ->B, A->C 则 A->BC
分解规则
若A->BC, 则A->B,A->C
伪传递规则
若A->B,XB->C则AX->C
集合累积规则
若A->BC, C->X则 A->BCX
闭包
函数依赖集的闭包
对于关系模式上R的函数依赖集F, 若F可以导出X->Y则称F逻辑蕴含X->Y.
把F中的函数依赖关系, 及被F逻辑蕴含的函数依赖的集合称为F的闭包, 记作\(F^{+}\)
计算关系R的函数依赖集F的闭包的步骤如下:
(1) 设最终将成为闭包的函数集为G,把G初始化为F
(2) 检查G中的每一个函数依赖A->B,尝试应用分解规则和增广规则将新得到的依赖关系添加到G中
(3) 检查G中所有函数依赖可能的组合, 尝试应用传递规则和合并规则将新得到的依赖关系添加到G中
(3) 重复(2)直至全部添加
属性集的闭包
闭包是由函数依赖集F导出的属性集, 闭包中一个属性A可以依据F导出其它所有属性, 记作\((A)^{+}_{F}\)
下面给出数学定义:
设X和Y均为关系R的属性集的子集,F是R上的函数依赖集,若对R的任一属性集B,若X->B,必有B⊆Y,且对R的任一满足以上条件的属性集Y1 ,必有Y⊆Y1,此时称Y为属性集X在函数依赖集F下的闭包,记作\(X^{+}_{F}\)。
如 f={a->b,b->c,a->d,e->f};由a可直接得到b和d,间接得到c,则a的闭包就是{a,b,c,d}
阿姆斯特朗公理为闭包的完备性和有效性提供了理论支持.
计算关系R的属性集X的闭包的步骤如下:
(1) 设最终将成为闭包的属性集是Y,把Y初始化为X
(2) 检查F中的每一个函数依赖A->B,如果属性集A中所有属性均在Y中,而B中有的属性不在Y中,则将其加入到Y中
(3) 重复(2)直到全部添加为止
函数依赖集的覆盖
设F,G是关系模式R上的两个函数依赖集, 若G属于F的闭包\(F^{+}\), 则称F覆盖G.
F与G拥有相同的闭包,这一性质可以用来进行检验.
最小覆盖(最小函数依赖集)
关系模式R(U,F)中,U=ABCDEG,F={B->D,DG->C,BD->E,AG->B,ADG->BC}
计算函数依赖集F的最小函数依赖集M步骤如下:
(1)右部分化为单属性
{ADG->BC} ==>{ADG->B, ADG->C}
M ={B->D, DG->C, BD->E, AG->B, ADG->B, ADG->C}
(2) 掉左部冗余属性
对于ADG->B可以看出 ‘ADG’ 去掉 ‘D’ 子属性后 AG->B是仍然成立的, 所以‘D’被认为是冗余属性,如此类推(左边是单个属性不用判断), 得:
M = {B->D, DG->C, BD->E, AG->B}
(3) 去掉多余函数依赖
去掉F中某依赖关系(经过前两步,一般只需要判断左边属性为多个的关系),如去掉(DG->C)
(DG)+ = {D, G}, 缺少C, 不冗余。 所以求得:
M = {B->D, DG->C, BD->E, AG->B}
正则覆盖 canonical cover
函数集F的正则覆盖集Fc满足条件:
F与Fc互相逻辑蕴含
Fc中任何函数依赖都不含无无关属性
Fc中函数依赖的左半部分都是唯一的
若去除函数依赖中的属性不会改变函数依赖集F的闭包,就称该属性是该函数依赖的无关属性.
如AB->C, 若F蕴含\(F-\{AB->C\} \cup \{B->C\}\)即使用B->C替换AB->C不改变F的闭包.
若有函数依赖关系AB->C, \(A_{F}^{+}\)包含C, 则A是AB->C的无关属性. 在FC中用B->C替换.
另一种形如A->BC的情况类似, 若用A->C替换AB->C不改变F的闭包, 则C为无关属性.
示例:
在关系模式R<U, F>, U = {A, B, C}, F={A-> BC, B -> C, A -> B, AB -> C}
求F的正则覆盖方法如下:
(1) 右部分分解为单属性
G = {A -> B, A -> C, B -> C, AB -> C}
(2) 去掉左部无关属性
两边都是单属性的不必考虑, 求左侧多属性中任一属性关于F的闭包.
对AB -> C,\((A)_{F1}^{+} = ABC\)即存在A->C,A为无关属性故用B -> C替换之。
G = {A -> B, A -> C, B -> C}
(3) 去掉多余函数依赖
去掉可以由F1中其它关系导出的依赖关系.
对A -> C, 可以由A->B, A->C 导出去掉。
(4) 合并函数依赖
将左部相同的函数依赖进行合并, 保证左部唯一
G = {A -> B, B -> C}
依赖关系的分解
无损连接分解(lossess join)
关系模式R,其上的函数依赖集F.
若将关系R分解为R1, R2, 若R1, R2自然连接可以得到R, 则R1, R2为R的无损连接分解.
若将关系R分解为R1, R2. 若R1与R2属性的交集是R的Super Key, 则R1, R2为R的无损连接分解.
保持依赖
关系模式R分解后的各个Ri上函数依赖集Fi并集的闭包等于原函数依赖集的闭包, 则该分解保持了函数依赖关系.