这种分解依赖性是否保留?

Is this decomposition dependency preserving?

我正在尝试弄清楚如何查看分解是否保留依赖关系。关系是:R(ABCDEF) 并且有以下 FD。 AB -> CE,C -> EB,E -> D,C -> D。然后我们将关系拆分为: R1(BF)、R2(ACB) 和 R3(CDE)。此依赖项是否保留?

我的印象是要计算这个,你在 FD 的所有左侧做一个闭包。这给:

AB+ = ABCEBD 其中包括 AB -> CE

C+ = CEBD,其中包括 FD

E+ = ED 其中包括 E->D

所以在我的世界里,这是依赖性保留。然而,根据标记,答案是否定的。我做错了什么and/or 对概念有误解?

澄清一下,我知道有些依赖关系并不存在于每个分解的关系中。例如 AB -> E 因为我们找不到将这三个一起包含的关系。但是,我认为,由于 AB 的闭包仍然包含 E,因此无论如何都会将其视为依赖保留。这是我出错的地方吗?对这个概念的解释(我的教科书非常简短)将不胜感激。

简而言之:你是对的,依赖关系被保留了。

详细解释。

要定义依赖保存的概念,首先我们需要定义一组函数依赖的投影:

的概念

Given a schema R(T) with a set of dependencies F, and given a subset Ti of T, the projection of F on Ti is defined as:

πTi = { X → Y ∈ F+ | X, Y ⊆ Ti}

注意这里需要考虑F+的依赖(关闭F的依赖),而不仅仅是F上的

我们现在可以为分解定义 属性 依赖保存:

A decomposition ρ = {R1(T1), ..., Rn(Tn)} of R(T) with dependencies F preserves the dependencies if and only if ∪ πTi(F) ≡ F.

这可以通过应用至少在 1983 年的书中描述的算法来正式验证(例如参见:Ullman, J. (1983). Principles of Database Systems. Computer Science Press, Rockville, Maryland),即在多项式时间内计算一组属性相对于依赖项投影的闭包。

实际上,为了检查您的示例中是否保留了依赖关系,不需要应用该算法,但计算依赖关系的规范覆盖就足够了:

A B → C
C → B
C → E
E → D

从中我们可以看出,每个依赖关系都包含在一个分解的关系中,因此我们可以得出依赖关系被保留的结论。

请注意,在对一组依赖项进行推理时,对它们的规范覆盖进行推理总是很方便。