跳到主要内容

第一范式与第二范式

第一范式要求什么?​

  • 要求: 关系中的每个属性都是原子属性, 不可再分解;
  • 含义: 不允许一个分量里再装表、集合或复合结构;
  • 作用: 保证"分量"这个概念成立, 是所有后续范式的前提;

第二范式要求什么?​

  • 要求一: 关系表必须有一个主键;
  • 要求二: 其他列必须完全依赖于主键;
  • 等价说法: 消除部分函数依赖, 即不存在主键真子集决定非主属性的情况;
  • 针对问题: 主键由多个属性组成时, 某些非主属性只依赖其中一部分;

违反第二范式的例子长什么样?​

StarsIn(movieTitle, movieYear, starName, starAddress)

主键: (movieTitle, movieYear, starName)
非主属性: starAddress
依赖: starName -> starAddress <- 只依赖主键的一部分
  • 问题: starName 是主键的真子集, 却决定了 starAddress, 属部分依赖;
  • 后果: 同一演员的地址在每部影片下重复, 出现冗余;
  • 修法: 把 starName, starAddress 拆成单独的关系表;

(source: 020-关系数据库设计理论.md §函数范式/§第一范式 (1NF)/§第二范式 (2NF))