数据库三范式浅谈
第一范式:数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。(在任何一个关系数据库中,第一范式是对关系模式的基本要求,不满足第一范式的数据库就不是关系数据库。)
第二范式:属性完全依赖于主键,消除部分子函数依赖。
完全依赖是指不能存在仅依赖主关键字一部分的属性。
第三范式:属性不依赖于其他非主属性,消除传递依赖。
范例:
将学号、学生姓名、年龄、性别、课程、课程学分、系别、学科成绩、系办地址、系办电话。字段建表
上面字段存在以下关系:
(学号)→ (姓名, 年龄,性别,系别,系办地址、系办电话)
(课程名称) → (学分)
(学号,课程)→ (学科成绩)
(系别)->(系办地址,系办电话)
如若这些字段都在一个表中的话,从第二范式角度考虑一下问题:
更新异常:
若调整了某门课程的学分,数据表中所有行的学分值都要更新,否则就会出现同一门课程学分不同的情况。
删除异常:
假设一批学生已经完成课程的选修,这些选修记录就应该从数据库表中删除。但是,与此同时,课程名称和学分信息也被删除了。
从第三范式考虑问题:
(学号)->(姓名,年龄,性别,系别,系办地址,系办电话)
(学号)->(所在学院)->(学院地点,学院电话)
即存在非关键字段学院地点,学院电话对关键字段学号的传递函数依赖。它会存在数据冗余,更新异常,插入异常和删除异常的情况。
更改为:学生:(学号,姓名,年龄,性别,系别)
系别:(系别,系办地址,系办电话)
成绩:(学号,课程,学科成绩)
课程:(课程名称,学分)
总结:数据库三范式就是要消除数据冗余、更新异常、插入和删除异常。
从这几方面去检验一下自己的数据库是否合适。