在关系模式的规范化处理过程中,只知道一个给定的函数依赖集合是不够的,还需要知道给定的函数依赖集合所蕴含的有函数依赖的集合,并进行合理的推演,以保证对关系模式进行分解后仍然不丢失函数依赖,也不会凭空增加函数依赖。对于关系模式的函数依赖,有一套完整的推理规则,称为阿姆斯特朗公理(Armstrong axioms)。利用该推理规则,由一组已知函数依赖可推导出全部的函数依赖。
(一)定义3-7
逻辑蕴涵(logical implications):R(U,F)是一个具有属性集合U的关系模式,F是R上的一个函数依赖集合,如果对于R的任意一个使F成立的关系实例r,函数依赖X→Y均成立,则称F逻辑蕴涵X→Y。
1.阿姆斯特朗公理体系
阿姆斯特朗公理:设R(U,F)是一个具有属性集合U的关系模式,F是R的一个函数依赖集合,X⊆U,Y⊆U,Z⊆U。阿姆斯特朗公理包含下面的规则。
(1)包含规则(include rule,又称自反律):若Y⊆X⊆U,则X→Y为F所蕴涵。
(2)传递规则(transitivity rule):若F蕴涵X→Y,Y→Z,则X→Z为F所蕴涵。
(3)增广规则(augmentation rule):若F蕴涵X→Y,且Z⊆U,则XZ→YZ为F所蕴涵。(www.xing528.com)
2.闭包、覆盖和最小覆盖
对于一个关系模式R(U,F),根据已给函数依赖集F,利用一些推理规则求出其全部的函数依赖是非常困难的,为了方便地判断某属性(或属性组)能决定哪些属性,则需要了解属性集闭包的概念。
(二)定义3-8
函数依赖集的闭包:设R是一个具有属性集合U的关系模式,F是给定的函数依赖集合,由F推导出的所有函数依赖的集合,称为F的闭包,记作F+。
考虑给定的函数依赖集F={A→B,B→C,C→D,D→E,E→F},请分析由F可推出的函数依赖有哪些?数量是多少?
分析由传递规则,A→B和B→C可推出A→C,B→D。实际上,在序列 ABCDEF中,任何属性只要不是最后一个,都可以通过传递规则来决定序列中出现在它右边的第一个属性。通过平凡函数依赖A→A,使用合并规则,可以生成其他函数依赖,如A→ABCDEF、B→BCDEF等。由A→ABCDEF可以得到A确定任何ABCDEF的非空子集,共26-1=63个。
从以上分析可知,函数依赖集F推出的函数依赖可能以指数级的速率增长。我们的目标是找到一种方法来求出等价于F的函数依赖的一个最小集,并给出相应的算法。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。