第一范式(1NF):
要求:数据库中的所有字段都不可分,即数据库中的每个字段都要满足原子性。
在关系型数据库中,第一范式是对关系模式的基本要求,不满足第一范式的数据库就不是关系数据库
第二范式(2NF):
要求:表中的每列都要与主键相关,不能只跟主键的某一部分相关。即一个表只能说明一个事物。
例(不符合第二范式):
学生表:学号、姓名、年龄、课程名称、成绩、学分;
上面这个学生表中就说明了两个事物:1、学生信息;2、课程信息
这样设计表会有下列问题:
数据冗余:每条记录都含有相同信息;
删除异常:删除所有学生成绩,就把课程信息全部删除;
插入异常:学生未选课,无法记录进数据库;
更新异常:调整课程学分,所有行都调整
修正:
学生表:学号、姓名、年龄
课程表:课程名称、学分
选课关系:学号、课程名称、成绩
满足第二范式只消除了插入异常,还可能会存在数据冗余、更新和删除异常
第三范式(3NF):
要求:每列都与主键有直接关系,而不是间接关系
例:(不符合第三范式):
表:学号、 姓名、 年龄、 所在学院、 学院联系电话
关键字为单一关键字”学号“, 存在依赖传递: 学号 ---> 所在学院 ---> 学院地点,、学院电话
存在问题:
数据冗余:有重复值;
更新异常:有重复的冗余信息,修改时需要同时修改多条记录,否则会出现数据不一致的情况
删除异常
修正:
学生:学号、姓名、年龄、所在学院
学院:学院、地点、 电话
引用:http://www.jb51.net/article/19312.htm