数据库范式:减少数据冗余
今天开始学习数据库设计中最重要的理论——范式(Normal Form)。范式是一套规则,帮我们设计出结构合理的数据库,避免数据冗余和各种异常问题。
一、为什么需要范式
1.1 先看一个"反面教材"
假设我们这样设计一张"学生选课表":
| 学号 | 姓名 | 院系 | 院系主任 | 课程号 | 课程名 | 成绩 | |------|------|------|---------|--------|--------|------| | 001 | 张三 | 计算机 | 王教授 | C01 | 数据库 | 90 | | 001 | 张三 | 计算机 | 王教授 | C02 | 操作系统| 85 | | 002 | 李四 | 数学 | 李教授 | C01 | 数据库 | 78 |这张表存在什么问题?
1.2 四大异常问题
数据冗余:
- "张三、计算机、王教授"重复出现了2次
- "C01、数据库"也重复了
- 浪费存储空间
插入异常:
- 想新增一个院系"物理系"(主任赵教授),但该系还没有学生 → 无法插入(学号是主键的一部分,不能为空)