函数依赖和连接依赖的区别

fer*_*fer 6 relational-theory

根据定义,函数依赖被定义为

设 X 和 Y 是关系 R 的属性的子集。函数依赖 X ?Y 对 R 成立当且仅当对于 R 的任何实例 r,每当 r 的两个元组 t1 和 t2 在属性 X 上一致时,它们也对属性 Y 一致。也就是说,

t1.X = t2.X ? t1.Y = t2.Y

同时,一个连接依赖

如果 T 总是可以通过连接多个表来重新创建,每个表都具有 T 的属性子集,则表 T 受连接依赖性的约束。

我可能是错的,但我想知道函数依赖和连接依赖的概念之间是否有任何关系。

Ren*_*nzo 5

在多值依赖 X ?? 关系 R 中的 Y 可以看作是另一种编写二元连接依赖关系的方式?[XY, X(U ? Y)],其中 U 是关系 R 的所有属性的集合。

例如,在描述员工及其薪水历史以及其他属性的关系中R(empNo, salary, year, name, role),我们可以说有一个 MultivaluedDependencyempNo ?? salary, year或者等价的有一个 Join Dependency ?[{empNo, salary, year}, {empNo, name, role}](注意这清楚地表明在 R 中也有“双重”多值依赖empNo ?? name, role)。

您在问功能依赖关系和连接依赖关系之间有哪些关系。这个问题是合理的,因为函数依赖和多值依赖之间存在关系。

Abiteboul, S.“数据库基础”的第 8 章中阅读,马萨诸塞州:Addison-Wesley,1995 年。你可以找到一个同样被证明的答案:

提案 8.3.3。设 U 是一组属性,{X, Y, Z} 是 U 的一个分区,并且 ? 是一组对 U 的函数依赖。然后?? ?[XY, XZ] 当且仅当 ? ? X ?是还是?? X ?Z。

换句话说,如果函数依赖X ? Y在关系模式 R 中成立,那么这意味着二元连接依赖?[XY, XZ]成立,反之亦然。请注意,这相当于说,你总是可以执行关系的无损分解R{X,Y,Z}与函数依赖X ? YR1{XY}R2{XZ}

因此,例如,在前面的示例中,由于empNo ? name,Join Dependency?[{empNo, name}, {empNo, salary, year, role}]成立并且{R1(empNo, name), R2(empNo, salary, year, role)}是无损分解。