例题:关系模式R<U,F>,U={A,B,C,D,E},F={A→BC,ABD→CE,E→D},求F的最小依赖集。
第一步:得到{A->B,A->C,ABD->C,ABD->E,E->D}
第二部:得到{A->B,A->C,ABD->E,E->D}
第三步:得到{A->B,A->CAD->E,E->D}
1NF是关系型数据库的基本的要求,如果连这个都不满足的话,就不能称为关系型数据库。
1NF:所有的属性都不可再分。
2NF:在1NF的基础上,每一个非主属性完全函数依赖于任何一个候选码
例子:
例一:U={A,B,C,D,E},F={AD->E,A->B,AD->B,A->C,AD->C,B->C},那么主码为AD,非主属性为BCE,B、C并不完全依赖于码,不满足2NF。
例二:U={A,B,C,D,E},F={AB->C,A->D,B->E},那么主码为AB,但是A->D,D仅仅依赖于主码的部分属性A,所以不满足2NF.
如果所有的候选码都只有一个属性,那么他起码是2NF
3NF:每一个非主属性既不传递依赖与码,也不部分依赖于码。
如果非主属性之间存在依赖关系,那么就不是3NF
例子:
F={X->Y,X->Z,Y->Z};可以看出,主码为X,但是存在非主属性Z对非主属性Y的依赖,所以不满足3NF.
BCNF:每一个决定因素都包含码
例子:
U={S,T,J},F={(S,T)->T,(S,T)->J,T->J}。这里(S,J)和(S,T)都是候选码,但是在函数依赖T->J中,左边没有包含任一候选码(是(S,J)或者(S,T))。所以,该模式不能称为BCNF
例题:设有关系R(A,B,C,D),其函数依赖集F={B->C,C->D,D->A},则关系r至多满足(3NF)。
第一步:求候选码
找出B只在左侧,C,D两侧都有,A只在右侧,对B进行闭包运算,发现不需要(C,D)就可以得到U。得到候选码B。
第二部:判断范式
不满足非属性间得传递性,所以是2NF。