Mysql范式设计
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。
满足最低要求的范式是第一范式(1NF)。一般说来,数据库只需满足第三范式(3NF)就行了。
第一范式(1NF):
第一范式就是无重复的列,是指数据库表的每一列都是不可分割的基本数据项。
第二范式(2NF):
在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。(注:后面的范式都是以前面的范式为基础)
每个表中都有一个标志属性来性确定每个对象(注:把表看作一个类,则每一行都可以看成这个类的对象),这个唯一属性列被称为主关键字或主键、主码。
要求实体的属性完全依赖于主关键字。
关系数据库 :
在一个给定的应用领域中,所有实体及实体之间联系的关系的集合构成一个关系数据库。
关系数据库中,关系模式是型,关系是值。
函数依赖:
设X,Y是关系R的两个属性集合,当任何时刻R中的任意两个元组中的X属性值相同时,则它们的Y属性值也相同,则称X函数决定Y,或Y函数依赖于X。
<!-- 导入 在此 参考资料--><!-- end 参考资料-->
第二范式(2NF)要求实体的属性完全依赖于主关键字(注:这里的依赖应该都是指函数依赖)。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。
例:选课关系 SCI(SNO,CNO,GRADE,CREDIT)其中SNO为学号, CNO为课程号,GRADEGE 为成绩,CREDIT 为学分。 由以上条件,关键字为组合关键字(SNO,CNO)
在应用中使用以上关系模式有以下问题:
a.数据冗余,假设同一门课由40个学生选修,学分就 重复40次,也就是说表要有40行。
b.插入异常,如计划开新课,由于没人选修,没有学号关键字,只能等有人选修才能把课程和学分存入。
c.删除异常,若学生已经结业,从当前数据库删除选修记录。某些门课程新生尚未选修,则此门课程及学分记录无法保存。
原因:非关键字属性CREDIT仅函数依赖于CNO,也就是CREDIT部分依赖组合关键字(SNO,CNO)而不是完全依赖。
解决方法:分成两个关系模式 SC1(SNO,CNO,GRADE),C2(CNO,CREDIT)。新关系包括两个关系模式,它们之间通过SC1中的外关键字CNO(注:cno是sc1的外键同时也是c2的主键)相联系,需要时再进行自然联接,恢复了原来的关系
这样的话,不管 SC1有几行,C2都只是根据课程的个数而定。
第三范式:
第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。即两个表中不能含同一个属性。
812

被折叠的 条评论
为什么被折叠?



