从图表

时间:2016-12-08 00:57:25

标签: database functional-dependencies

有人可以向我解释如何确定以下实例满足哪些依赖项?

 A   B   C
 1   0   1
 1   1   1

我知道它满足B-> A,B-> C,A-> C,C-> A(以及其他隐含的依赖性) 但我无法掌握如何从这张图表中查看的概念。任何人都可以解释我应该如何阅读它并继续确定它只用0和1来满足什么?

添加另一个示例以帮助更好地理解:

 A  B  C
 1  0  1
 1  1  1 
 2  2  1

由于只有一行B = 0且B = 2,你能否以B - >为基础。只有一行,只有一个唯一值。就像因为只有一个地方B = 0而A = 1这意味着它会自动保持,因为没有其他B值与0?

1 个答案:

答案 0 :(得分:1)

回答这样的问题的一种方法是查看列的所有可能的正确子集,让它们称为X 1 ,X 2 ,...,首先从单列开始(所以在这种情况下我们从X 1 = A开始,X 2 = B,X 3 = C,并尝试查看X i 中的相同值,其他列具有相同的值。

例如,从A开始,我们发现对于A = 1,B有两个不同的值:这意味着B 不能依赖于A,(它的值不同于A的值,它是函数依赖的定义),而C 具有相同的值(1),因此我们知道这个关系实例满足A→C。

观察B,我们发现所有的值都不同,所以我们可以说所有其他列都依赖于它,我们添加B→A,B→C。最后,在分析C时,我们发现当C的值相等时,只有A的值相等,因此C→A。

我们可以在这里停下来,不考虑AB,AC和BC属性对,因为在这个简单的情况下,每个属性都是某个依赖关系的决定因素,所以依赖关系已经隐含了属性集作为决定因素的依赖关系。找到。

总结

在某种情况下,要知道依赖关系X - >是或否,我们检查: 如果X的所有值都不同,则依赖保持;如果存在具有重复值的行,那么,如果对于具有相同X值的每一行,Y的值始终相同,则依赖性保持不变,否则为否。

这是另一个例子:

 A  B  C
 1  2  2
 0  3  3
 1  2  4
 2  2  4

在这种情况下A→B?是的,因为两行(第一行和第四行)具有相同的A(1)值,并且在两行中B的值等于(2)。是A→C?不,因为C在第一行和第四行中有两个不同的值。 B→A?不,因为B有三行具有相同的值(2),并且A在相同的行(1和2)中具有不同的值。