候选键

2025年03月17日 | 阅读 9 分钟

候选键是一个超键,它的任何真子集都不是超键。也就是说,如果 ABC 是一个候选键,那么 A、B、C 或它们的任何组合都不能是超键。因此,我们可以说候选键是 R(关系模式)的一个最小属性集,它能够唯一地标识表中的一个元组。

主键的候选者是一个候选键,例如,手机号、身份证号、学号都可以作为主键的候选者,因此它们都是候选键。

如何确定候选键

给定关系模式 R(X, Y, Z, W),在以下问题中确定超键和候选键。

示例 1:给定 R( X Y Z W) 和函数依赖 FD= { XYZ → W, XY → ZW and X → YZW

步骤 1:让我们计算 XYZ+ 的闭包 = XYZW(根据我们之前学过的方法)

由于 XYZ 的闭包确定了表的所有属性,因此它是超键

步骤 2:让我们计算 XY+ 的闭包 = XYZW(根据我们之前学过的方法)

由于 XY 的闭包确定了表的所有属性,因此它是超键

步骤 3:让我们计算 X+ 的闭包 = XYZW(根据我们之前学过的方法)

由于 X 的闭包确定了表的所有属性,因此它是超键

正如我们在上一步中讨论的,只讨论了超键,而没有讨论候选键。

让我们再次回顾候选键的定义(候选键是一个超键,它的任何真子集都不是超键)。

根据上述定义,XYZ 不是候选键,因为在步骤 2 和 3 中,我们发现 XY 和 X 也是超键(即 XYZ 的子集也是超键,这违反了定义)。

XY 不是候选键,因为在步骤 3 中,我们发现 X 也是超键(即 XY 的子集也是超键,这违反了定义)。

X 是候选键:因为 X 不能再细分,或者 X 不能有任何子集。

因此,XYZ、XY 和 X 都是超键,而只有 X 是候选键。

示例 2:给定 R( X Y Z W) 和函数依赖 FD= { XY → Z, Z → YW, and W → X }

步骤 1:让我们计算 XY+ 的闭包 = XYZW(根据我们之前学过的方法)

由于 XY 的闭包确定了表的所有属性,因此它是超键

步骤 2:让我们计算 Z+ 的闭包 = ZYWX(根据我们之前学过的方法)

由于 Z 的闭包确定了表的所有属性,因此它是超键

步骤 3:让我们计算 W+ 的闭包 = WX(根据我们之前学过的方法)

由于 X 的闭包没有确定表的所有属性,因此它不是超键,因为它不是超键,所以它永远不会是候选键。

正如我们在上一步中讨论的,只讨论了超键,而没有讨论候选键。

让我们再次回顾候选键的定义(候选键是一个超键,它的任何真子集都不是超键)。

根据上述定义,XY 是候选键,因为在步骤 2 和 3 中,XY 的任何子集(即 X 或 Y)都不是超键。

Z 是候选键:因为 Z 不能再细分,或者 Z 不能有任何子集。

因此,XY 和 Z 是超键,XY 和 Z 也是候选键。

示例 2:给定 R( X Y Z W) 和函数依赖 FD= { Y → XZW, XZW → Y }

步骤 1:让我们计算 Y+ 的闭包 = XYZW(根据我们之前学过的方法)

由于 Y 的闭包确定了表的所有属性,因此它是超键

步骤 2:让我们计算 XZW+ 的闭包 = XZWY(根据我们之前学过的方法)

由于闭包确定了表的所有属性,因此它是超键

正如我们在上一步中讨论的,只讨论了超键,而没有讨论候选键。

让我们再次回顾候选键的定义(候选键是一个超键,它的任何真子集都不是超键)。

根据上述定义,Y 是候选键,因为 Y 不能再细分,或者 Y 不能有任何子集。

XZW 是候选键:因为 XZW 的任何真子集都不是超键。

因此,Y 和 XZW 是超键,Y 和 XZW 也是候选键。

确定候选键的快捷方法

示例 1:给定 R(X, Y, Z, W) 和函数依赖集 FD = { X → Y, Y → Z, Z → X}。问题是使用给定的 FD 集计算上述关系 R 中的候选键和候选键的数量。

让我们使用 FD 在 R 上构建一个箭头图。

Candidate Key

从上面的 R 箭头图可以看出,属性 W 没有被任何给定的 FD 确定,因此 W 将是候选键的组成部分,即无论候选键是什么,有多少个候选键,但所有候选键都必须包含 W。

让我们计算 W 的闭包。

W + = W(根据我们之前学过的方法)

由于 W 的闭包只包含 W,因此它不是候选键。

让我们检查 W 的组合,即 WX、WY、WZ。

a) W X + = W X Y Z(根据我们之前学过的方法)

由于 WX 的闭包包含 R 的所有属性,因此WX 是候选键

b) W Y + = W Y Z X(根据我们之前学过的方法)

由于 WX 的闭包包含 R 的所有属性,因此WY 是候选键

c) W Z + = W Z X Y(根据我们之前学过的方法)

由于 WX 的闭包包含 R 的所有属性,因此WZ 是候选键

根据候选键的定义(候选键是一个超键,它的任何真子集都不是超键)。

我们可以说,WX、WY、WZ 的任何进一步组合,即 WXY、WXYZ、WYZ、WZX,都将是超键,但不是候选键。

因此,有三个候选键:WX、WY、WZ。

