关系模型要求关系必须是规范化的,即要求关系必须满足一定的规范条件。
第一范式(1NF):规范条件中需要满足的最基本的一条,关系的每一个分量必须是一个不可分的数据项,换句话所,就是表中不允许有表
例如,下表中成绩是可分的数项,成绩又分为数学成绩和英语成绩,所以该表不符合关系模型要求
第二范式(2NF): 属于第一范式且每一个非主属性完全依赖于任何一个候选码,那么它也属于第二范式。属于2NF必属于1NF。
第三范式(3NF): 属于第二范式且每一个非主属性不传递依赖于码,那么它也属于第三范式。属于3NF必属于2NF。
BCNF:通常认为是修正的第三范式,也称扩充的第三范式。属于第三范式且没有任何属性完全函数依赖于非码的任何一组属性。属于BCNF必属于3NF,反之未必成立。
以下通过三个例子,简单分析,便于理解。
例1:(2NF)
关系模式R的属性集为{A, B, C, D, E},函数依赖集F = {AB→CE, E→AB, C→D},则R的最高范式为(B)。
A. 1NF B. 2NF C. 3NF D. BCNF
分析:
就函数依赖分析:AB->C,AB->E,E->A,E->B,C->D,由此推出R的候选键为AB和CE,(候选码首先得可以推出其余所有关系,如AB可以得到C,E。C可以得到D,即AB间接得到D。)因为AB->D,C->D,D属性完全依赖于C(非码),所以排除BCNF,AB->CE(CE不能推AB),C->D,有AB->D(传递依赖于码),排除3NF,因为C E D都完全依赖于AB,(AB的真子集不能推出C D E)所以为第二范式2NF。
例2:(3NF)
设关系模式R(A, B, C, D)上的函数依赖集F = {AB→D, AC→BD, B→C},则R最高范式是(C)。
A. 1NF B. 2NF C. 3NF D. BCNF
分析:
就函数依赖分析:AB->D,AC->B,AC->D,B->C,由此可以推出R的候选码为AB,AC。分析候选码AC,AC->C,B->C,B为非码,推出C,所以排除(BCNF:没有任何属性完全函数依赖于非码的任何一组属性),B D完全依赖于AC,很容易看出,函数依赖中不存在传递依赖,所以为3NF。
例3(BCNF)
设关系模式R(X,Y,Z)上的函数依赖集F={Y->Z,Y->X,X->YZ},则R最高范式是(D)
A. 1NF B. 2NF C.3NF D. BCNF
就函数依赖分析:Y->Z,Y->X,X->Y,X->Z,有此可以推出R的候选码为X,Y。分析X,X->Y,X->Z,虽然Y->X,但Y是码,X->Y,Y->X,所以不存在传递依赖。所以为BCNF。