数据库三范式浅谈

 

第一范式:数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。(在任何一个关系数据库中,第一范式是对关系模式的基本要求,不满足第一范式的数据库就不是关系数据库。)

第二范式:属性完全依赖于主键,消除部分子函数依赖。

完全依赖是指不能存在仅依赖主关键字一部分的属性。

第三范式:属性不依赖于其他非主属性,消除传递依赖。

 

范例:

将学号、学生姓名、年龄、性别、课程、课程学分、系别、学科成绩、系办地址、系办电话。字段建表

上面字段存在以下关系:

(学号)→ (姓名, 年龄,性别,系别,系办地址、系办电话)
        (课程名称) → (学分)
      (学号,课程)→ (学科成绩)

(系别)->(系办地址,系办电话)

如若这些字段都在一个表中的话,从第二范式角度考虑一下问题:

更新异常:

若调整了某门课程的学分,数据表中所有行的学分值都要更新,否则就会出现同一门课程学分不同的情况。

删除异常:

   假设一批学生已经完成课程的选修,这些选修记录就应该从数据库表中删除。但是,与此同时,课程名称和学分信息也被删除了。

从第三范式考虑问题:

(学号)->(姓名,年龄,性别,系别,系办地址,系办电话)

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

即存在非关键字段学院地点,学院电话对关键字段学号的传递函数依赖。它会存在数据冗余,更新异常,插入异常和删除异常的情况。

更改为:学生:(学号,姓名,年龄,性别,系别)

系别:(系别,系办地址,系办电话)

成绩:(学号,课程,学科成绩)

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

 

总结:数据库三范式就是要消除数据冗余、更新异常、插入和删除异常。

从这几方面去检验一下自己的数据库是否合适。

posted @ 2011-03-13 07:57  转航  阅读(174)  评论(0编辑  收藏  举报