0

我有一个理论问题。我有关系R(A,B,C,D)和依赖B-> C,B-> D。我如何检查是否属于BCNF,如果不是我如何将其分解为BCNF?问题来自一本书。我了解基础知识,但用这个我没有成功,有人可以向我解释吗?数据库关系正常化到BCNF

+2

什么书是你学习BCNF,它是如何说识别BCNF,到BCNF的算法是什么,以及你在这个练习中到目前为止获得的算法,以及你卡在哪里?你正在有效地寻求一本教科书的一章。网上有很多书籍和幻灯片。请具体说明。 – philipxy

回答

0

首先计算关闭集合R

  • {A} = {A}
  • {B} = {B,C,d}
  • {C} = {C}
  • {d} = {d}
  • {A,B} = {A,B,C,D} (这是R的关键字,因此我们不必计算任何包含关键字AB的闭包集合
  • {A,C} = { A,C}
  • {A,D} = {A,D}
  • {B,C} = {B,C,d}
  • {B,d} = {B,C,d}
  • {C,d} = {C,d}
  • {A ,C,D} = {A,B,C,D}(也是一个关键字,因为它包含关闭中的所有属性R)。
  • {B,C,d} = {B,C,d}

集如{A,B,C}并没有计算为{A,B}(密钥)是一个子集。接下来,我们必须确定新的FD(功能依赖)。我不会解释这个过程,因为我确定你的教科书会描述它。的依赖关系是:

  • 乙 - “ç
  • 乙 - > d
  • AB - ”ç
  • AB - > d
  • BC - > d
  • BD - “ç
  • ACD - >乙:

现在,每次在它的左s表示没有超密钥FD ide,是BCNF违规行为。我们可以使用这种违规行为来拆分关系R。我们违反的FD是B→C,B→D,BC→D和BD→C。我们可以将关系分解为FD B→C。分裂关系的第一个“一半”将包含所有FD左侧的属性关闭元素,在这种情况下属性B。所以我们的第一个关系将是R11(B, C, D)。我们的第二个关系将包含FD的左侧(B)和不属于B关闭的属性,属性A。所以我们得到关系R12(A,B)。现在让我们看看:关系R12当然在BCNF中,因为它只包含两个属性。现在我们来检查关系R11。此关系的新密钥为B,因为B的结尾包含R11的所有属性。没有任何FD关于R11有效,因为它们都在其左侧包含B。所以这两个关系都在BCNF。我希望这对你来说已经够清楚了。

编辑:只有现在注意到这个职位是4个月前...那么我希望它仍然有用(可能是其他成员正在搜索这个主题)。