依赖保存:为什么这个分解依赖保存?

Dependency preservation: Why is this decomposition dependency preserving?

在我们的数据库 class 中,我们的讲师将此展示为依赖关系保留分解的示例:

R(A, B, C) with F = { A->B, B->C } decomposed into R1(A, B) and R2(A, C)

为了使分解保持依赖性,数据库系统必须能够在分解关系之一中本地检查原始 F 的每个功能依赖性,而无需执行任何连接。

这里,我的理解是函数依赖性 B->C 丢失了,因为它无法在 R1R2 中进行本地检查。但是我的导师声称它自 A->C.

以来通过传递性得以保留

有人能解释一下为什么会这样吗?

In order for a decomposition to be dependency preserving, the database system must be able to check each functional dependency of the original F locally in one of the decomposed relations, without having to perform any joins.

根据定义,给定具有函数依赖 F 覆盖的模式 R,当且仅当依赖 F 在分解关系上的投影的并集是 F 的覆盖时,分解是依赖保留的,其中F 在子模式上的投影由 F+(不在 F 中)中的所有依赖项构成,属性全部包含在子模式中。

例如,在具有函数依赖性覆盖的模式 R(A, B, C) 中 F = {A → B, B → C, C → A},分解 R1(A, B)和R2(B, C),F在R1上的投影包含{A → B, B → A},F在R2上的投影包含{B → C, C → B}。这是因为 B → A 和 C → B 可以从 F 的其他依赖项导出。在这种情况下,当我们对投影进行并集时,我们获得一组依赖项,从中也可以导出 C → A(所以这个分解保留了依赖关系)。

在您的示例中,F 在 R1 上的投影给出 {A → B},而 F 在 R2 上的投影给出 {A → C}。对这两个集合进行并集,我们得到:

 {A → B, A → C}

从这个集合我们无法推导出 B → C,因此分解不会保留依赖关系。