7.函数依赖
函数依赖是一种约束,是key的一种更加广泛的表述。其思想类似于key,带有“xx determines决定 xx”的含义。 定义如下:
函数依赖
例如,你能在以下 relaiton 中找到函数依赖吗
- 满足 A → C
- 却不能满足 C → A
- 还能找到其他的函数依赖吗?
- 还有 D → B
平凡函数依赖与非平凡函数依赖
A ,B ,C 三个属性:
- 平凡函数依赖
- 当 β 包含于 α 时,α -> β
- 例如,AB -> A, { name, student_id} -> { name }.
- 非平凡函数依赖
- 例如 AB -> C, {name, student_id} -> { specialization (专业) }.
函数依赖和 key 的关系
- superkey:能够决定整个元组的属性
- α 是 R 的一个超键等价于: α -> R
- 但不一定是 candidate key
- α 是 R 的一个候选键等价于: α -> R,并且不存在这样的 γ,使得 γ 包含于 α 且 γ -> R
- 例如:
闭包 Closure
- F的闭包:
- 例如:
阿姆斯特朗公理
三个附加规则
属性集合的闭包
属性集的闭包,与函数依赖的闭包不一样,表示该属性集能决定的所有属性值的集合
- 计算属性集闭包的方法
- 例如:
函数依赖的冗余
- 对于{ { A } -> { B } , { B } -> { C } , { A } -> { C } }来说,{ A } -> { C } 是冗余的
- 右侧冗余属性
- { { A } -> { B } , { B } -> { C } , { A } -> { C , D } } 可以被简化为 { { A } -> { B } , { B } -> { C } , { A } -> { D } }
- 左侧冗余属性
- { { A } -> { B } , { B } -> { C } , { A , C } -> { D } } 可以被简化为 { { A } -> { B } , { B } -> { C } , { A } -> { D } }
最小函数依赖集
- F 的最小函数依赖集是 Fc ,如果其满足:
- F 和 Fc 二者等价
- Fc 没有冗余
- 每 FD 左侧属性是唯一的
- 消除冗余获得最小函数依赖集例子:
- R = ( A, B, C )
- F = { A -> BC,B -> C,A -> B,AB -> C }.
- 第一步:结合 A → BC 和 A → B 得到 A → BC
- 获得 { A → BC, B → C, AB → C }.
- 第二步:由 B → C 消除 AB → C 中多余的 A
- 获得 { A → BC, B → C }.
- 第三步:由 A → B and B → C 消除 A → BC 中多余的 C
- 获得 {A → B, B → C}.
- 最后结果为 {A → B, B → C}.