数据库范式
数据库的三范式(Normalization)是用于设计关系型数据库的标准,旨在减少数据冗余和提高数据一致性。三范式包括以下内容:
1.第一范式(1NF)
定义:一个表格符合第一范式,如果它的每个字段都是原子的,即每个字段的值都是不可再分的基本数据项。
要求:
- 每列中的数据必须是不可分割的原子值。
- 每行必须是唯一的,可以通过主键来标识。
示例: 不符合 1NF 的表:
学生ID | 姓名 | 课程 |
---|---|---|
1 | 张三 | 数学, 语文 |
符合 1NF 的表:
学生ID | 姓名 | 课程 |
---|---|---|
1 | 张三 | 数学 |
1 | 张三 | 语文 |
2.第二范式(2NF)
定义:一个表格符合第二范式,如果它首先符合第一范式,并且所有非主键列完全依赖于主键,而不是部分依赖。
要求:
- 消除部分依赖,即非主键属性必须依赖于整个主键,而不是主键的一部分。
示例: 不符合 2NF 的表:
学生ID | 课程 | 教师 |
---|---|---|
1 | 数学 | 李老师 |
1 | 语文 | 王老师 |
在这个例子中,教师依赖于课程而不是学生ID,因此存在部分依赖。
符合 2NF 的表:
学生ID | 课程 |
---|---|
1 | 数学 |
1 | 语文 |
课程 | 教师 |
---|---|
数学 | 李老师 |
语文 | 王老师 |
3.第三范式(3NF)
定义:一个表格符合第三范式,如果它首先符合第二范式,并且所有非主键列都不传递依赖于主键。
要求:
- 消除传递依赖,即非主键属性不能依赖于其他非主键属性。
示例: 不符合 3NF 的表:
学生ID | 课程 | 教师 | 教师办公室 |
---|---|---|---|
1 | 数学 | 李老师 | A101 |
1 | 语文 | 王老师 | A102 |
在这个例子中,教师办公室依赖于教师,存在传递依赖。
符合 3NF 的表:
学生ID | 课程 | 教师 |
---|---|---|
1 | 数学 | 李老师 |
1 | 语文 | 王老师 |
教师 | 教师办公室 |
---|---|
李老师 | A101 |
王老师 | A102 |
总结
- 第一范式:确保数据的原子性。
- 第二范式:确保所有非主键列完全依赖于主键。
- 第三范式:确保非主键列之间没有传递依赖。
通过遵循这些范式,可以设计出更高效、灵活和一致的数据库结构,减少数据冗余和异常。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Elmer的博客!