一、问题的提出
1.关系模式设计的不合理导致数据库性能较差
2.评价关系数据库好坏的标准:关系模式符合的范式的级别
二、函数依赖
一个关系模型的简短定义为R(U,F),其中U为关系模式的属性集,F称为关系模式R的函数依赖。函数依赖即为一个关系模式内部的属性间的决定关系。
三、几种范式
1.1NF
1NF即为数据库满足的最基本的范式,内容即为数据模式的属性不可再分,是原子项。
2.2NF
在1NF的基础上,无非主属性对候选码的部分函数依赖。
举例:-non 2NF
设关系模式S(S#,Sname,Sage,Addr,C#,Grade),主码可知为(S#,C#),对主码(S#,C#)来说,S#->(Sname,Sage),即关系模式S非第二范式。
非2NF带来的危害:
1.插入异常:假设一批学生刚入学,还没有进行选课,即C#还没有分配,那么学生的姓名、年龄等属性均无法插入,因为(S#,C#)为主键,C#不可为空。
2.删除异常:如果某一学生休假,就会退掉所有的课程,那么相应的学生的基本信息也会被一并删除。
3.更新异常:数据冗余问题以及数据冗余带来的更新不一致性,如果一名学生选了五十门课,那么该表中就会冗余50条学生的基本信息,如果学生的某个属性如地址需要改变,那么需要同时该50条信息,很难保证更改的过程中50条信息会一致地更改。
3.3NF
在2NF的基础上,无非主属性对候选码的传递函数依赖。
举例:-non 3NF
设关系模式EMP(EMP#,SAL_LEVEL,SALARY),EMP#(编号)为主键,EMP#决定SAL_LEVEL,SAL_LEVEL决定SALARY,可知关系模式EMP非第三范式。
非第三范式带来的危害:
1.插入异常:例如公司刚招一批新员工,员工的工资等级还没有确定,那么就无法插入(或者说可以插入,但是工资等级和工资两个属性列均为空值,不太符合现实语义)。
2.删除异常:例如公司内,位于三级工资水平的只有一个人,有一天该员工跳槽,删除该条记录,那么会随之把三级工资的对应关系删除掉。
3.更新异常:仍是数据冗余和不一致性的问题。
4.BCNF范式
在3NF的基础上,无主属性对候选码的部分或传递函数依赖。
这里再强调一下BCNF的判定条件:
1.函数依赖集F中每一个决定因素均包含码
2.没有任何属性对码部分函数依赖与传递函数依赖