步骤
1、求候选键
R(A B C D) , F = { B ->D , D ->B , A B -> C }
2、非键属性是否部分依赖于候选键
如果符合,则他是1NF
如果不符合,则继续判断
3、非键属性是否传递依赖于候选键
如果符合,则他是2NF
如果不符合,则继续判断
4、判断所有依赖项左边是否全为候选键
如果是,则他是BC范式
如果不是,就是3NF
解释部分依赖:
候选键:A B
如果 B -> C,也就是C依赖B
那么C就部分依赖于AB,(理解:C依赖于AB的一部分)
解释传递依赖:
假设有两个条件:
1) B ->A,A->C,(C非键,B是候选键)那么B->C
2) A不能 ->B
这两个条件都满足时,那么就具有传递依赖。如果有传递依赖,就不满足3范式,只能满足2范式
例题1:
R(A B C D) , F = { B ->D , D ->B , A B -> C }
1、找候选键:
L(只在左边出现的) :A
然后判断A+导出全部(A+就是A的闭包)
A+啥也导不出来,所以他不是候选键
LR(左右都出现的) :B,D
所以AB和AD是潜在的候选键
AB+ = {ABCD} = U,所以他是候选键
AD+ = U (因为D导出了B,而AB+是U)
故此题有两个候选键:AB,AD
2、找非键属性是否部分依赖于候选键,如果符合,则他是1NF, 如果不符合,则继续判断
候选键是AB,AD。那么非键属性就只有C了。
和C有关的式子只有AB -> C,而AB是候选键,所以C是由整个候选键导出的
所以C不是部分依赖,而是完全依赖于候选键,所以至少是2NF
3、非键属性是否传递依赖于候选键,如果符合,则他是2NF , 如果不符合,则继续判断
C完全依赖于AB,肯定就不会传递了,所以没有传递依赖,所以至少3NF
4、判断所有依赖项左边是否全为候选键, 如果是,则他是BC范式, 如果不是,就是3NF
AB是候选键,但B不是,因为B在右边出现过,所以不满足左边都是候选键
所以此题的最高范式为3NF
例题2:
R(ABC) F = {A -> B , B->A , A-> C , AB->C , C->AB}
1、求候选键
L:无
LR:A,B,AB (灰色用来举例,不包含在此题当中,只是为了说明如果有灰色部分,那么AB也是LR。和单A单B不冲突)
A+:{A B C} = U ,所以A是候选键
B+:{ABC} = U ,所以B是候选键
2、非键属性是否部分依赖于候选键, 如果符合,则他是1NF, 如果不符合,则继续判断
C肯定不是部分依赖,因为左边的全部都是单属性,不能再拆。
无部分依赖,所以至少2NF
3、非键属性是否传递依赖于候选键, 如果符合,则他是2NF , 如果不符合,则继续判断
1)B->A,A->C
2)判断A->B? A不能->B才满足传递依赖,不然就是一个环了,不算传递依赖
此题A能->B,所以不满足传递依赖,所以至少3NF
4、判断所有依赖项左边是否全为候选键, 如果是,则他是BC范式, 如果不是,就是3NF
A -> B , B->A , A-> C ,所以依赖项的左边:A,B。
因为A,B都是候选键。所以满足左边均为候选键,他是BC范式