数据库三范式

匿名 (未验证) 提交于 2019-12-03 00:36:02

第一范式就是无重复的列。

说明:在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。



第二范式(2NF)就是非主属性完全依赖于主关键字

说明:

假定选课关系表为SelectCourse(学号, 姓名, 年龄, 课程名称, 成绩, 学分),关键字为组合关键字(学号, 课程名称),因为存在如下决定关系:

 

(学号, 课程名称) → (姓名, 年龄, 成绩, 学分)

 

这个数据库表不满足第二范式,因为存在如下决定关系:

 

(课程名称) → (学分)

 

(学号) → (姓名, 年龄)

即存在组合关键字中的字段决定非关键字的情况。

把选课关系表SelectCourse改为如下三个表:

学生:Student(学号, 姓名, 年龄);

课程:Course(课程名称, 学分);

选课关系:SelectCourse(学号, 课程名称, 成绩)。

这样的数据库表是符合第二范式的, 消除了数据冗余、更新异常、插入异常和删除异常。

另外,所有单关键字的数据库表都符合第二范式,因为不可能存在组合关键字。



第三范式就是属性不依赖于其它非主属性。

因此,满足第三范式的数据库表应该不存在如下依赖关系:

 

关键字段 → 非关键字段x → 非关键字段y

 

假定学生关系表为Student(学号, 姓名, 年龄, 所在学院, 学院地点, 学院电话),关键字为单一关键字"学号",因为存在如下决定关系:

 

(学号) → (姓名, 年龄, 所在学院, 学院地点, 学院电话)

 

这个数据库是符合2NF的,但是不符合3NF,因为存在如下决定关系:

 

(学号) → (所在学院) → (学院地点, 学院电话)

 

即存在非关键字段"学院地点"、"学院电话"对关键字段"学号"的传递函数依赖。

 

它也会存在数据冗余、更新异常、插入异常和删除异常的情况,读者可自行分析得知。

 

把学生关系表分为如下两个表:

 

学生:(学号, 姓名, 年龄, 所在学院);

 

学院:(学院, 地点, 电话)。

 

这样的数据库表是符合第三范式的,消除了数据冗余、更新异常、插入异常和删除异常。







转载请标明出处:数据库三范式
文章来源: 数据库三范式
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!