📌  相关文章
📜  教资会网络 | UGC NET CS 2014 年 12 月 – III |问题 6(1)

📅  最后修改于: 2023-12-03 15:26:02.872000             🧑  作者: Mango

UGC NET CS 2014 年 12 月 – III | 问题 6

这个问题主要涉及到数据库。

问题描述

我们有一个关系表R(A,B,C,D,E)和一个函数依赖集合F = {AB → C, CD → E, B → D, E → A}. 假设我们想要将关系表分解为BCNF,下面的操作中可能会被执行,我们需要判断哪个操作是正确的,并解释不正确的原因。

  1. AB → C, CD → E 和 E → A 这些函数依赖重新构造为 R1(A,B,C) 和 R2(C,D,E)两个关系表,并在 R1 中添加 E 这个属性。
  2. AB → C, CD → E 和 E → A 这些函数依赖重新构造为 R1(A,B,C) 和 R2(C,D,E)两个关系表,并在 R2 中添加 A 和 B。
  3. R(A,B,C)和R1(B,D)和R2(E,A)三个关系表。
解释

第一个操作不正确。因为当我们将函数依赖集合分解成两个关系表时,我们必须保证一张关系表中的任何非主属性都是依赖于那张表的主键的。然而,在 R1(A,B,C) 中添加 E 不会满足这个规则,因为 E 对于任何可能的键而言都不是一个主属性。

第二个操作也不正确。虽然在两张表中重构了全部的函数依赖关系,但是在 R2 中添加了 A 和 B 并不合适。添加这些属性会导致磨损的数据,因为它们已经通过E → A 函数依赖包括在R2中。

因此,正确答案是第三个操作,它可以将原始关系表分解为具有BCNF的三张表。

我们现在有三个关系表,每个表都是BCNF形式。所有的非主属性都分别依赖于它们所在关系表的主键,并且这些关系表的基数保持了原始表的基数。

正确答案: 3

原始表: R(A,B,C,D,E)

函数依赖: F = {AB → C, CD → E, B → D, E → A}

分解为:

R(A,B,C)
R1(B,D)
R2(E,A)