分解无损连接算法

时间:2017-11-04 11:54:14

标签: database-normalization relational-algebra decomposition

我已经为无损连接提供了以下说明。有人可以解释变量'r'是什么以及它如何出现在算法/等式/公式的两边?

  

“如果关系R被分解为关系R1,R2,则为   R的每个合法实例r ......

     

r =πR1(r)⋈πR2(r)

     

...然后分解本身被称为无损连接   分解“。

注意:R1和R2是下标。

1 个答案:

答案 0 :(得分:0)

r应该代表架构R的任何关系值/实例(无损可分解)。但即使关系值无损分解,我们也必须注意我们分解的属性(集合)。

更重要的问题:什么是R1R2

您的引用可能基于the wikipedia article或其中的一个链接 - 这似乎是完全垃圾;远比维基百科关于关系模型主题的通常标准差。 (例如,它显示了一个用于重构投影的笛卡尔积 - 而无损连接通常需要一个 join :bowtie运算符,如图所示。)

运算符π是关系代数投影。 π通常显示为使用属性名称(或更恰当地说是一组属性名称)。这些通常由X, Y或类似的符号表示。然后R1R2应该是属性名称集合,不是关系。他们当然不可能两者兼而有之。 (我可以想象的是R1, R2旨在代表两种关系的模式/属性集。)

此外,对于无损连接分解,我们要求两个投影一起包含R的所有属性。 (通常是一些共同的属性,以便连接匹配在一起。)

所以我们应该

r1 = πX(r)             -- r1 is the value of R1 corresponding to r
r2 = πY(r)             -- ditto for R2
attributes of R = X ∪ Y   -- intersection of X, Y not necessarily empty
r = r1 ⋈ r2

一个明显的例子是R{A, B, C}属性,{A}是关键。然后我们可以分解为X = {A, B}, Y = {A, C}