直接在例题中感悟:
R={A,B,C,D,E,F,G},F={A->B,A->C,C->D,C->E,E->FG},将R分解为BCNF
http://t.csdn.cn/4D939有详细解最小依赖集的步骤,建议先看这个,接下来解题:
分解的步骤可以概括为:
1.求R的闭包
2.根据闭包求函数依赖
3.根据函数依赖求L,R,LR,N,求出超键
4.若左边的字母不是超键,继续分解(回到第1步)
第一轮分解:
L:A
R:B,D,F,G
LR:CE
N为空集
A一定为候选键,x0=A,x1=ABCDEFG=U
所以A为唯一候选键
R中候选键为A,又因为F中C->D,C不是超键,所以要将R分解为
R1(CD),R2(ABCEFG)
第二轮分解:
对于R2(ABCDEFG)以下用“A+”表示闭包:
A+=U
C+=CDEFG
E+=EFG
所以R2中,F2={C->EFG,E->FG,A->BCEFG}
R中候选键:L:A,R=FGB,LR=CE,N为空
所以R2中的候选键为A,C->EFG中C不是超键,所以将R2分解为
R3(CEFG)R4(ABC)
第三轮分解:
对于R4的函数依赖:A->BC
R3(CEFG)的闭包
C+=CEFG
E+=EFG
所以F3中{C->EFG,E->FG}
因为R3中超键是C,E->FG不是超键,所以将R3分解为
R5=EFG,R6=CE
R5的函数依赖 E->FG R6的函数依赖C->E,都是BCNF
综上R分解为p={CD,ABC,EFG,CE}
对应函数依赖集为{E->FG,C->E,A->BC,C->D}