关于规范化的问题

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

关于二级规范式 (2NF) 的问题

1. 给定一个关系 R( A, B, C, D) 和函数依赖集 FD = { AB → CD, B → C },判断给定的 R 是否在 2NF 中?如果不在,将其转换为 2NF。

解: 让我们使用 FD 在 R 上构建一个箭头图来计算候选键。

QUESTIONS ON NORMALIZATION

从上面的 R 上的箭头图可以看出,属性 AB 不能由任何给定的 FD 确定,因此 AB 将是候选键的组成部分,即无论候选键是什么,有多少个候选键,但所有候选键都将具有 W 强制属性。

让我们计算 AB 的闭包

AB + = ABCD(根据我们之前学习的方法)

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

根据候选键的定义(候选键是其任何真子集都不是超键的超键

由于所有键都将 AB 作为组成部分,并且我们已证明 AB 是候选键,因此 AB 的任何超集都将是超键,但不是候选键。

因此,只有 一个候选键 AB

2NF 定义: 非主属性不能部分依赖于候选键。

由于 R 具有 4 个属性:A、B、C、D,而候选键是 AB,因此主属性(候选键的一部分)是 A 和 B,而非主属性是 C 和 D。

a) FD: AB → CD 满足 2NF 的定义,即非主属性(C 和 D)完全依赖于候选键 AB。

b) FD: B → C 不满足 2NF 的定义,因为非主属性(C)部分依赖于候选键 AB(即,键在任何情况下都不应被破坏)。

由于 FD B → C,则上述表 R( A, B, C, D) 不在 2NF 中。

将表 R(A, B, C, D) 转换为 2NF。

由于 FD: B → C,我们的表不在 2NF 中,让我们分解表。

R1(B, C)

由于键是 AB,并且根据 FD AB → CD,我们可以创建 R2(A, B, C, D),但这将再次出现部分依赖 B → C 的问题,因此 R2(A, B, D)。

最后,已转换为 2NF 的分解表为:

a) R1( B, C)

b) R2(A, B, D)

2. 给定一个关系 R( P, Q, R, S, T) 和函数依赖集 FD = { PQ → R, S → T },判断给定的 R 是否在 2NF 中?如果不在,将其转换为 2 NF。

解:让我们使用FD在R上构建一个箭头图来计算候选键。

QUESTIONS ON NORMALIZATION

从上面的 R 上的箭头图可以看出,属性 PQS 不能由任何给定的 FD 确定,因此 PQS 将是候选键的组成部分,即无论候选键是什么,有多少个候选键,但所有候选键都将具有 PQS 强制属性。

让我们计算 PQS 的闭包

PQS + = PQSRT(根据我们之前学习的方法)

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

根据候选键的定义(候选键是超键,其任何真子集都不是超键

由于所有键都将 PQS 作为组成部分,并且我们已证明 PQS 是候选键。因此,PQS 的任何超集都将是超键,但不是候选键。

因此,只有 一个候选键 PQS

2NF 定义: 非主属性不能部分依赖于候选键。

由于 R 具有 5 个属性:P、Q、R、S、T,而候选键是 PQS,因此主属性(候选键的一部分)是 P、Q 和 S,而非主属性是 R 和 T。

a) FD: PQ → R 不满足 2NF 的定义,即非主属性(R)部分依赖于候选键 PQS 的一部分。

b) FD: S → T 不满足 2NF 的定义,因为非主属性(T)部分依赖于候选键 PQS(即,键在任何情况下都不应被破坏)。

因此,由于 FD PQ → R 和 S → T,上述表 R( P, Q, R, S, T) 不在 2NF 中。

将表 R( P, Q, R, S, T) 转换为 2NF。

由于 FD: PQ → R 和 S → T,我们的表不在 2NF 中,让我们分解表。

R1(P, Q, R) (现在在表 R1 中 FD: PQ → R 是完全函数依赖,因此 R1 在 2NF 中)

R2( S, T) (现在在表 R2 中 FD: S → T 是完全函数依赖,因此 R2 在 2NF 中)

并为键创建一个单独的表,因为键是 PQS。

R3(P, Q, S)

最后,已转换为 2NF 的分解表为:

a) R1( P, Q, R)

b) R2(S, T)

c) R3(P, Q, S)

3. 给定一个关系 R( P, Q, R, S, T, U, V, W, X, Y) 和函数依赖集 FD = { PQ → R, PS → VW, QS → TU, P → X, W → Y },判断给定的 R 是否在 2NF 中?如果不在,将其转换为 2 NF。

解:让我们使用FD在R上构建一个箭头图来计算候选键。

QUESTIONS ON NORMALIZATION

从上面的 R 上的箭头图可以看出,属性 PQS 不能由任何给定的 FD 确定,因此 PQS 将是候选键的组成部分,即无论候选键是什么,有多少个候选键,但所有候选键都将具有 PQS 强制属性。

让我们计算 PQS 的闭包

PQS + = P Q S R T U V W X Y(根据我们之前学习的闭包方法)

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

