候选键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 上构建一个箭头图。 ![]() 从上面的 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 上构建一个箭头图。 ![]() 从上面的 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 上构建一个箭头图。 ![]() 从上面的 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 上构建一个箭头图。 ![]() 从上面的 R 箭头图可以看出,R 中没有未确定的属性,即 R 中的所有属性都由其中一个 FD 确定。现在存在混淆,因为这个例子与前面三个例子完全不同。 因此,对于这类问题,我们首先检查所有属性的闭包,然后检查它们的组合,同时牢记候选键的定义。 让我们使用 FD = { AB → CD, C → A, D → B} 计算 A、B、C、D 的闭包。
由于以上都不是候选键,因此我们尝试 A、B、C 和 D 的组合,即(AB、AC、AD、BC、BD、CD)。 让我们使用 FD = { AB → CD, C → A, D → B} 计算 AB、AC、AD、BC、BD、CD 的闭包。
由于 AC 和 BD 是两个不能构成候选键的组合,因此让我们尝试它们的组合,同时记住,根据候选键的定义,该组合的任何真子集都不应是候选键。 AC 和 BD 的组合是 ACB、ACD、BDA 和 BDC,但不幸的是,所有组合的子集已经是候选键,因此任何组合(ACB、ACD、BDA 和 BDC)都不符合候选键的资格。 因此,有四个候选键:AB、AD、BC 和 CD。 下一主题属性的闭包 |
我们请求您订阅我们的新闻通讯以获取最新更新。