有两道关于无损分解的题目,题目与标准答案出自《数据库系统教程习题解答及上机指导》,丁宝康编著,高等教育出版社出版,P68页,4.18和4.19
1.设关系模式R(ABCD),F是R上成立的FD集,F={A->B,B->C,A->D,D->C},
ρ={AB,AC,BD}是R的一个分解。相对于F,ρ是否无损分解?为什么?
标准答案:用测试过程可以知道,ρ相对于F是损失分解。
我的解法:
由chase过程,建立表格
A B C D
AB a1 a2 b13 b14
AC a1 b21 a3 b24
BD b31 a2 b32 a4
由B->C,表格变为
A B C D
AB a1 a2 a3 b14
AC a1 b21 a3 b24
BD b31 a2 b32 a4
由A->D,表格变为
A B C D
AB a1 a2 a3 a4
AC a1 b21 a3 b24
BD b31 a2 b32 a4
存在一行全部为a,因此是无损分解。
2.设关系模式R(ABCD),R上的FD集为F={A->C,D->C,BD->A},试说明ρ={AB,ACD,BCD}相对于F是损失分解的理由。
标准解答:据已知的F集,不可能把初始表格修改为有一个全a行的表格,因此ρ相对于F是损失分解。
我的解法:
由chase过程,建立表格
A B C D
AB a1 a2 b13 b14
ACD a1 b12 a3 a4
BCD b31 a2 a3 a4
由BD->A,表格变为
A B C D
AB a1 a2 b13 b14
ACD a1 b12 a3 a4
BCD a1 a2 a3 a4
存在一行全部为a,因此是无损分解。
提问:
1.什么是标准答案提到的“测试过程”?我只会用 chase过程来判断是否是无损分解,是否有其它的判断方法?
2.为什么不能用chase过程来解题?第一、二题我的chase过程解法是否有误?
请大家帮忙看看如何解决,谢谢。
------解决方案--------------------
帮顶。
我学oracle,把数据库的理论知识都忘完了。
------解决方案--------------------
唉,对牛弹琴。
你根本就没有理解什么是无损分解,为什么叫无损分解。
你以为我是通过什么7788的过程判断的?
告诉你我是通过定义。理解了一件事情的定义,才能无往不利。
chase过程无非是定义延伸出的一个自动化过程罢了。
------解决方案--------------------
楼主的推断方法出错了,你仔细看一下你的第一题:
A B C D
AB a1 a2 b13 b14
AC a1 b21 a3 b24
BD b31 a2 b32 a4
由B-> C,表格变为
A B C D
AB a1 a2 a3 b14
AC a1 b21 a3 b24
BD b31 a2 b32 a4
由A-> D,表格变为
A B C D
AB a1 a2 a3 a4
AC a1 b21 a3 b24
BD b31 a2 b32 a4
上表中,在由B->C时,你的表格就已经变错了,
可以按以下的表格做:
A B C D
AB a1 a2 b13 b14
AC a1 b21 a3 b24
BD b31 a2 b32 a4
A->B
A B C D
AB a1 a2 b13 b14
AC a1 a2 a3 b24
BD b31 a2 b32 a4
B->C
A B C D
AB a1 a2 a3 b14
AC a1 a2 a3 b24
BD b31 a2 a3 a4
A->D
A B C D
AB a1 a2 a3 b14
AC a1 a2 a3 b14
BD b31 a2 a3 a4
D->C
A B C D
AB a1 a2 a3 b14
AC a1 a2 a3 b14
BD b31 a2 a3 a4
该题四个步骤如上所示,最后表格显示,没有哪一行是全a的,所以,R是F的有损分解.
第二题自己分析一下吧.