示例 2:给定 R(X, Y, Z, W) 和函数依赖集 FD = { XY → ZW, W → X}。问题是使用给定的 FD 集计算上述关系 R 中的候选键和候选键的数量。

让我们使用 FD 在 R 上构建一个箭头图。

Candidate Key

从上面的 R 箭头图可以看出,属性 Y 没有被任何给定的 FD 确定,因此 Y 将是候选键的组成部分,即无论候选键是什么,有多少个候选键,但所有候选键都必须包含 Y。

让我们计算 Y 的闭包。

Y+ = Y(根据我们之前学过的方法)

由于 Y 的闭包只包含 Y,因此它不是候选键。

让我们检查 Y 的组合,即 YX、YW、YZ。

d) Y X + = Y X Z W(根据我们之前学过的方法)

由于 YX 的闭包包含 R 的所有属性,因此YX 是候选键

e) Y W + = Y W X W(根据我们之前学过的方法)

由于 YW 的闭包包含 R 的所有属性,因此YW 是候选键

f) Y Z + = Y Z(根据我们之前学过的方法)

由于 Y Z 的闭包只包含 Y Z,因此YZ 不是候选键

根据候选键的定义(候选键是一个超键,它的任何真子集都不是超键)。

我们可以说,YX、YW 的任何进一步组合都将是超键,但不是候选键。

由于 Y Z 仍然不是候选键,让我们尝试它的组合。

Y Z W(不允许,因为 Y W 已经是候选键)

Y Z X(不允许,因为 YX 已经是候选键)

因此,YZ 的任何组合都不允许。

因此,有两个候选键:YX、YW。

示例 3:给定 R( P, Q, R, S, T, U) 和函数依赖集 FD = { PQ → R, R → S, Q → PT}。问题是使用给定的 FD 集计算上述关系 R 中的候选键和候选键的数量。

让我们使用 FD 在 R 上构建一个箭头图。

Candidate Key

从上面的 R 箭头图可以看出,属性 QU 没有被任何给定的 FD 确定,因此 QU 将是候选键的组成部分,即无论候选键是什么,有多少个候选键,但所有候选键都必须包含 QU。

让我们使用 FD = { PQ → R, R → S, Q → PT} 计算 QU 的闭包。

QU+ = QUPTRS(根据我们之前学过的方法)

由于 QU 的闭包包含 R 的所有属性,因此它是QU 候选键

根据候选键的定义(候选键是一个超键,它的任何真子集都不是超键)。

我们可以说,QU 的任何进一步组合,即 QUP、QUR、QUS、QUT 等。

将是超键,但不是候选键。

因此,只有一个候选键:QU。

示例 4:给定 R(A, B, C, D) 和函数依赖集 FD = { AB → CD, C → A, D → B}。问题是使用给定的 FD 集计算上述关系 R 中的候选键和候选键的数量。

让我们使用 FD 在 R 上构建一个箭头图。

Candidate Key

从上面的 R 箭头图可以看出,R 中没有未确定的属性,即 R 中的所有属性都由其中一个 FD 确定。现在存在混淆,因为这个例子与前面三个例子完全不同。

因此,对于这类问题,我们首先检查所有属性的闭包,然后检查它们的组合,同时牢记候选键的定义。

让我们使用 FD = { AB → CD, C → A, D → B} 计算 A、B、C、D 的闭包。

  1. A + = A(根据我们之前学过的方法)
    由于 A 的闭包只包含 A,因此它不是候选键。
  2. B + = B(根据我们之前学过的方法)
    由于 B 的闭包只包含 B,因此它不是候选键。
  3. C + = C A(根据我们之前学过的方法)
    由于 C 的闭包只包含 CA,因此它不是候选键。
  4. D + = D B(根据我们之前学过的方法)
    由于 D 的闭包只包含 DB,因此它不是候选键。

由于以上都不是候选键,因此我们尝试 A、B、C 和 D 的组合,即(AB、AC、AD、BC、BD、CD)。

让我们使用 FD = { AB → CD, C → A, D → B} 计算 AB、AC、AD、BC、BD、CD 的闭包。

  1. A B + = A B C D(根据我们之前学过的方法)
    由于 AB 的闭包只包含 R 的所有属性,因此 AB 是候选键
  2. A C + = A C(根据我们之前学过的方法)
    由于 AC 的闭包只包含 AC,因此它不是候选键。
  3. A D+ = A D B C(根据我们之前学过的方法)
    由于 AD 的闭包只包含 R 的所有属性,因此 AD 是候选键
  4. B C + = B C A D(根据我们之前学过的方法)
    由于 BC 的闭包只包含 R 的所有属性,因此 BC 是候选键
  5. B D + = B D(根据我们之前学过的方法)
    由于 BD 的闭包只包含 BD,因此它不是候选键。
  6. C D + = C D A B
    由于 CD 的闭包只包含 R 的所有属性,因此 CD 是候选键

由于 AC 和 BD 是两个不能构成候选键的组合,因此让我们尝试它们的组合,同时记住,根据候选键的定义,该组合的任何真子集都不应是候选键。

AC 和 BD 的组合是 ACB、ACD、BDA 和 BDC,但不幸的是,所有组合的子集已经是候选键,因此任何组合(ACB、ACD、BDA 和 BDC)都不符合候选键的资格。

因此,有四个候选键:AB、AD、BC 和 CD。


下一主题属性的闭包