一、基础范式
1. 第一范式 (1NF)
- 定义:确保数据表的每一列均为不可再分的原子项,且每行有唯一标识(主键)
- 示例:若存在“联系方式”字段存储“电话1, 电话2”,需拆分为独立列或多行记录
2. 第二范式 (2NF)
- 前提:满足1NF
- 定义:消除非主属性对主属性的部分依赖(联合主键情况下,非主键列必须完全依赖主键)
- 示例:订单详情表中若“订单日期”仅依赖订单ID(联合主键的一部分),需拆分表
3. 第三范式 (3NF)
- 前提:满足2NF
- 定义:消除非主属性之间的传递依赖,非主属性必须直接依赖主键
- 示例:学生表中“学院电话”依赖“学院”而非学号,需拆分为学院表
二、进阶范式
4. 巴斯-科德范式 (BCNF / 3.5NF)
- 前提:满足3NF
- 定义:消除主属性之间的部分依赖,确保所有决定因素均为候选键
- 特点:比3NF更严格,解决主属性之间的冗余问题
5. 第四范式 (4NF)
- 前提:满足BCNF
- 定义:消除多值依赖(一个字段的多值与其他字段无关)
- 应用场景:处理多对多关系中的独立属性组
6. 第五范式 (5NF / 完美范式)
- 前提:满足4NF
- 定义:消除连接依赖,确保表可通过无损连接分解为更小的表
- 实际意义:理论性强,实际业务中极少应用
三、核心区别对比
范式层级 | 解决的问题 | 依赖类型 | 典型场景 |
1NF | 数据原子性 | 无重复列 | 字段拆分(如地址分解) |
2NF | 部分依赖 | 完全依赖主键 | 联合主键表拆分 |
3NF | 传递依赖 | 直接依赖主键 | 消除冗余字段(如学院电话) |
BCNF | 主属性间的部分依赖 | 候选键决定所有属性 | 主键内部依赖优化 |
4NF | 多值依赖 | 独立多值关系 | 多对多属性分离 |
5NF | 连接依赖 | 无损连接分解 | 理论研究 |
四、实际应用建议
- 常规开发:优先满足到3NF即可,高阶范式可能牺牲查询性能67
- 反范式设计:为优化性能,允许适度冗余(如统计字段预计算)6
- 权衡原则:根据业务需求在规范性与性能之间取舍,如阿里巴巴要求关联表不超过3张