数据库三大范式是数据库设计中用于规范化和优化数据结构的理论框架,主要包括以下三个层次:
一、第一范式(1NF)
核心要求:数据库表的每一列都必须是原子数据项,即不可再分的最小数据单元。 实现方法:
拆分可复合字段,例如将“家庭地址”拆分为“省/市/详细地址”;
确保每列只存储单一值,避免集合、数组或重复组。
示例:
原表(不满足1NF):
| 学号 | 姓名 | 家庭地址 | 家庭电话 | 学校名称 | 班级 |
|------|------|----------------|----------|----------|--------|------|
| 001 | 张三 | 北京123ABC中学 | 123456789 | XYZ中学 | 一班 |
调整后(满足1NF):
| 学号 | 姓名 | 省份 | 城市 | 详细地址 | 家庭电话 | 学校名称 | 班级 |
|------|------|--------|----------|----------------|----------|----------|--------|------|
二、第二范式(2NF)
核心要求:在满足1NF的基础上,非主属性必须完全依赖于主键(消除部分函数依赖)。 实现方法:
对于复合主键,确保所有非主属性依赖整个主键组合,而非部分字段;
将部分依赖拆分到独立表中,例如订单表需拆分为订单详情表。
示例:
原表(不满足2NF):
| 订单号 | 产品号 | 产品数量 | 产品价格 | 订单金额 | 订单时间 |
|--------|--------|----------|----------|----------|----------|
| 001| P001 | 2| 100.00 | 200.00 | 2025-03-06 |
调整后(满足2NF):
| 订单号 | 产品号 | 产品信息(数量、价格) | 订单金额 | 订单时间 |
|--------|--------|--------------------------|----------|----------|
| 001| P001 | (2, 100.00) | 200.00 | 2025-03-06 |
三、第三范式(3NF)
核心要求:在满足2NF的基础上,非主属性必须直接依赖于主键(消除传递函数依赖)。 实现方法:
确保非主属性不通过其他非主属性间接依赖主键,例如“班主任性别”应直接依赖“班主任姓名”而非学号;
拆分传递依赖,将相关属性分离到独立表中。
示例:
原表(不满足3NF):
| 学号 | 班主任姓名 | 班主任性别 | 班主任年龄 | 学习成绩 |
|------|------------|------------|------------|----------|
| 001 | 张三 | 男 | 35 | 85 |
| 002 | 李四 | 女 | 28 | 92 |
调整后(满足3NF):
| 学号 | 班主任姓名 | 班主任年龄 | 学习成绩 |
|------|------------|------------|----------|
| 001 | 张三 | 35 | 85 |
| 002 | 李四 | 28 | 92 |
补充说明
反范式设计:在特定场景下,可通过增加冗余(如反三范式)提升查询性能,但会牺牲数据一致性。- 高级范式:如BCNF(避免非主键对主键子集的依赖)、4NF(多值依赖)、5NF(完美范式)等,适用于复杂业务场景。
通过遵循三大范式,可有效减少数据冗