7.函数依赖

函数依赖是一种约束,是key的一种更加广泛的表述。其思想类似于key,带有“xx determines决定 xx”的含义。 定义如下:

  • image

函数依赖

例如,你能在以下 relaiton 中找到函数依赖吗

  • image
  • 满足 A → C
    • image

    • image

    image
  • 却不能满足 C → A
    • image
  • 还能找到其他的函数依赖吗?
    • 还有 D → B
    • image

平凡函数依赖与非平凡函数依赖

A ,B ,C 三个属性:

  • 平凡函数依赖
    • 当 β 包含于 α 时,α -> β
    • 例如,AB -> A, { name, student_id} -> { name }.
  • 非平凡函数依赖
    • 例如 AB -> C, {name, student_id} -> { specialization (专业) }.

函数依赖和 key 的关系

  • superkey:能够决定整个元组的属性
  • α 是 R 的一个超键等价于: α -> R
    • 但不一定是 candidate key
  • α 是 R 的一个候选键等价于: α -> R,并且不存在这样的 γ,使得 γ 包含于 α 且 γ -> R
  • 例如:
    • image
      • image

      • image

      • image

闭包 Closure

  • F的闭包:
    • image
  • 例如:
    • image
阿姆斯特朗公理
  • image
三个附加规则
  • image

属性集合的闭包

属性集的闭包,与函数依赖的闭包不一样,表示该属性集能决定的所有属性值的集合

  • image
  • 计算属性集闭包的方法
    • image
  • 例如:
    • image

    • image

函数依赖的冗余

  • 对于{ { 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}.
posted @ 2024-12-12 18:00  韦飞  阅读(71)  评论(0)    收藏  举报