根据候选键的定义(候选键是其任何真子集都不是超键的超键

由于所有键都将 PQS 作为组成部分,并且我们已证明 PQS 是候选键,因此 PQS 的任何超集都将是超键,但不是候选键。

因此,只有 一个候选键 PQS

2NF 定义: 非主属性不能部分依赖于候选键。

由于 R 具有 10 个属性:P、Q、R、S、T、U、V、W、X、Y,而候选键是使用 FD = { PQ → R, PS → VW, QS → TU, P → X, W → Y } 计算得出的 PQS。因此,主属性(候选键的一部分)是 P、Q 和 S,而非主属性是 R、T、U、V、W、X 和 Y。

  1. FD: PQ → R 不满足 2NF 的定义,即非主属性(R)部分依赖于候选键 PQS 的一部分。
  2. FD: PS → VW 不满足 2NF 的定义,即非主属性(VW)部分依赖于候选键 PQS 的一部分。
  3. FD: QS → TU 不满足 2NF 的定义,即非主属性(TU)部分依赖于候选键 PQS 的一部分。
  4. FD: P → X 不满足 2NF 的定义,即非主属性(X)部分依赖于候选键 PQS 的一部分。
  5. FD: W → Y 不违反 2NF 的定义,因为非主属性(Y)依赖于非主属性(W),这与 2NF 的定义无关。

因此,由于 FD: PQ → R, PS → VW, QS → TU, P → X,上述表 R( P, Q, R, S, T, U, V, W, X, Y) 不在 2NF 中。

将表 R( P, Q, R, S, T, U, V, W, X, Y) 转换为 2NF。

由于 FD: PQ → R, PS → VW, QS → TU, P → X,我们的表不在 2NF 中,让我们分解表。

R1(P, Q, R) (现在在表 R1 中 FD: PQ → R 是完全函数依赖,因此 R1 在 2NF 中)

R2( P, S, V, W) (现在在表 R2 中 FD: PS → VW 是完全函数依赖,因此 R2 在 2NF 中)

R3( Q, S, T, U) (现在在表 R3 中 FD: QS → TU 是完全函数依赖,因此 R3 在 2NF 中)

R4( P, X) (现在在表 R4 中 FD : P → X 是完全函数依赖,因此 R4 在 2NF 中)

R5( W, Y) (现在在表 R5 中 FD: W → Y 是完全函数依赖,因此 R2 在 2NF 中)

并为键创建一个单独的表,因为键是 PQS。

R6(P, Q, S)

最后,已转换为 2NF 的分解表为:

R1(P, Q, R)

R2( P, S, V, W)

R3( Q, S, T, U)

R4( P, X)

R5( W, Y)

R6(P, Q, S)

4. 给定一个关系 R( A, B, C, D, E) 和函数依赖集 FD = { A → B, B → E, C → D },判断给定的 R 是否在 2NF 中?如果不在,将其转换为 2 NF。

解:让我们使用FD在R上构建一个箭头图来计算候选键。

QUESTIONS ON NORMALIZATION

从上面的 R 上的箭头图可以看出,属性 AC 不能由任何给定的 FD 确定,因此 AC 将是候选键的组成部分,即无论候选键是什么,有多少个候选键,但所有候选键都将具有 W 强制属性。

让我们计算 AC 的闭包

AC + = ACBED(根据我们之前学习的闭包方法)

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

根据候选键的定义(候选键是其任何真子集都不是超键的超键

由于所有键都将 AC 作为组成部分,并且我们已证明 AC 是候选键,因此 AC 的任何超集都将是超键,但不是候选键。

因此,只有 一个候选键 AC

2NF 定义: 非主属性不能部分依赖于候选键。

由于 R 具有 5 个属性:A、B、C、D、E,而候选键是 AC,因此主属性(候选键的一部分)是 A 和 C,而非主属性是 B、D 和 E。

  1. FD: A → B 不满足 2NF 的定义,因为非主属性(B)部分依赖于候选键 AC(即,键在任何情况下都不应被破坏)。
  2. FD: B → E 不违反 2NF 的定义,因为非主属性(E)依赖于非主属性(B),这与 2NF 的定义无关。
  3. FD: C → D 不满足 2NF 的定义,因为非主属性(D)部分依赖于候选键 AC(即,键在任何情况下都不应被破坏)。

因此,由于 FD A → B 和 C → D,上述表 R( A, B, C, D, E) 不在 2NF 中。

将表 R(A, B, C, D, E) 转换为 2NF。

由于 FD: A →B 和 C → D,我们的表不在 2NF 中,让我们分解表。

R1(A, B, E) (来自 FD: A → B 和 B → E,两者都违反 2 NF 定义)

R2( C, D) (现在在表 R2 中 FD: C → D 是完全函数依赖,因此 R2 在 2NF 中)

并为候选键 AC 创建一个单独的表。

R3 ( A, C)

最后,已转换为 2NF 的分解表为:

  1. R1( A, B, E)
  2. R2( C, D)
  3. R3( A, C)

程序: 验证给定的关系模式 R 是否在 2NF 中,如果不在,则将其转换为 2NF。

步骤 1: 使用 R 上的箭头图计算给定 R 的候选键。

步骤 2: 使用2NF 定义验证每个 FD(非主属性不能部分依赖于候选键)。

步骤 3: 创建一个 FD 集合,这些 FD 不满足 2NF,即所有部分依赖的 FD。

步骤 4: 通过分解 R 将表 R 转换为 2NF,使得基于 FD 的每个分解都满足 2NF 的定义。

步骤 5: 完成基于 FD 的分解后,为候选键中的属性创建一个单独的表。

步骤 6: 从步骤 4 和步骤 5 获得的 R 的所有分解构成了所需的分解,其中每个分解都在 2NF 中。