第07章01节-数据库设计三范式

数据库设计三范式


数据库设计的三范式(Third Normal Form,简称 3NF)是数据库设计中的一种规范化过程,用于组织数据库结构以减少数据冗余和提高数据完整性。

数据库设计的三范式(Third Normal Form,简称 3NF)是数据库设计中的一种规范化过程,用于组织数据库结构以减少数据冗余和提高数据完整性。以下是三范式的具体定义和示例:

1. 第一范式(1NF)


第一范式要求数据库表中的所有字段值都是原子的,不可再分。换句话说,每一列的值都是不可分割的基本数据项。

未达到 1NF 的表:

订单ID 客户名 产品 数量
1 张三 手机, 电脑 2, 1

问题:在同一列中包含多个值,例如“产品”列包含“手机”和“电脑”,这违反了原子性原则。

解决方案:将每个产品拆分为单独的行

达到 1NF 的表:

订单ID 客户名 产品 数量
1 张三 手机 2
1 张三 电脑 1

解释:每个产品和数量的组合在一个单独的行中,这样每个字段的值都是原子的。

2. 第二范式(2NF)


在满足第一范式的基础上,第二范式要求数据库表中不存在部分依赖,即非主键列必须完全依赖于主键,而不是依赖于主键的一部分。第二范式消除了部分依赖的冗余。

未达到 2NF 的表:

学生ID 课程ID 成绩 学生名 课程名
1 101 90 张三 数学
1 102 85 张三 英语

问题:学生名和课程名依赖于学生ID和课程ID的组合,而不完全依赖于该组合中的某一部分,存在部分依赖。

解决方案:将学生信息和课程信息拆分到独立的表中。

达到 2NF 的表:

学生表:

学生ID 学生名
1 张三

课程表:

课程ID 课程名
101 数学
102 英语

成绩表:

学生ID 课程ID 成绩
1 101 90
1 102 85

解释:通过将学生信息和课程信息拆分到独立的表中,非主键列“学生名”和“课程名”完全依赖于它们各自的主键列,从而消除了部分依赖。

3. 第三范式(3NF)


在满足第二范式的基础上,第三范式要求数据库表中不存在传递依赖,即非主键列必须直接依赖于主键,而不能通过其他非主键列间接依赖于主键。第三范式消除了传递依赖的冗余。

未达到 3NF 的表:

学生ID 学生名 系ID 系主任
1 张三 10 王老师
2 李四 20 张老师
3 王五 10 王老师

问题:在这个表中,“系主任”依赖于“系ID”,“系ID”依赖于“学生ID”。因此,“系主任”通过“系ID”间接依赖于“学生ID”,这就是传递依赖。

解决方案:将系的信息单独放在一个表中。

达到 3NF 的表:

学生表:

学生ID 学生名 系ID
1 张三 10
2 李四 20
3 王五 10

系表:

系ID 系主任
10 王老师
20 张老师

解释:通过将“系ID”和“系主任”信息分离到独立的“系表”中,消除了“系主任”对“学生ID”的传递依赖。现在,学生表中的非主键列(学生名和系ID)直接依赖于学生ID,而系表中的非主键列(系主任)直接依赖于系ID。

4. 总结


通过遵循三范式,我们可以:

  • 减少数据冗余:避免重复存储同一信息,节省存储空间。
  • 提高数据一致性:更新一处数据后,不需要同步更新多处,从而避免数据不一致。
  • 简化数据维护:清晰的表结构使得数据的插入、更新、删除操作更加简洁高效。

这些规范化的步骤有助于设计一个结构合理、数据完整、易于维护的数据库系统。

注意:最终以满足客户需求为原则,有的时候会拿空间换速度。