下面使用的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操作时结果是否始终正确?有一个正式的证据就可以了。
后续行动:为什么我们会考虑相反的操作顺序而对所有人感兴趣?我猜测性能是唯一可能的原因,但我不确定。
感谢您的回复!
答案 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''=π 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执行新投影。
同样在这种情况下,可以通过与上述证据类似的方式进行形式证明,但为简洁起见,此处省略。