1NF(列不可再分)
1NF:原子性,字段不可以再分
2NF(不存在部分依赖)非键字段必须依赖于键字段
2NF:唯一性,可以把多种数据保存在同一张表中,即一张表只能保存“一种”数据。
Eg:(学号,姓名,年龄,课程名称,成绩,学分)这个表就是不符合2NF,因为它保存了多种数据类型。
存在一定的问题:
(1)数据冗余,每条记录可能都含有相同的信息。
(2)删除异常:删除所有学生成绩,就把课程信息全删除了。
(3)插入异常:学生没有选课,无法记录进数据库。
(4)更新异常:调整课程学分,所有的行都要调整。
要拆开,正确的示例如下:
学生表:Student(学号,姓名,年龄);
课程表:Course(课程名称,学分);
选课关系:Select(学号,课程名称,成绩);
3NF(不存在传递依赖)在1NF基础上,除了主键以外的其它列都不传递依赖于主键列,或者说: 任何非主属性不依赖于其它非主属性
(在2NF基础上消除传递依赖)
3NF:直接性,每一列都和主键直接相关,而不能间接相关。
Eg:(学号,姓名,年龄,学院名称,学院电话)这张表就存在传递依赖,学号->姓名->学院名称->学院电话
可能存在问题:
(1)数据冗余:有重复值
(2)更新异常:有重复的冗余信息,修改时需要修改多条记录,否则会出现数据不一致的现象
正确的做法:
学生表:(学号,姓名,年龄,所在学院)
学院表:(学院,电话)