整理用于复习,参考了老师的课件和网上的一些方法。
例题1. 对于关系模式r(R) = r(A,B,C,D,E,G) 和函数依赖集F = {AB→C, AC→B, AD→E, B→D, BC→A, E→G},判断下列分解是否是保持依赖分解?是否是无损连接分解?
( 1 ) {AB, BC, ABDE, EG};
解:先用表格判断法分析是否是无损连接分解:如果某一行成为a1, a2, …, aN,则是无损连接分解;否则是有损连接分解。
表格的第一列表示子关系模式,第一行列出所有的属性。
① 若 ri 中包含属性 Aj ,则在第 i 行、j 列处填上 aj 。
② 再根据函数依赖集 F 进行表格填充
为避免反复判断,先分析单属性的依赖。对于 B→D:
看这两列是否有整体上具有相同符号的行,因为第 3 行含有 a2 和 a4 (即 B→D) ,所以1、2行才能填上a4。
同理,对于 E→G:
由于其他函数依赖都不会再得到E,所以返回考虑 AD→ E:
继续考虑 AB→C, AC→B, BC→A,由于表格中的符号没有一行对应函数依赖,所以表格没有再变化。
最终没有一行填满变成(a1,a2,a3,a4,a5,a6),所以该分解是有损连接分解。
是否保持依赖分解:
对于 r1(AB) ,看它所在行,无法得到F中的任何一个函数依赖,所以 F1 = { };
同样地,r2(BC) 的函数依赖 F2 = { };
r3(ABDE) 的函数依赖 F3 = { AD→E, B→D };
r4(EG) 的函数依赖 F4 = { E→G };
因为(F1∪F2∪F3∪F4)+ ≠ F +,所以该分解不保持函数依赖。
( 2) {ABC, ACDE, ADG}
解:先判断无损连接,列出表格:
分析函数依赖,对于AC→B:
对于B→D:
对于AD→E:
对于E→G:
因为可以形成一整行的(a1,a2,a3,a4,a5,a6),所以是无损连接分解。
是否保持依赖分解:
r1(ABC) 的函数依赖 F1 = { AB→C,AC→B , BC→A };
r2(ACDE) 的函数依赖 F2 = { AD→E};
r3(ADG) 的函数依赖 F3 = { Ø };
因为(F1∪F2∪F3)+ ≠ F +,所以该分解不保持函数依赖。