问题描述
给定关系 R = {C,SN,OD,CH,CL,I,S,Y,D,RM,NS}。
以下函数依赖成立:
{C} -> {OD,CL}
{C,Y} -> {D,NS,I}
{RM,Y} -> {I,C,SN}
我需要将其转换为 BCNF。
我把它分成 2 个子关系 R1 = {C,CL} 和 R2={C,NS}
现在我可以看到 R1 在 BCNF 中,但我不确定 R2。这来自于 {C,I} 的想法,所以似乎一些非关键属性决定了关键的一部分。但是非关键属性也需要 S,Y 这些关键属性,所以我不确定 BCNF 规则是否成立。
BCNF 中的 R2 也是这样吗?
解决方法
假设你给出的函数依赖是R
的所有函数依赖的覆盖,关系的候选键是{C,S,SN,Y}
和{D,RM,Y}
。这可以通过计算两个属性集的闭包来检查,其中包含R
的所有属性,而通过从中删除任何属性获得的闭包不包含所有属性。
您的分解在 BCNF 中,而 R2 在 BCNF 中。实际上,对 R2 依赖项的一个覆盖是:
{D,Y} -> {C,I,SN}
{C,Y} -> {D,NS,RM}
我们可以看到,在它们两个中,行列式都是候选键。