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) 是错误的,因为 BC
和 CD
也是候选键(例如,因为 CD → E
和 E
是候选键,所以它是很容易看出 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
=] 与候选键 A
、BC
和 E
。两个关系都是BCNF,所以不需要进一步分解。
因为这个分解,确实丢失了依赖CD → E
。
我正在研究关系 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) 是错误的,因为 BC
和 CD
也是候选键(例如,因为 CD → E
和 E
是候选键,所以它是很容易看出 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
=] 与候选键 A
、BC
和 E
。两个关系都是BCNF,所以不需要进一步分解。
因为这个分解,确实丢失了依赖CD → E
。