函数依赖的公理化系统

阿姆斯特朗公理

包含规则

若属性集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并集的闭包等于原函数依赖集的闭包, 则该分解保持了函数依赖关系.

原文地址:https://www.cnblogs.com/Finley/p/5582256.html