日期:2014-05-17  浏览次数:20845 次

急,两道关于无损分解的题目
有两道关于无损分解的题目,题目与标准答案出自《数据库系统教程习题解答及上机指导》,丁宝康编著,高等教育出版社出版,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的有损分解.

第二题自己分析一下吧.