这种分解依赖性是否保留?
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
从中我们可以看出,每个依赖关系都包含在一个分解的关系中,因此我们可以得出依赖关系被保留的结论。
请注意,在对一组依赖项进行推理时,对它们的规范覆盖进行推理总是很方便。
我正在尝试弄清楚如何查看分解是否保留依赖关系。关系是: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
从中我们可以看出,每个依赖关系都包含在一个分解的关系中,因此我们可以得出依赖关系被保留的结论。
请注意,在对一组依赖项进行推理时,对它们的规范覆盖进行推理总是很方便。