查找包含3个属性的所有候选键(如果有)?示例中期

时间:2016-04-20 01:15:26

标签: database-design functional-dependencies candidate-key

这是来自我的数据库课程中期示例的问题。中期没有给我们解决方案,我只想问我的解决方案在任何意义上是否正确

Consider the following relation T=(N,A,I,V,L,P,C,D)

with the FD={N->AI , AV->LP, VC->PD, VL->P, LA->D, NP->IVL, CID-> LVP, AD->IP}
Find all candidate keys that consist of 3 attributes if any? 

我试图解决这个问题,这就是我得到的:

Left Attributes = N,C
Middle Attributes = A,I,V,L,P,D
Right Attributes = None

然后我用NC制作了3个属性对并找到了它们的闭包:

NC+ = {NCAI} NO
NCA+ = {NCA} NO
NCI+ = {NCI} NO
NCV+ = {NCVPDAIL} = Get PD from VC->PD AND AI from N->AI and L from NP->IVL? Is this correct? If IV is already in there can I use this dependency to get L?
NCL+ ={NCLAIDVP} = Get AI from N->AI & D from LA->A and VP from CID->LVP using same logic from above?
NCP+ = {NCPAIVLD} straight forward using same logic from above
NCD+ = {NCDAILVD} YES

所以我有4个候选键,其中有3个属性。 这是NCV,NCL,NCP,NCD。

我是这样做的还是应该只有一个应该是NCD的候选键?

谢谢!

1 个答案:

答案 0 :(得分:0)

您已给出正确答案。该关系只有四个候选键,NCV,NCL,NCP,NCD,都具有三个属性。

N和C必须始终存在于每个键中,因为它们仅出现在左侧部分。试图向其添加其他属性并计算闭包是检查哪些是关键所需要的。注意,NCA +和NCI +等于NC +并产生NCAI。你也应该尝试组合NCAI +,但结果是一样的。因此,最后,添加到NC的四个属性V L P和D中的每一个都生成一个键,您的答案是正确的。