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

时间:2019-01-06 08:19:38

标签: database functional-dependencies

我试图弄清楚如何查看分解是否保留了依赖关系。关系为: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

因此,在我的世界中,这就是保持依赖关系。但是,根据标记,答案是不是。对于这个概念,我在做什么错和/或误解?

为澄清起见,我确实理解每个分解关系中都不包含某些依赖项。例如AB-> E,因为我们找不到包含这三个元素的关系。但是,尽管如此,由于AB的闭包仍然包括E,因此无论如何它都将被视为保持依赖关系。这是我出问题的地方吗?对该概念的解释(我的教科书非常简短)将不胜感激。

1 个答案:

答案 0 :(得分:0)

简短:您是正确的,依赖项已保留。

详细解释。

要定义依赖项保留的概念,我们首先需要定义一组功能依赖项的投影的概念:

  

给出具有一组依赖项F的架构R(T),并给定T的子集T i ,则F在T i上的投影 定义为:

     

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

请注意,我们需要考虑F + 的依赖关系(F依赖关系的封闭),而不仅仅是F上的依赖。

我们现在可以定义依赖项保留的属性以进行分解:

  

A分解ρ= {R 1 (T 1 ),...,R n (T n T i (F)≡F时,具有依赖关系F的R(T)的R(T)保留依赖关系。

这可以通过应用至少在1983年开始在书中描述的算法进行正式验证(例如,参见:Ullman,J.(1983)。数据库系统原理。计算机科学出版社,马里兰州罗克维尔),该算法可以计算多项式时间,一组属性相对于依赖项的投影是闭合的。

在实践中,为了检查示例中是否保留了依赖项,不需要应用该算法,但是足以计算出依赖项的规范覆盖范围:

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

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

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