关联代数中的项目和限制

时间:2016-09-02 14:30:44

标签: relational-database relational-algebra

下面使用的SELECT和PROJECT运算符的定义可以在“关系数据库设计和实现”的第6章中找到,第4版,Harrington,Jan L.

PROJECT(resp.RESTRICT)的SQL等价物是SELECT(相应的WHERE,带有谓词以减少关系中元素的数量)。在您提出的表示法中(感谢您这样做)让我们使用b_pred将谓词“pred”应用于关系以减少其元素。然后a(b_pred(关系))= b_pred(a(关系))iff b_pred不消除支持谓词“pred”的列。此外,如果b_pred使用由a删除的列,则RHS表达式不正确。

问题:首先执行RESTRICT操作时结果是否始终正确?有一个正式的证据就可以了。

后续行动:为什么我们会考虑相反的操作顺序而对所有人感兴趣?我猜测性能是唯一可能的原因,但我不确定。

感谢您的回复!

1 个答案:

答案 0 :(得分:0)

可用于更改维护表达式语义的限制和投影顺序的两个规则如下:

π Y (σΦX(E))=σΦ X (π Y (E)),如果X⊆Y

否则,如果条件涉及属性X⊈Y:

π Y (σΦX(E))=π Y (σ<子>Φ的 X (π<子>的 XY (E)))

其中E是与包含 X Y ,π X 的一组属性产生关系的任何关系表达式/ sub>(E)是E在属性集 X 上的投影,σΦX(E)是对E的限制,条件ΦX超过集合属性X。

这两个规则是等价规则,因此它们可以在两个方向上应用。通常,如果可能,优化程序会尝试在任何其他操作之前应用限制,而不是在连接之前应用投影。

<强>加

第一条规则说,如果你与属性Z =Y∪W有关系,对Y的属性子集进行限制,然后将结果投影到Y,相当于首先执行投影,那么限制。

这种等价可以用以下方式证明。

给定E与属性Z =Y∪W的关系,限制的定义是:

σΦX(E)= {t | t∈E∧X⊆Z∧ΦX(t)}

即E的所有元组的集合,使得ΦX(t)为真。

投影的定义是:

π Y (E)= {t 1 | t∈E∧Y⊆Z∧t 1 = t [Y]}

这是通过对E的每个元组t考虑仅包含t的属性Y的(子)元组而获得的元组集。

所以,

π Y (σΦX(E))=π Y (E')= {t 1 | t∈E'∧Y⊆Z∧t 1 = t [Y]}

其中E'=σΦX(E)= {t | t∈E∧X⊆Z∧ΦX(t)}

结合这两个公式,我们得到:

π Y (σΦX(E))= {t 1 | t∈E∧X⊆Z∧ΦX(t)∧Y⊆Z∧t 1 = t [Y]}

但是既然我们知道X⊆Y,我们可以将公式重写为:

π Y (σΦX(E))= {t 1 | t∈E∧X⊆Y⊆Z∧ΦX(t)∧t 1 = t [Y]} [1]

从另一个词开始,

σΦ X (π (E))=σΦ X (E'')= {t | t∈E''∧X⊆Z∧ΦX(t)}

其中E''=π Y (E)= {t 1 | t∈E∧Y⊆Z∧t 1 = t [Y]}

再次,结合这两个公式并注意到X⊆Y,我们得到:

σΦ X (π Y (E))= {t 1 | t∈E∧X⊆Y⊆Z∧ΦX(t 1 )∧t 1 = t [Y]} [2]

[1] = [2]如果我们可以证明ΦX(t)=ΦX(t [Y]),这是正确的,因为两个条件同时为真或假,假设条件是关注的只有属性X,它们存在于t和t [Y]中(因为X⊆Y)。

第二条规则说,如果你与属性Z =X∪Y∪W有关系,X - Y≠∅对X的属性进行限制,然后将结果投影到Y上,相当于首先对属性X∪Y执行投影,然后执行限制,最后对属性X执行新投影。

同样在这种情况下,可以通过与上述证据类似的方式进行形式证明,但为简洁起见,此处省略。