我有一个理论问题。我具有关系R(A,B,C,D)和依赖关系B-> C,B-> D.如何检查是否在BCNF中,如果不是,我如何将其分解为BCNF?问题来自一本书。我理解基本原理,但有了这个我没有成功,有人可以向我解释一下吗?
答案 0 :(得分:0)
首先计算R
的闭包集。
R
的键,因此我们不必再计算包含键AB
的任何闭包集。R
的所有属性。)
现在,每个在左侧没有超级密钥的FD都是违反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
的所有属性。由于关系R11
在左侧都包含B
,因此不存在导致违规的getURL(url="ftp://n5eil01u.ecs.nsidc.org/SAN/MOST/MOD10A2.005/")
有效的FD。所以这两种关系都在BCNF。我希望这对你来说已经足够清楚了。
编辑:现在才注意到这篇文章是4个月前...好吧我希望它仍然有用(也许是其他会员搜索主题)。