首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >依赖保存:为什么这种分解依赖保持?

依赖保存:为什么这种分解依赖保持?
EN

Stack Overflow用户
提问于 2019-11-12 21:16:08
回答 1查看 894关注 0票数 1

在我们的数据库类中,我们的讲师将此演示为保持依赖的分解的一个示例:

代码语言:javascript
复制
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保存下来的。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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}。通过将这两组集合结合,我们得到:

代码语言:javascript
复制
 {A → B, A → C}

从这个集合,我们不能派生B→C,因此分解不保留依赖关系。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58826791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档