📜  使用函数依赖查找子关系的候选键

📅  最后修改于: 2021-09-28 10:18:00             🧑  作者: Mango

我们已经知道如何找到关系的候选键,您可以在此处查看使用功能依赖关系查找属性闭包和候选键。但是在这里我们将学习找出子关系的候选键,这与找出关系的候选键有点不同。让我们看看如何找到它。

什么是函数依赖?
函数依赖只是数据库中两组属性之间的约束。函数依赖用于规范化。函数依赖用箭头 → 表示。 A 对 B 的函数依赖由 A → B 表示。函数依赖在找出数据库设计好坏之间的差异方面起着至关重要的作用。

A→B

以上功能依赖的发音为:

  1. A决定B
  2. A 在功能上决定 B
  3. B 在功能上依赖于 A
  4. 对于给定的 A 值,我们可以从函数上确定 B 的值。

A 和 B 可以是一组属性,它们不必总是单个属性。

Example : 
AB→B,  A→ ACB etc. 

对于给定的关系,根据数据库设计的语义,我们在大多数情况下也会获得一组功能依赖。

使用函数依赖查找子关系的候选键:
找出子关系的候选键与找出关系的候选键有点不同。让我们看看如何找到它。

在这个问题中,我们通常有一个表(通用表)或数据库,并对关系应用一些函数依赖。

我们将把表分解成更小的表,我们需要为新分解的小表找到候选键。

例子:。
关系 R(ABCD) 由函数依赖 F 给出:{ AB→CD, D→A }。找出子关系 R'(BCD) 的候选键。

步骤 1:在子关系中找到一个值属性的闭包:
{B}+ = B,无法导出子关系中存在的所有属性,即 BCD,因此它不是候选键。
{C}+ = C,无法导出子关系中存在的所有属性,即 BCD,因此它不是候选键。
{D}+ = DA,无法导出子关系中存在的所有属性,即 BCD,因此它不是候选键。

步骤 2:在子关系中找到二值属性的闭包:
{BC}+ = BC,无法导出子关系中存在的所有属性,即 BCD,因此它不是候选键。
{BD}+ = BDAC,可以导出子关系中存在的所有属性,即BCD,因此它是一个候选键。
{CD}+ = CDA,无法导出子关系中存在的所有属性,即 BCD,因此它不是候选键。

Step-3:在子关系中找到三值属性的闭包:
{BCD}+ = ,不可能,因为它会成为BD的超级键。

因此,BD hast= 能够唯一地导出子关系中存在的所有属性,即 BCD。
因此BD是候选键。

示例 2:
关系 R(ABCDE) 由函数依赖 F 给出:{ A→BC, CD→E, B→D, E→A }。找出子关系 R'(ABCE) 的候选键。

步骤 1:在子关系中找到一个值属性的闭包:
{A}+ = ABCDE,可以导出子关系中存在的所有属性,即 ABCE,所以它是一个候选键
{B}+ = BD,无法导出子关系中存在的所有属性,即 ABCE,因此它不是候选键
{C}+ = C,无法导出子关系中存在的所有属性,即 ABCE,因此它不是候选键
{E}+ = ABCDE,可以导出子关系中存在的所有属性,即 ABCE,所以它是一个候选键

步骤 2:在子关系中找到两个值属性的闭包:
A 和 E 属性可以包含在 2 值属性中,因为它们的包含将使其成为超级键。

{BC}+ = BCDE A

{CD}+ = ABCDE

步骤 3:在子关系中找到三个值属性的闭包:
不可能,因为它将成为超级密钥。

因此,A、E 和 BC 能够唯一地导出子关系中存在的所有属性,即 ABCE。
因此 A、E、CD 和 BC 是候选键。