BCNF分解---我做错了吗?

时间:2018-06-16 14:21:03

标签: database database-normalization bcnf

我正在研究关系R(A,B,C,D,E)的无损连接分解。

该关系具有功能依赖性:{A-> BC,B-> D,CD-> E,E-> A}

(1)我认为候选键是{A}和{E}

(2)并且BCNF违规是{B-> D}和{CD-> E},因为{B}和{CD}不是候选键

(3)但我不知道如何分解它以及哪些依赖关系不被保留。我想这会是......

=> R1 = {A,B,C,E},R2 = {B,D}并且丢失FD:{CD-> E}

但是{A}和{E}都是候选键,所以它需要像下面那样分开吗?

=> R1 {A,B,C},R2 {B,D},R3 {B,C,E}并且失去FD:{CD-> E}

我想问哪一个是正确的

1 个答案:

答案 0 :(得分:0)

(1)是错误的,因为BCCD也是候选键(例如,因为CD → EE是候选键,所以很容易看到CD也必须是候选键。另一种检查方法是计算CD+

CD+ = CD
CD+ = CDE (by using CD -> E)
CD+ = CDEA (by using E -> A)
CD+ = CDEAB (by using A -> BC)

CD +等于关系的所有属性,这意味着它是一个超级键。此外,由于您无法从中删除任何属性而不会失去确定关系的所有属性的属性,这意味着它是候选键。

因此,B → D是唯一违反BCNF的依赖项,因此您可以使用候选键RR1(BD)分解B中的R2(ABCE)使用候选键ABCE。两种关系都在BCNF中,因此不需要进一步分解。

由于这种分解,依赖CD → E确实丢失了。