2.第二范式(2NF) 如果关系模式R满足第一范式,且它的任何一个非主属性都完全函数依赖于任一个候选码,则R满足第二范式(简记为2NF)。
图 5-3 关系模式REPROT(S#, C#, TITLE, LNAME, ROOM#, MARKS)的码是(S#, C#),非主属性TITLE,LNAME 和 ROOM# 对码是部分函数依赖,并存在传递函数依赖C#→LNAME,LNAME→ROOM#。REPORT属于1NF,不属于2NF。 为了消除部分函数依赖,将REPORT关系模式分解为REPORT1和COURSE这二个关系模式: REPORT1(S#, C#, MARKS) 函数依赖是(S#, C#) →MARKS COURSE(C#, TITLE, LNAME, ROOM#) 函数依赖是C#→TITLE, C#→LNAME, LNAME→ROOM#。 REPORT1和COURSE都消除了对码的部分函数依赖,因此都属于2NF。一个关系模式仅仅满足2NF仍是不够的,如在关系模式COURSE (C#, TITLE, LNAME, ROOM#)中,仍存在着插入,删除和修改异常问题: ・ 新来的教师,还没有分配授课之前,教师的姓名及教室编号都不能加到关系中; ・ 如果要修改某个教师的教室编号,必须修改与教师授课相对应的各元组中的教室编号,因为一位教师可能会教多门课。 存在上述这些问题的原因是关系模式COURSE中存在传递函数依赖,所以要把关系模式COURSE向第三范式转化,除去非主属性对码的传递函数依赖。 3.第三范式(3NF) 如果关系模式R满足 2NF,并且它的任何一个非主属性都不传递依赖于任何候选码,则称R是第三范式 (3NF), 记作R3NF。 在上面的例5中,关系模式: COURSE(C#, TITLE, LNAME, ROOM#) 其中存在非主属性ROOM#对码的传递依赖,即: C#→LNAME, LNAME→ROOM# , 因此COURSE不属于3NF。 将COURSE分解为: COURSE1(C#, TITLE, LNAME) 和 LECTURE(LNAME, ROOM#), 则关系模式COURSE1和LECTURE中都没有传递函数依赖,因此 COURSE1 和 LECTURE 都属于3NF。 至此,关系模式REPORT分解为下列3个属于3NF的一组关系模式: REPORT1 (S#, C#, MARKS) COURSE1 (C#, TITLE, LNAME) LECTURE (LNAME, ROOM#) 和关系模式REPORT相比,这些关系模式是对现实世界更加精确的描述。把这3个关系进行连接,总能重构初始的关系。 4.BCNF范式 BCNF (Boyce Codd Normal Form) 是由Boyce 和 Codd 提出的,通常认为BCNF是3NF的修正,有时也称为扩充的第三范式。 定义:关系模式R∈1NF,若X→Y,且YX 时,X必含有候选码,则R∈BCNF。 也就是说,在关系模式R中,若R的每一个决定因素都包含候选码,则R∈BCNF。 由BCNF的定义可知,一个满足BCNF的关系模式有如下特性: ● 每个非主属性对每个码都是完全函数依赖; ● 所有的主属性对每一个不包含它的码,也是完全函数依赖; ● 没有任何属性完全函数依赖于非码的任何一组属性。 ● 若R∈BCNF,则R∈3NF。若R∈3NF,则R不一定于BCNF。
图5-4 STJ的函数依赖 ・ (S,J)和(S,T)都是候选码;S,T,J都是主属性。 ・ STJ3NF,因为没有任何非主属性对候选码的传递函数依赖或部分函数依赖。 ・ STJBCNF,因为T是决定因素,但T不包含码。 ・ 对于不是BCNF的关系模式,仍然存在不合适的地方。 例如,在例6中,当课程已设置,并已确定教师,但还没有学生选课,则教师和课程的信息就不能加入到数据库中。 非BCNF的关系模式可以通过分解成为BCNF,例如STJ可以分解为ST(S, T)和TJ(T, J), 则ST和TJ都是属于BCNF范式。BCNF是3NF的进一步规范化,即限制条件更为严格。3NF中,对于Y是非主属性的非平凡函数依赖X→Y,允许有X不包含码的情况。而在BCNF中,不管Y是主属性还是非主属性,只要X不包含码,就不允许有X→Y这样的非平凡函数依赖。因此,若R∈BCNF,则必有R∈3NF。然而,BCNF又是概念上更加简单的一种范式,判断一个关系模式是否属于BCNF,只要考察每个非平凡函数依赖X→Y的决定因素X是否包含码就行了。 3NF和BCNF是在函数依赖的条件下对模式分解所能达到的分离程度的限度。一个关系数据库中的所有关系模式如果都属于BCNF,这在函数依赖范畴内,就已经实现了彻底的分离,达到了最高的规范化程度,并消除了插入异常和删除异常。3NF的不彻底性表现在可能存在主属性对码的部分函数依赖和传递依赖。 |