证明无损或有损分解



我试图解决一个关于证明给定分解是有损还是无损的问题:

验证以下 R(ABCDE) 分解中的哪一个是 通过对无损连接属性应用测试来实现无损或有损。C X {AB→C, C→E, B→D, E→A} 是 R 上的一组功能依赖关系。

  1. R(ABCDE)分解为R1(AB),R2(ADE)和R3(BCD)
  2. R(ABCDE) 分解为 R1(BCD)、R2(ACE) 和 R3(BD)

我对解决方案的尝试:

仅当给定表之间存在公共属性并且公共属性是候选键/超级键时,分解才能无损。

在第一部分,我们在 R1 中没有候选键,在 R2 中没有候选键,所以我们可以称之为有损分解吗?

在第二部分中,C 是 R2 的候选键,B 是 R3 的候选键,但 R1 没有键,而且 R2 和 R3 没有共同的属性,所以它也不是无损分解吗?

我的解释有效还是有其他标准?

说明很明确:"通过应用无损连接属性的测试"。大概这是一个重要的定理,它说二进制连接/分解是无损的,当/iff....但你不引用它。看看你的教科书。(请注意,维基百科文章有问题。你确实说"只有在以下情况下才能无损",但那只是说一些东西是必要的,这是一个方向上的"如果",而你没有说什么是足够的,这是另一个方向上的"如果",这是你需要的方向,所以你的推理是不合理的——除非你只是使用糟糕的语言,你的意思是"iff"。但即使使用"iff",你的定义也是错误的。您需要说"公共列形成至少一个组件的超级键"。而"两者之间有共同属性"不属于——无论连接是否无损,都不需要有共同的属性。没有公共属性表示公共属性集 {} 和交叉连接;但是,如果它的子集 {} 是一个组件的 CK——该组件最多有一行——则连接是无损的。另外,你需要被告知F是封面 - 然后告诉我们 - 否则找不到CK。另一个问题是"我们没有CK"——每个模式都有一个CK,因为所有列的集合形成了一个超键——而且总是有微不足道的FD。此外,您还需要找到您获得的盖子封盖的所有 CK,然后使用包含其所有属性的 FD 计算每个组件的新 CK。还有另一个定理说,闭包的那些FD正是在组件中保持的FD。可能存在给定的FD所隐含的FD,并且在一个组件中具有它们的所有属性,即使给定的FD没有。但是"属性"定理也涉及二元分解 - 所以你有没有被告知假设 - 但没有告诉我们 - R = R1 JOIN(R2 JOIN R3)按这个顺序?从FD,cover,closure和CK的定理和算法以及定义中可以清楚地看出这一点,但是你需要准确地记住定义和定理,然后精确而乏味地应用它们。这就是我刚刚所做的一切。

为什么你在两部分的问题中有疑问?你为什么不应用"属性"定理?你为什么不解决它是关于二进制连接的事实?

如果你不确定如何做一个你在教科书中看到的练习,你知道不需要创造力,那么你真的不知道你在做什么,所以回到你的教科书中找出答案。

通常我只是用这样的评论来结束投票问题:

Re "这是对的":按照你的参考/教科书展示你的工作步骤,并有理由 - 你可能会发现错误,使你的问题变得不必要,我们不知道你到底在遵循什么算法,我们想检查你的工作,但不重做它,当算法允许时,我们需要你的选择,否则我们无法告诉你你在哪里做对或错,我们不想重写你的教科书。请参阅如何提问,点击谷歌搜索"stackexchange家庭作业"和投票箭头鼠标悬停文本。

通常,当我在没有解释的情况下在引用的数据库规范化分配中看到好的 ol' F 或其他 FD 集合或列表时,我试图通过评论以下变体来努力获得可回答的帖子:

"我有这些 FD"是什么意思?"这些都是持有的FD"?--不可能。"这些都是持有的非平凡FD"?--不可能。"这些是一些持有的FD"?--问题无法回答。了解什么是封面以及应用特定定义/规则/算法的确切条件是什么。为了确定CK和NF,我们必须得到形成掩护的FD。有时是最小/不可还原的封面。并且必须给出所有属性的集合。看到这个答案。

因此,当您重做此练习时,如果您不确定自己在某个时候知道该怎么做并发布另一个问题,请务必遵循这些评论。

相关内容

  • 没有找到相关文章

最新更新