确定具有功能依赖性的键

Determine keys with functional dependency

请有人向我解释如何确定 Table R 中的键 R(A,B,C,D,E,F,G,H,I,J)

C => BD
E => AC
E => D
G => J
BG => F
F => H

非常感谢

首先,您需要知道如何确定关系中一个(或多个)属性的闭包。这意味着,给定一组起始属性,您可以计算由该初始集合通过所有可能的函数依赖关系确定的总属性集。为此,您需要了解一些基本的逻辑公理并应用它们来组合函数依赖。

我们将使用的公理是恒等律和阿姆斯特朗公理,具体而言:

  • 身份:X -> X
  • 传递性:如果 X -> YY -> Z 那么 X -> Z
  • 联合:如果 X -> YX -> Z 那么 X -> YZ
  • 扩充:如果 X -> Y 那么 XZ -> YZ 对于任何 Z

现在,如果我们将其应用于关于属性 E 的给定函数依赖集,我们得到:

  1. E -> E(身份)
  2. E -> AC(给定)
  3. E -> D(给定)
  4. C -> BD(给定)
  5. E -> ACD(2 和 3 的并集)
  6. E -> ACDE(1 和 5 的并集)
  7. E -> ABCDE(4和6的传递组合)

以同样的方式,我们可以计算 R 中所有其他属性关于给定函数依赖的闭包。你应该把它当作练习来做。通过练习,您将能够快速了解​​要关注哪些方面。

我们的目标通常是找到确定整个关系的最小属性集。在这种情况下,EGI -> ABCDEFGHIJ 是一个候选(最小)键。你应该自己计算这个结果来验证。一个关系可能有多个候选键。

还有其他键不是最小的,例如 ABCDEFGHIJ。平凡地,整个关系决定了自己。在候选键的极端和整个关系之间是超键,例如 EFGHI - 候选键的任何超集都是键,我们称这些为超键。