在我们的数据库类中,我们的讲师将此演示为保持依赖的分解的一个示例:
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保存下来的。
有人能解释一下为什么会这样吗?
发布于 2019-11-12 23:46:00
为了使分解保持依赖关系,数据库系统必须能够在一个分解的关系中本地检查原始F的每个函数依赖,而不必执行任何连接。
No
根据定义,给定一个覆盖函数依赖F的模式R,分解是保持依赖关系的当且仅当分解关系上依赖F的投影之和是F的覆盖,其中F在子模式上的投影是由F+中所有属性都包含在子模式中的依赖(而不是F中)构成的。
例如,在函数依赖关系F= {A R1 B,B→C,C→A}的模式R(A,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,因此分解不保留依赖关系。
https://stackoverflow.com/questions/58826791
复制相似问题