1 第一范式:无重复的列。(只要是关系型数据库就满足第一范式)
2 第二范式:实体属性完全依赖于主关键字。实体属性不能存在仅依赖主关键字的一部分属性;如果存在,则需要将这个属性和主关键字的这一部分分离出来形成新的实体,同原实体形成1对多的关系。
举例: 学生选课关系表。 (学号, 课程名称) → (姓名, 年龄, 成绩, 学分)
这个数据库表不满足第二范式,因为存在如下决定关系:
(课程名称) → (学分)
(学号) → (姓名, 年龄)
把选课关系表SelectCourse改为如下三个表:
学生:Student(学号, 姓名, 年龄);
课程:Course(课程名称, 学分); //新实体。
选课关系:SelectCourse(学号, 课程名称, 成绩)。 //同原实体形成1对多的关系。
这样的数据库表是符合第二范式的,消除了数据冗余、更新异常、插入异常和删除异常。
3 第三范式: 满足第二范式并且不存在非关键字段对任一候选关键字段的传递依赖则符合第三范式。
举例: 学生关系表为Student(学号, 姓名, 年龄, 所在学院, 学院地点, 学院电话),关键字为单一关键字"学号:
(学号) → (姓名, 年龄, 所在学院, 学院地点, 学院电话)
这个数据库是符合2NF的,但是不符合3NF,因为存在如下决定关系:
(学号) → (所在学院) → (学院地点, 学院电话)
把学生关系表分为如下两个表:
学生:(学号, 姓名, 年龄, 所在学院);
学院:(学院, 地点, 电话)。
这样的数据库表是符合第三范式的,消除了数据冗余、更新异常、插入异常和删除异常。
文章引用 :http://www.uml.org.cn/sjjm/200601161.htm