第一范式与第二范式
第一范式要求什么?
- 要求: 关系中的每个属性都是原子属性, 不可再分解;
- 含义: 不允许一个分量里再装表、集合或复合结构;
- 作用: 保证"分量"这个概念成立, 是所有后续范式的前提;
第二范式要求什么?
- 要求一: 关系表必须有一个主键;
- 要求二: 其他列必须完全依赖于主键;
- 等价说法: 消除部分函数依赖, 即不存在主键真子集决定非主属性的情况;
- 针对问题: 主键由多个属性组成时, 某些非主属性只依赖其中一部分;
违反第二范式的例子长什么样?
StarsIn(movieTitle, movieYear, starName, starAddress)
主键: (movieTitle, movieYear, starName)
非主属性: starAddress
依赖: starName -> starAddress <- 只依赖主键的一部分
- 问题:
starName是主键的真子集, 却决定了starAddress, 属部分依赖; - 后果: 同一演员的地址在每部影片下重复, 出现冗余;
- 修法: 把
starName, starAddress拆成单独的关系表;
(source: 020-关系数据库设计理论.md §函数范式/§第一范式 (1NF)/§第二范式 (2NF))