跳到主要内容

多值依赖

多值依赖描述什么约束?​

  • 定义: 对 R 中每个在属性组 AA 上取值一致的元组对 tt 与 uu, R 中总存在满足以下三条的元组:
    • 在 AA 上取值与 tt、uu 相同;
    • 在 BB 上取值与 tt 相同;
    • 在不属于 AA 与 BB 的其余属性上取值与 uu 相同;
  • 记法: A1A2⋯An↠B1B2⋯BmA_1A_2\cdots A_n \twoheadrightarrow B_1B_2\cdots B_m;
  • 直觉: AA 的一个取值对应 BB 的一组取值, 这组取值与其余属性彼此独立;

什么场景会产生多值依赖?​

  • 场景: 同一个关系里存放了两类互不相关的多值属性;
  • 例子: Movies(title, year, starName, producerName), 演员集合与制片人集合相互独立;
  • 后果: 不拆表时每个演员要与每个制片人配对, 产生大量冗余;
  • 依赖: title, year ↠ starName 与 title, year ↠ producerName 同时成立;

多值依赖与函数依赖有什么区别?​

维度函数依赖 A→BA \rightarrow B多值依赖 A↠BA \twoheadrightarrow B
取值AA 的一个取值决定 BB 的一个取值AA 的一个取值决定 BB 的一组取值
来源属性之间的决定关系两组互不相关多值属性的并存关系
消除3NF 及以上4NF, 见 第四范式

(source: 020-关系数据库设计理论.md §函数依赖/§多值依赖 (MVD))