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 |