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

BCNF decomposition --- Am I doing this wrong?

我正在研究关系 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) 是错误的,因为 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+ 等于关系的所有属性,这意味着它是一个超级键。此外,由于您不能从 with 中删除任何属性而不丢失确定关系的所有属性的 属性,这意味着它是一个候选键。

因此 B → D 是唯一违反 BCNF 的依赖项,因此您可以使用候选键 B 和 [=21 在 R1(BD) 中分解 R =] 与候选键 ABCE。两个关系都是BCNF,所以不需要进一步分解。

因为这个分解,确实丢失了依赖CD → E