输入:关系R0和其上的函数依赖集S0
输出:由R0分解出的关系集合,其中每个关系均属于BCNF
方法:下列步骤可以被递归地用于任意关系R和FD集合S。初始时,R=R0,S=S0。
《数据库系统基础教程 原书第3版》P52
习题3.3.1 对于下列关系模式和FD集合:
a) R(A,B,C,D) FD{AB→C,C→D,D→A}
b) R(A,B,C,D) FD{B→C,B→D}
c) R(A,B,C,D) FD{AB→C,BC→D,CD→A,AD→B}
d) R(A,B,C,D) FD{A→B,B→C,C→D,D→A}
e) R(A,B,C,D,E) FD{AB→C,DE→C,B→D}
f) R(A,B,C,D,E) FD{AB→C,C→D,D→B,D→E}
做下列事情:
i) 指出所有违反BCNF的FD。不要忘记考虑那些不在上述集合中、但可以由它们推断出但FD。但是,没有必要给出右边含有不止一个属性但BCNF违例。
ii) 根据需要把关系分解为一系列属于BCNF的关系集合。
非平凡FD(共14个):
C→A,C→D,D→A,AB→C,AB→D,
AC→D,BC→A,BC→D,BD→A,BD→C,
CD→A,ABC→D,ABD→C,BCD→A
键:AB、BC、BD
违反BCNF的FD(左侧不含键):C→A,C→D,D→A,AC→D,CD→A
可从C→D开始分解,C+=ACD
得到R1=C+=ACD,R2=BC
其中,BC是二元的,满足BCNF
对ACD,有C→A,C→D,D→A,AC→D,CD→A
C为键,D→A不符合BCNF,故仍需分解
D+=AD,分解为AD和CD,都满足BCNF
故分解结果为AD,CD,BC
键:AB
不满足BCNF
从B→C开始分解,B+=BCD,分解为BCD和AB,均满足BCNF
键:AB、BC、CD、AD
满足BCNF,不用分解
键:A、B、C、D
满足BCNF,不用分解
键:ABE
不满足BCNF
从AB→C开始分解,AB+=ABCD,分解为ABCD和ABE
对ABCD,键为AB,存在B→D不满足BCNF
分解B→D,B+=BD,分解为BD和ABC,均满足BCNF
对ABE,键为ABE,满足BCNF
故分解结果为ABC,BD,ABE
键:AB、AC、AD
不满足BCNF
方式1:
从D→B开始分解,D+=BDE,分解为ABC,BDE
ABC的键是AB、AC,存在C→B不满足BCNF
分解C→B,C+=BC,分解为AC,BC,均满足BCNF
BDE的键是D,满足BCNF
故分解结果为AC,BC,BDE
方式2:
从C→D开始分解,C+=BCDE,分解为AC,BCDE
AC满足BCNF
BCDE的键为C,D→B不满足BCNF
分解D→B,D+=BDE,分解为CD,BDE
CD满足BCNF
BDE的键为D,满足BCNF
故分解结果为AC,CD,BDE