MySQL关系规范化
做者:就叫易易好了
时间:/10/21
指导老师:桃群老师
1、关系规范化
一、函数依赖
什么是函数依赖?好比学生管理系统数据库,有学生姓名(Sname)、学生系名(Sdept)、学生学号(Sno)等等。一个学号只能惟一肯定一个学生,一个学生只在一个系学习。因此,当“学号”肯定后,学生姓名和该学生所在系也被惟一肯定了。web
这时咱们能够说数据库
Sno函数决定Sname和Sdept,或者说Sname,Sdept函数依赖于Sno数据库设计
可记做:Sno->Sname,Sno->Sdeptsvg
1.1 彻底函数依赖
在R(U)中,若X->Y,而且对于X的任意一个真子集X’,都有Y不依赖于X’,那么称Y对X彻底函数依赖函数
好比一个学生的学号和课程号才能共同决定一个学生该门课的成绩,即(Sno,Cno)->Grade,但X的真子集为Sno或者Cno,他们没法单独决定该门课的成绩,因此学号和课程号彻底函数依赖成绩学习
2.2 部分函数依赖
在R(U)中,若X->Y,对于X的任意一个真子集X’,有Y依赖于X’ ,那么称Y对X部分函数依赖。设计
好比(Sno,Cno)->Sname,X的真子集Sno和Cn都能单独决定学生姓名,因此学号和课程号部分函数依赖学生姓名。code
2.3 传递函数依赖
在R(U)中,若是Y依赖于X,X不依赖于Y,Z依赖于Y,则称Z对X传递函数依赖;xml
好比:Sno->Sdept,Sdept不依赖于Sno,Sdept->Manager,则Sno传递函数依赖于Managerit
2.4 直接函数依赖
在R(U)中,若是Y依赖于X,X依赖于Y,Z依赖于Y,则称Z对X直接函数依赖
好比:Sno->Sdept,Sdept->Sno,Sdept->Manager,则Sno直接函数依赖于Manager
2、范式
范式是衡量关系的规范化程度。
知足最低要求的是第一范式,简称1NF。在第一范式中知足进一步要求为第二范式,简称2NF,以此类推。
1NF<2NF <3NF
一个低一级的范式关系模式,经过模式分解可转换为更高一级的范式关系模式集合,这个过程就叫规范化。
一、第一范式 (1NF)
若一个关系模式R的全部属性都是不可再分项,则该关系属于第一范式
学号
姓名
班级
正班长
副班长
029
成小白
5班
龙龙
豫豫
030
晨小美
5班
龙龙
豫豫
在上面这个表格中,全部属性都是不可再分项,因此该关系为1NF。
二、第二范式(2NF)
1NF是关系数据库中对关系最基本的要求,但不是理想的结构形式,仍然有大量的数据冗余和操做异常。因此为了解决这些问题,就要消除模式中属性之间存在的部分函数依赖,将其转化成更高一级的第二范式。
若关系模式R属于1NF,且R中每一个非主属性都彻底函数依赖于主关键字,则称R是第二范式(2NF)
也就是说当1NF消除了非主属性对关键字的部分函数依赖,则称为2NF
案例:
学生关系S(Sno,Sname,Sdept,Manager,Cno,Grade)
·关系S属于第一范式
·关系S不属于第二范式,存在非主属性对(Sno,Cno)的部分函数依赖
·若是将该学生关系S分解成如下两个关系S1和S2,
-S1(Sno,Cno,Grade),这时Grade彻底依赖于主码
没有部分函数依赖,因此属于第二范式
-S2(Sno,Sname,Sdept,Manager)
主码是Sno,其余非主关键字都是彻底函数依赖于主码
属于第二范式
三、第三范式(3NF)
当第二范式消除了非主属性对码的传递函数依赖,则称为第三范式
举例:
关系S1(Sno,Cno,Grade),不存在非主属性对主属性的部分函数依赖个传递函数依赖,因此S1属于第三范式。
关系S2(Sno,Sname,Sdept,Manager),存在非主属性Manager对码Sno的传递函数依赖,即Sno->Sdept,Sdept不依赖于Sno,Sdept->Manager,Sno传递函数依赖于Manager。因此S2不属于第三范式。
若将S2分解成下述两个关系S3和S4,即:
S3(Sno,Sname,Sdept),消除了非主属性对主属性的部分函数依赖和传递函数依赖,属于第三范式。
S4(Sdept,Manager),消除了非主属性对主属性的部分函数依赖和传递函数依赖,属于第三范式。
解决了删除异常、更新异常和冗余度大等问题
四、BC范式(BCNF)
当第三范式消除了主属性对码的部分和传递函数依赖,称为BCNF
若是关系R是BCNF,那么R必定是3NF
若是R是第三范式,而且R只有一个候选码,则R必属于BCNF
二元关系模式R一定是BCNF
都是主属性的关系并不是必定属于BCNF
从数据库设计的角度看,在函数依赖的基础上,分解最高范式BCNF的模式中仍然勋在数据冗余问题,这时就须要更高的范式来解决这个问题,本篇文章先到这里,后面再更新多值依赖,链接依赖和更高范式喔~
如果觉得《mysql 函数依赖关系_MySQL关系规范化》对你有帮助,请点赞、收藏,并留下你的观点哦!