判断无损分解的例子
这个就考前看了一本课外的辅导教材,现学了一下方法,不知道能不能回忆起来。
题目:U=(A,B,C,D,E) F={A->D,E->D,D->B,BC->D,DC->A}
判断ρ={AB,AE,CE,BCD,AC}是否为无损连接分解。
解:
先求出候选键为CE。
然后画一个初始判定表如下图所示。
A | B | C | D | E | |
---|---|---|---|---|---|
AB | a1 | a2 | b13 | b14 | b15 |
AE | a1 | b22 | b23 | b24 | a5 |
CE | b31 | b32 | a3 | b34 | a5 |
BCD | b41 | a2 | a3 | a4 | b45 |
AC | a1 | b52 | a3 | b54 | b55 |
解释一下这张初始判定表的含义:
直接看ρ,比如第一个是AB,那么就在A列写a1,在B列写a2,其余都写b1j。
然后开始计算。这时候要看F中的函数依赖。
比如,第一个是A->D,看A列有没有ai,看到有a1,再看D列中对应的,如果不相同,也有aj的话,就把其他换成aj,如果没有,就以第一个ai对应的bij为基准,其他都换成bij。
所以判定表应换成:
A | B | C | D | E | |
---|---|---|---|---|---|
AB | a1 | a2 | b13 | b14 | b15 |
AE | a1 | b22 | b23 | b14 | a5 |
CE | b31 | b32 | a3 | b34 | a5 |
BCD | b41 | a2 | a3 | a4 | b45 |
AC | a1 | b52 | a3 | b14 | b55 |
接下来看E->D:
以前面修改后的表为基准。
A | B | C | D | E | |
---|---|---|---|---|---|
AB | a1 | a2 | b13 | b14 | b15 |
AE | a1 | b22 | b23 | b14 | a5 |
CE | b31 | b32 | a3 | b14 | a5 |
BCD | b41 | a2 | a3 | a4 | b45 |
AC | a1 | b52 | a3 | b14 | b55 |
D->B:
这里看D列,因为b14对应B列有a2,所以就不以D列中a4为基准,而是以b14为基准,改B列对应位置为a2。
A | B | C | D | E | |
---|---|---|---|---|---|
AB | a1 | a2 | b13 | b14 | b15 |
AE | a1 | a2 | b23 | b14 | a5 |
CE | b31 | a2 | a3 | b14 | a5 |
BCD | b41 | a2 | a3 | a4 | b45 |
AC | a1 | a2 | a3 | b14 | b55 |
BC->D:
当左边出现两个元素时,看B列和C列相同的行,发现是a2、a3,然后修改D列对应位置为a4。
A | B | C | D | E | |
---|---|---|---|---|---|
AB | a1 | a2 | b13 | b14 | b15 |
AE | a1 | a2 | b23 | b14 | a5 |
CE | b31 | a2 | a3 | a4 | a5 |
BCD | b41 | a2 | a3 | a4 | b45 |
AC | a1 | a2 | a3 | a4 | b55 |
DC->A:
D列和C列有相同的行,是a3、a4,然后修改A列对应位置为a1。
A | B | C | D | E | |
---|---|---|---|---|---|
AB | a1 | a2 | b13 | b14 | b15 |
AE | a1 | a2 | b23 | b14 | a5 |
CE | a1 | a2 | a3 | a4 | a5 |
BCD | a1 | a2 | a3 | a4 | b45 |
AC | a1 | a2 | a3 | a4 | b55 |
最终表:
A | B | C | D | E | |
---|---|---|---|---|---|
AB | a1 | a2 | b13 | b14 | b15 |
AE | a1 | a2 | b23 | b14 | a5 |
CE | a1 | a2 | a3 | a4 | a5 |
BCD | a1 | a2 | a3 | a4 | b45 |
AC | a1 | a2 | a3 | a4 | b55 |
再看表中全部为a的行,发现是第三行,所以ρ为无损连接分解。
教材上的例题图片:
判断无损分解的例子
这个就考前看了一本课外的辅导教材,现学了一下方法,不知道能不能回忆起来。
题目:U=(A,B,C,D,E) F={A->D,E->D,D->B,BC->D,DC->A}
判断ρ={AB,AE,CE,BCD,AC}是否为无损连接分解。
解:
先求出候选键为CE。
然后画一个初始判定表如下图所示。
A | B | C | D | E | |
---|---|---|---|---|---|
AB | a1 | a2 | b13 | b14 | b15 |
AE | a1 | b22 | b23 | b24 | a5 |
CE | b31 | b32 | a3 | b34 | a5 |
BCD | b41 | a2 | a3 | a4 | b45 |
AC | a1 | b52 | a3 | b54 | b55 |
解释一下这张初始判定表的含义:
直接看ρ,比如第一个是AB,那么就在A列写a1,在B列写a2,其余都写b1j。
然后开始计算。这时候要看F中的函数依赖。
比如,第一个是A->D,看A列有没有ai,看到有a1,再看D列中对应的,如果不相同,也有aj的话,就把其他换成aj,如果没有,就以第一个ai对应的bij为基准,其他都换成bij。
所以判定表应换成:
A | B | C | D | E | |
---|---|---|---|---|---|
AB | a1 | a2 | b13 | b14 | b15 |
AE | a1 | b22 | b23 | b14 | a5 |
CE | b31 | b32 | a3 | b34 | a5 |
BCD | b41 | a2 | a3 | a4 | b45 |
AC | a1 | b52 | a3 | b14 | b55 |
接下来看E->D:
以前面修改后的表为基准。
A | B | C | D | E | |
---|---|---|---|---|---|
AB | a1 | a2 | b13 | b14 | b15 |
AE | a1 | b22 | b23 | b14 | a5 |
CE | b31 | b32 | a3 | b14 | a5 |
BCD | b41 | a2 | a3 | a4 | b45 |
AC | a1 | b52 | a3 | b14 | b55 |
D->B:
这里看D列,因为b14对应B列有a2,所以就不以D列中a4为基准,而是以b14为基准,改B列对应位置为a2。
A | B | C | D | E | |
---|---|---|---|---|---|
AB | a1 | a2 | b13 | b14 | b15 |
AE | a1 | a2 | b23 | b14 | a5 |
CE | b31 | a2 | a3 | b14 | a5 |
BCD | b41 | a2 | a3 | a4 | b45 |
AC | a1 | a2 | a3 | b14 | b55 |
BC->D:
当左边出现两个元素时,看B列和C列相同的行,发现是a2、a3,然后修改D列对应位置为a4。
A | B | C | D | E | |
---|---|---|---|---|---|
AB | a1 | a2 | b13 | b14 | b15 |
AE | a1 | a2 | b23 | b14 | a5 |
CE | b31 | a2 | a3 | a4 | a5 |
BCD | b41 | a2 | a3 | a4 | b45 |
AC | a1 | a2 | a3 | a4 | b55 |
DC->A:
D列和C列有相同的行,是a3、a4,然后修改A列对应位置为a1。
A | B | C | D | E | |
---|---|---|---|---|---|
AB | a1 | a2 | b13 | b14 | b15 |
AE | a1 | a2 | b23 | b14 | a5 |
CE | a1 | a2 | a3 | a4 | a5 |
BCD | a1 | a2 | a3 | a4 | b45 |
AC | a1 | a2 | a3 | a4 | b55 |
最终表:
A | B | C | D | E | |
---|---|---|---|---|---|
AB | a1 | a2 | b13 | b14 | b15 |
AE | a1 | a2 | b23 | b14 | a5 |
CE | a1 | a2 | a3 | a4 | a5 |
BCD | a1 | a2 | a3 | a4 | b45 |
AC | a1 | a2 | a3 | a4 | b55 |
再看表中全部为a的行,发现是第三行,所以ρ为无损连接分解。
教材上的例题图片: