1NF:无重复的列,即每一列都是不可分割的基本数据项
如下表所示:第三行记录的 color 列包含了两个颜色值。
商品表 goods:
| id | price | color |
|---|---|---|
| 1 | 10 | red |
| 2 | 20 | blue |
| 3 | 30 | red, blue |
可以拆分为两个表,价格表和颜色表:
价格表 goods_price:
| id | price |
|---|---|
| 1 | 10 |
| 2 | 20 |
| 3 | 30 |
颜色表 goods_color:
| id | color |
|---|---|
| 1 | red |
| 2 | blue |
| 3 | red |
| 3 | blue |
2NF:属性完全依赖于主键
如下表所示:学分依赖于课程,不依赖于主键学号
考试成绩表 exam:
| 学号 | 姓名 | 课程 | 学分 | 成绩 |
|---|---|---|---|---|
| 1 | Tom | 数学 | 4 | 80 |
| 2 | Kate | 数学 | 4 | 90 |
可以拆分为三个表,学生信息表,课程表和考试成绩表:
学生信息表 student:
| 学号 | 姓名 |
|---|---|
| 1 | Tom |
| 2 | Kate |
课程表 course:
| 课程编号 | 课程名 | 学分 |
|---|---|---|
| 101 | 数学 | 4 |
| 102 | 语文 | 2 |
考试成绩表 exam:
| 学号 | 课程编号 | 成绩 |
|---|---|---|
| 1 | 101 | 80 |
| 2 | 101 | 90 |
3NF:属性不依赖于其他非主属性,即不能有冗余
如下表所示:班主任手机依赖于班主任姓名 这个非主属性
学生信息表 student:
| 学号 | 姓名 | 班主任姓名 | 班主任手机 |
|---|---|---|---|
| 1 | Tom | Lily | 138 |
| 2 | Kate | Lily | 138 |
可以拆分为两个表,学生信息表,班主任信息表:
学生信息表 student:
| 学号 | 姓名 | 班主任姓名 |
|---|---|---|
| 1 | Tom | Lily |
| 2 | Kate | Lily |
班主任信息表 teacher:
| 班主任姓名 | 班主任手机 |
|---|---|
| Lily | 138 |
| Cat | 139 |