将关系转换为 BCNF

Convert relation to BCNF

我得到关系 R = {C, SN, OD, CH, CL, I, S, Y, D, RM, NS}。

以下函数依赖关系成立:

{C} -> {OD, CH, CL}

{C, SN, S, Y} -> {D, RM, NS, I}

{RM, D, S, Y} -> {I, C, SN}

我需要将其转换为 BCNF。

我把它分成 2 个子关系 R1 = {C,OD,CH,CL} 和 R2={C,S,Y,D,RM,SN,I,NS}

现在我可以看到 R1 在 BCNF 中,但我不确定 R2。这来自 {C, SN, S, Y} -> {D, RM, NS, I} 的想法,所以看起来一些非键属性决定了键的一部分。但是非关键属性还需要 S,Y 是关键属性所以我不确定 BCNF 规则是否成立。

那么BCNF中的R2是吗?

假设你给出的函数依赖是R所有函数依赖的覆盖,那么关系的候选键是{C, S, SN, Y}{D, RM, S, Y}。这可以通过计算两个属性集的闭包来检查,其中包含 R 的所有属性,而从中删除任何属性获得的闭包不包含所有属性。

你的分解是BCNF,R2是BCNF。其实R2的一个依赖覆盖就是:

{D, RM, S, Y} -> {C, I, SN}
{C, S, SN, Y} -> {D, NS, RM}

我们可以看到,在它们中,行列式都是候选键。