第三范式
第三范式要求什么?
- 形式化表述: 对 R 中的任意非平凡函数依赖 , 满足下列之一:
- 属性组 是 R 的超键;
- 属性组 是某个键的子集;
- 通俗表述: 关系表必须有一个主键, 且其他列直接依赖于主键, 而不是经其他非主属性传导;
- 等价说法: 消除非主属性对键的传递依赖;
违反第三范式的例子长什么样?
Movies(title, year, length, studioName, studioAddr)
主键: (title, year)
依赖: (title, year) -> studioName
studioName -> studioAddr
- 推导: 由传递规则得到
(title, year) -> studioAddr, 且左边不是超键,studioAddr也不是键的子集; - 后果: 同一制片公司的地址在每部影片下重复;
- 修法: 把
studioName, studioAddr拆成单独的关系表;
第三范式与 BCNF 有什么区别?
(source: 020-关系数据库设计理论.md §函数范式/§第三范式 (3NF))