函数依赖functional dependency(FD)
推导FD reason FD
函数依赖表达了属性间的多对一的联系,而多值依赖表达了属性间的一对多的联系
functional dependency的分解/结合规则
函数依赖的左边可以有多个属性,其右边只有一个属性
A1A2...An→B1
A1A2...An→B2
...
A1A2...An→Bn
缩略形式
A1A2...An→B1B2...Bn
把缩略形式分解开splitingrule即用法A1A2...An→Bi(i=1,2...m)替换掉A1A2...An→B1B2...Bm
相反的操作成为combining rule
平凡函数依赖与非平凡函数依赖
若在一个函数依赖中A1A2...An→B中,B属于A则认为是平凡的trivial
三个概念
平凡的trivial——仅当其右边的属性集合是左边集合的子集
非平凡的nontrivial——仅当其右边的属性集中至少有一个属性不属于左边的集合
完全非平凡的completelynontrivial——仅当其右边的属性集合均不属于左边集合的子集
简单函数依赖:右端为单个属性的非平凡依赖,即形为X→A的函数依赖
完全函数依赖:对于X→A,如果不存在X的真子集X',使得X'→A成立,则称A完全函数依赖于X,否则称A部分依赖于X
原子函数依赖:如果一个简单函数依赖又是完全函数依赖,则称其为原子函数依赖(属性不能在少了)
函数依赖的传递规则transitiverule
A1A2...An→B1B2...Bn, B1B2...Bn→C1C2...Cn
推出A1A2...An→C1C2...Cn
投影的函数依赖
如果S是R的投影project且保证S中没有相同的元组,如何考虑函数依赖
例:假设R(A,B,C,D)中有函数依赖A→B,B→C,和C→D,R的一个投影S(A,C,D)找出S的函数依赖集合
首先找到A的闭包A+{A,B,C,D}
A→C,A→D应该是s的函数依赖,而A→B则失效因为B不在S中
其次找到C的闭包C+{C,D}
C→D应该是S的函数依赖
最后找到D的闭包D+{D}
没有函数依赖
最终S的函数依赖集合为A→C,A→D,C→D