2014-04-25 31 views
1

我目前正在研究正常化。我知道如何规范化给定非标准化列表的数据。分解成2NF

但是,这是一个有点困惑我

Q. Decompose R{a,b,c,d,e,f} into 2NF using following functional dependencies. 

a -> b,c,d,e,f 
b,c -> a,d,e,f 
b -> f 
d -> e 

对于这个我的回答是:

R0 = a - > b,c 
R1 = b,c - > a,d,e 
R2 = b - > f 

谁能帮助我?

回答

2

主要有两个问题:

  1. 有很多在你的文件描述符设置冗余。如果首先计算最小覆盖率,您经常会节省一些时间。

  2. 无论标准化水平如何分割关系的方式都没有意义,。这个关系的候选键是ABC;但在你的回答中,你有所有键在R0一起,没有别的,这是多余的(每个表一个键就足够了)和无用的(想想看,没有什么可以在这样的表中查询!再次将所有的密钥放在R1中,这也是多余的。

一种更好的方式来分解这种关系将是

R1(B, F), R2(D, E), R3(A, B, C, D) 

它同时满足2NF和3NF。

顺便说一句,你应该检查出this Stanford course,这对了解标准化是非常有用的。维基百科页面也写得很好。

编辑回答你对评论的问题:函数依赖意味着RHS上的值由LHS上的值决定。在这种情况下,我们有

A -> BC 
BC -> A 

如果更换的东西更直观的字母,这相当于:

post_id -> { post_title, post_date } 
{ post_title, post_date } -> post_id 

也就是说,如果你知道post_id你可以计算出两个post_titlepost_date;同时,如果您知道post_titlepost_date,则可以追溯post_id。这是循环依赖的含义。

这就是说,在每一个关系所有的文件描述符应该保留所以R3BC -> DA -> D保持,但你并不需要ABC -> D这是不是在你的FD集,它显然是多余的。作为一方,A -> D也是多余的,因为您已经有A -> BC, BC -> D。这就是为什么我提到要先计算最小覆盖率的原因。

+0

谢谢。我很困惑,因为b,c,d,e,f取决于a和a取决于b,c。所以在你的答案中哪一个取决于哪个?你能证明吗? D取决于A,B,C(A,B,C - > D)? – IamBatman

+0

@IamBatman:我编辑了我的答案来回答你的问题:) – laurids