跳到主要内容

函数依赖定义

函数依赖描述什么约束?​

  • 定义: 关系 R 上的函数依赖指, 若 R 的两个元组在属性组 AA 上取值相同, 则两者必定在属性组 BB 上取值相同;
  • 记法: A1A2⋯An→B1B2⋯BmA_1A_2\cdots A_n \rightarrow B_1B_2\cdots B_m;
  • 读法: AA 函数决定 BB, 或 BB 函数依赖于 AA;
  • 类比: AA 是输入, BB 是输出, 相同输入必得相同输出;

一个函数依赖的例子长什么样?​

titleyearlengthstudioNamestudioAddr
Star Wars1977124FoxHollywood
The Godfather1972175ParamountHollywood
Star Wars1977124FoxHollywood
  • title, year -> length, studioName: 主键决定其余属性;
  • studioName -> studioAddr: 同一制片公司只对应一个地址;
  • 检查方式: 只要存在两条 studioName 相同而 studioAddr 不同的元组, 后一个依赖就不成立;

函数依赖在什么范围内成立?​

  • 约束对象: 关系模式, 而不是某一个具体实例;
  • 要求: 对该关系的所有合法实例都成立;
  • 判别: 只要找到一对在 AA 上相同、在 BB 上不同的元组, 依赖就不成立;

什么是非平凡函数依赖?​

  • 平凡依赖: BB 中每个属性都属于 AA, 此时依赖天然成立, 不携带信息;
  • 非平凡依赖: BB 中至少有一个属性不属于 AA;
  • 用途: 范式判定只讨论非平凡依赖, 见 第三范式;

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