依赖保存:为什么这个分解依赖保存?
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
丢失了,因为它无法在 R1
或 R2
中进行本地检查。但是我的导师声称它自 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,因此分解不会保留依赖关系。
在我们的数据库 class 中,我们的讲师将此展示为依赖关系保留分解的示例:
R(A, B, C) with F = { A->B, B->C } decomposed into R1(A, B) and R2(A, C)
为了使分解保持依赖性,数据库系统必须能够在分解关系之一中本地检查原始 F 的每个功能依赖性,而无需执行任何连接。
这里,我的理解是函数依赖性 B->C
丢失了,因为它无法在 R1
或 R2
中进行本地检查。但是我的导师声称它自 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,因此分解不会保留依赖关系。