依赖保留

问题描述 投票:7回答:2

因此,我正在查看我的数据库备注和材料,试图让自己了解即将采访的一般概念和术语。然而,我已经陷入了依赖,然而无损连接分解。我已经搜遍了所有并且看到了许多mathy方程式,但我正在寻找一个简单而简单的英语响应或示例。

我找到了一个来自http://www.cs.kent.edu/~jin/DM09Fall/lecture6.ppt的powerpoint,它说明了一个我无法完全理解的例子。它发布在下面。

R = (A, B, C)F = {A → B, B → C)
Can be decomposed in two different ways
R1 = (A, B),   R2 = (B, C)
Lossless-join decomposition:
         R1 ∩ R2 = {B} and B → BC
Dependency preserving
R1 = (A, B),   R2 = (A, C)
Lossless-join decomposition:
         R1 ∩ R2 = {A} and A → AB
Not dependency preserving (cannot check B -> C without computing R1 ⋈ R2)

所以我理解A→B和B→C意味着你们彼此有“参考”,而A→B和A→C意味着B和C之间没有参考或联系。

所以,

  1. Lossless-join分解是否意味着整体数据仍然完好无损?在这两种情况下,您仍然可以最终获得两种数据,对吧?如果这是错的,请纠正我! :)
  2. 在第二次分解中将连接B设置为C有什么意义,这又如何使它不依赖于保留? 如果A被删除,你将只有B和C没有关系。 如果B被删除,你仍然会有A→C。 如果删除C,您仍然会有A→B。

因为即使在第一个示例中,您在删除值时仍会得到类似的结果。

  • 如果删除A,您仍然会有B→C的关系。 如果B被删除,你将只有A和C没有关系。 如果删除C,您将具有A→B的关系。

所以无论哪种方式,如果你删除每个项目,你仍然会有两个关系实例和一个没有关系的两个项目的实例

我的猜测是,删除“中间人关系”(有一个术语),例1中的B和例2中的A,是你仍然可以将例子1的A→B与B→C联系起来,而在例2你被困在A→B而没有连接到A→C。

但正如你所看到的那样,我现在回到原点,为什么这会导致数据依赖性,而在谷歌搜索“什么是数据依赖”或“数据依赖的例子”时,它对我来说根本没有任何意义。

如果有人能帮我澄清这一点,我将不胜感激。

database database-normalization functional-dependencies
2个回答
3
投票

无损连接并不意味着任何元组丢失,或者在连接后无法恢复。无损连接意味着产生虚假元组,导致“额外”行(元组)和“信息”被认为丢失。

简单地说,当我们在一个子模式的属性中找到FD的两侧时,我认为依赖性得以保留。 (如果我错了,请有人纠正我)。


7
投票

将关系R分解为R1和R2是无损连接分解,如果你可以通过连接关系R1和R2来构造R(形成R1⋈R2你可以得到R)。

为了将关系R分解为R1和R2无损,它必须满足以下任何一个条件:

 1. R1 ∩ R2 -> R1
 2. R1 ∩ R2 -> R2

如果上述关系没有任何意义,那么可以这样想,当你将两个关系R1和R2相交并获得公共属性时,如果公共属性能够确定任何一个关系那么这(这些)常见属性是获得的关系的候选关键字(想想为什么?)因此你可以使用这个候选关键字加入另一个关系来获得R.

关于依赖性保留,如果可以通过采用所有分解关系的函数依赖性的并集来获得R的函数依赖性,则关系R的分解是依赖性保留。

© www.soinside.com 2019 - 2024. All rights reserved.