以下分解是否无损且依赖性保留?

Is the following decomposition lossless and dependency preserving?

在R(A,B,C,D)中, 让依赖关系成为

A->B 
B->C 
C->D 
D-> B

将R分解为(A,B)、(B,C)和(B,D)是无损的还是依赖性保持的?

我的尝试:(A,B) 和(B,C) 可以无损组合,因为B->C。但是,对于 (A,B,C) 和 (B,D),B 都不构成任何一个的密钥。因此有损分解。

同样对于依赖性保留,关系 (C-D) 不能从任何分解的关系中得到,因此分解不是依赖性保留。

然而,给出的答案是分解既是无损的又是依赖性保留的。那我哪里错了?

关系 R 的键也只有 {A} 不是吗?

  1. 你说:

However, for (A,B,C) and (B,D), B does not form a key for either. Hence the decomposition in lossy.

这是错误的,因为 B(B, D) 的键。我们可以通过从原始依赖计算 B+ 来看到这一点,假设它们形成关系的覆盖。

B+ = B
B+ = BC (for the dependency B->C)
B+ = BCD (for the dependency C->D)

所以,由于 D 包含在 B+ 中,我们有 B->D 可以从原始依赖集导出,并且在分解中 (B, D) B 是一个键(因为它是 D)。

  1. 要保持​​依赖关系,我们必须检查分解的所有 projected 依赖关系的并集是原始依赖关系集的覆盖。由于分解关系的三个覆盖分别是 {A->B}{C->B, B->C}{D->B, B->D},通过联合这三个集合,您也可以轻松导出 D->CC->D,所以依赖关系被保留。

  2. 最后,是{A}是原始关系的唯一候选键。