具有冗余关系的功能依赖推论

时间:2018-07-04 13:58:05

标签: relational-database relation database-normalization functional-dependencies

给出1) CA -> B2) B -> C可以使用Armstrong's axioms来推断A -> B吗?

我试图用推理规则来证明这一点,但被困住了。

BA -> CA Augmentation of A
BA -> CA and CA -> B Transitive property
AB -> B

能够删除B似乎很有意义,因为它是多余的吗?可以使用基本推理规则证明的公理吗?

这个问题甚至可能吗?

2 个答案:

答案 0 :(得分:0)

您似乎误解了基础知识。您证明FD在其他FD持有时就成立,而不是在证明公理。阿姆斯特朗的(所谓的)“轴心” 是FD的“基本推理规则”。阅读您的教科书。它表示该公理是“完整的”,并表示这意味着,如果您继续应用自从添加FD以来一直未应用过的一个,直到不添加任何FD,那么您将获得所有持有的FD。 / p>

所以就这样做,看看是否添加/暗示了您的。灵感和/或运气可能会缩短事情。

而且-一个反例可以反驳一项主张。因此,使用属性A,B和C生成一些小的示例关系,其中CA-> B&B-> C并尝试生成一个不是A-> B的情况。同样,灵感和/或运气可能会缩短事情

答案 1 :(得分:-1)

A -> B无法推断,如以下反例所示:

假设C是一组非空属性。 B = C(因此B也是一组非空属性,B的每个成员也是C的成员,反之亦然)。

根据反射公理,很明显C -> C成立。而且由于B等于C,所以B -> C也成立。

假设A是一组空的属性。那么显然不能从A推断出任何非空的属性集。(一个人不能一无所获地推断出客户的地址)。

CA表示C和A的并集。由于A为空,因此CA等于C。 因此,CA -> CC -> C相同,而自反公理是正确的。而且由于B等于C,CA -> B也成立。


对于那些认为空集不是有效集的人,更明确的示例:

C = { street, telephone_number }B = CA = { street }

CA仍然等于C,因此CA -> B保持不变,就像B -> C一样。但是很明显,如果您只知道街道,就很难推断出电话号码,因此A -> B不适用。


由于有些人确信一个人的电话号码在功能上取决于该人所居住的街道(如果为真,那确实会打断我的反例),因此我将对此进行详细说明。

>

我住在一个有很多(即多于一条)街道的村庄。这些街道中的每条街道都有以数字标识的建筑物。这些建筑物中的每一个都有一个或多个公寓(如左三楼),每个公寓中可容纳1个或更多的人。所有这些人都有电话。有些人共享电话,其他人则不。

描述我村里人的关系具有streetbuilding_numberapartment_numbertelephone_number等属性(人名,出生日期, ...)。

由于在很多情况下(只有一个建筑物和一个公寓,只有一个人居住的情况很少,只有一栋建筑物和一间公寓很少有人居住),街道地图的单一价值在很多情况下是可以看到的,所以这意味着每条街道上都有很长的清单的电话号码(其中“长”表示“多个”)。

即使使用了完整的地址(街道,建筑物号,公寓号),由于可能有多个人居住在该地址,因此仍然可以找到多个电话号码。

由于某些人共享电话,因此电话号码也不是所有人的钥匙。而且由于不排除共享电话的人居住在不同的地址,因此电话号码和街道之间甚至没有功能上的依赖。

通过以上所述,{ street }{ telephone_number },这意味着{ street }{ street, telephone_number }之间也没有功能依赖性。 因此A -> B不成立。