【问题标题】:Database - Lossless Join Decomposition Criteria数据库 - 无损连接分解标准
【发布时间】:2017-07-08 22:48:19
【问题描述】:
在Wikipedia 上,它说:
如果以下函数依赖项中的至少一个在 F+ 中,则分解是 R 的无损连接分解(其中 F+ 代表 F 中每个属性或属性集的闭包):
R1 ∩ R2 → R1 或 R1 ∩ R2 → R2
很遗憾,我不明白这个标准。众所周知,如果 R1 和 R2 的连接是 R,则分解是无损的,但是如何从上面的标准推导出来呢?
【问题讨论】:
标签:
database
relational-database
functional-dependencies
【解决方案1】:
那篇维基百科的文章一团糟。
当且仅当组件(原始的投影)重新连接到它时,分解才是无损的。
您引用的内容不是无损分解的定义。这是一个充分条件,表明分解是无损的,给定一些原始函数中的依赖关系。如果满足条件,则连接是无损的。这不是必要的条件。
一些大学的 html 幻灯片:
Decomposition
10 我们将对无损连接做出更正式的定义:[...]
11 换句话说,无损连接分解是这样一种分解:对于任何法律关系 r,如果我们分解 r 然后“重构”r,我们就会得到我们开始时的东西——不多也不少。
一个有用的充分条件 Lossless-Join Decomposition during Normalization Using Functional Dependencies
令 R 为关系模式。
令 F 为 R 上的一组函数依赖。
令 R1 和 R2 形成 R 的分解。
如果至少以下函数依赖项之一在 F+ 中,则该分解是 R 的无损连接分解:
1 R1 ∩ R2 → R1
2 R1 ∩ R2 → R2
知道充分条件背后的想法是,您只需要展示一些关于共享属性集和一些功能依赖关系的信息,就可以知道组件连接到原始组件并且(等效地)是无损分解。
为什么这是真的?简单来说,就是保证自然连接中涉及的属性(R1 ∩ R2)是两个关系中至少一个的候选键。