Database 我做错了什么?(从表中查找FD)

Database 我做错了什么?(从表中查找FD),database,functional-dependencies,Database,Functional Dependencies,以下是收入表: 以下是我的答案: 客户->城市 顾客->人口 价格->产品 价格->客户 价格->城市 价格->人口 城市->人口 人口->城市 但实际上答案是: 产品、客户->价格 客户->城市 城市->人口 顾客->人口 我做错了什么?我一直在用他的方法:我们说FD函数依赖表达式S->T有一个属性S的行列式集和一个属性T的确定集。它说S的给定子元组值出现在给定的关系值或变量/模式中,对于T总是具有相同的子元组值。对于S->{a},我们可以说S->a。对于{a}我们可以说A->T 给定一个关

以下是收入表:

以下是我的答案:

客户->城市

顾客->人口

价格->产品

价格->客户

价格->城市

价格->人口

城市->人口

人口->城市

但实际上答案是:

产品、客户->价格

客户->城市

城市->人口

顾客->人口


我做错了什么?我一直在用他的方法:

我们说FD函数依赖表达式S->T有一个属性S的行列式集和一个属性T的确定集。它说S的给定子元组值出现在给定的关系值或变量/模式中,对于T总是具有相同的子元组值。对于S->{a},我们可以说S->a。对于{a}我们可以说A->T

给定一个关系,我们说一个FD存在于它里面,或者满足于它,或者在它里面是真的,或者草率地存在于它里面,或者草率地,当FD对它说的是真的时,它有一个FD。可以使用关系值/变量/模式的属性表示的每个FD将保持或不保持

我们可以通过检查属性集的每个子集为S,属性集的每个子集为T来找到所有保持关系的FDs->T。还有一些算法。其中S是T的超集的FDs必须保持,称为平凡

我们可以通过检查属性集的每个子集作为S,每个属性作为T来找到所有在关系中保持的FDs->A。还有一些算法。然后查找所有持有的fd:FDs->{}hold琐碎地&是否可以从FDs->A中找到具有多个元素的T的S->T

以下是一些快捷方式:集合自行决定。如果S->T,则S的每个超集确定T的每个子集。如果S不确定T,则S的任何子集都不确定T的任何超集。如果一个集合在每个元组中有不同的值子集合,因此它是唯一的,则它确定每个集合。{}->T当/iff每个元组都有相同的T子代码值时

给定一些有效的FD,Armstrong的公理会生成所有也必须有效的FD。后者被称为前者的终结。生成特定闭合的一组FD称为覆盖。当从覆盖中移除任何FD时,覆盖是最小的或不可约的,从而得到一个不是覆盖的集合。每个行列式唯一的最小/不可约覆盖是正则的

通常,我们不会被要求对模式中的所有FD进行闭包,而是被要求对它们进行规范化的覆盖。一般来说,如果我们只知道一些在模式中有效的FD,那么我们就不知道它的闭包是所有有效的FD


仅列出了具有一个行列式和一个已确定属性的保留FD;您没有列出任何具有较大行列式的FD。但是如果你想给出正确的答案,那么你需要告诉我们问题的确切内容。请确认正确答案是什么。

你没有错。表中是否提供了其他信息?如果不是的话,提问者可能期望有某种程度的常识,也就是读心术。我不确定你的意思。此表不是分配的。这是演讲稿。我希望我的回答是正确的@reaanby我们的回答没有错,尽管还不完整。对于给定的答案也是如此。似乎有一些未陈述的假设。那么你能解释一下为什么它不完整吗?你能给我看看具体的吗?我是盲人。例如,两组答案都没有列出产品、城市->价格。