在学习此知识点之前,可以先学习函数依赖知识点
第一范式1NF:
关系中的每一个分量必须是一个不可分的数据项
实例:
用一个单一的关系模式学生来描述学校的教务系统:学生(学号,学生姓名,系号,系主任
姓名,课程号,成绩)
依赖关系
(学号一>学生姓名,学号->系名,系名->系主任姓名,(学号,课程号)一>成绩)
缺点:
会产生数据冗余
会导致插入、删除、修改异常
tps:如何找出候选键?
第一步:找出依赖中从未在右边出现的属性。必然是候选键之一。
比如:上面依赖关系中,学号、课程号,从未在右边出现过,暂定这两个为候选键
第二步:以第一步选出的候选键为基础,依次添加其他属性,判断是否可以推出其他所有属性,将无法推出的属性加入候选键,直至全部推出。
比如:上面依赖关系中,可以根据学号、课程号,推出学生的所有属性,那么(学号、课程号)就为一个候选键(组合候选键)
第二范式2NF:消除了’非主属性’对’主属性’的部分依赖
如果关系R属于1NF,且每一个非主属性完全函数依赖于任何一个候选码,则R属于2NF。通俗地说,2NF就是在1NF的基础上,表中的每一个非主属性不会依赖复合主键中的某一个列。按照定义,上面的学生表就不满足2NF,因为学号不能完全确定课程号和成绩(每个学生可以选多门课)。将学生表分解为:
学生(学号,学生姓名,系名,系主任)
选课(学号,课程号,成绩)。
每张表均属于2NF。
第三范式3NF:消除了’非主属性’对’主属性’的传递依赖
在满足2NF的基础上,表中不存在非主属性对码的传递依赖。
继续上面的实例,学生关系模式就不属于3NF,因为学生无法直接决定系主任,是由学号一>系名,再由系名->系主任,因此存在非主属性对主属性的传递依赖,将学生表进一步分解为:
学生(学号,学生姓名,系名)
系(系名,系主任)
选课(学号,课程号,成绩)
每张表都属于3NF。
BC范式BCNF
BC范式BCNF,是指在第三范式的基础上进一步消除[主属性]对于码的部分函数依赖和传递依赖。
通俗的来说,就是在每一种情况下,每一个依赖的左边决定因素都必然包含候选键,如下:

上图中,候选键有两种情况:组合键(S,T)或者(S,J),依赖集为{SJ一T,T一J],可知,STJ三个属性都是主属性,因此其达到了3NF无非主属性),然而,第二种情况,即(S,J)为候选键的时候,对于依赖T->J,T在这种情况不是候选键,即T-J的决定因素不包含任意候选码,因此上图不是BCNF。
要使上图关系模式转换为BCNF也很简单,只需要将依赖T->J变为TS->J即可,这样其左边决定因素就包含了候选键之一S。
ps:表里面只有一个主属性,并且还满足3NF,那么必然为BCNF
4NF
4NF所允许的非平凡的多值依赖实际上就是函数依赖,4NF就是消除表中的非平凡多值依赖关系。



评论前必须登录!
注册