RA算子差 - 关系代数

时间:2012-08-24 19:39:11

标签: rdbms relational-algebra

我很困惑表达式如何不同PROJECT A(r - s)和PROJECT A(r) - PROJECT A(s)在RDBMS中。有谁可以展示一个例子来证明上面?

2 个答案:

答案 0 :(得分:2)

s = [x  y]
     0  0
     1  1
     2  2

r = [x  y]
     0  0
     0  1
     0  2
     1  1
     1  2
     2  2

A = {y}

PROJECT A(r − s)=[y]
          1
          2

PROJECT A(r) − PROJECT A(s)=[y]

以下是如何生成(计数器)这样的示例。 OP问题转化为QBQL断言:

a <AND> TABLE_DUM = a & r <AND> TABLE_DUM =s <AND> TABLE_DUM 
-> 
a v ( r <AND> <NOT> s ) = (a v  r) <AND> <NOT> (a v s).

除了"v"(广义投影)之外的所有操作都来自D&amp; D代数A.前两个蕴涵条件要求关系a为空,关系r和{ {1}}具有相同的标题。它输出:

s

虽然这是合法的答案,但有些人可能会对将关系投射到不属于标题的属性上的想法感到不舒服。我们需要为s = [p] 0 ; r = [p] 1 ; a = [r] ; *** False Assertion *** a标题添加一个重叠条件:r。然后,属性{p,r}应手动转换为OP的{x,y}。 (这是Erwin注意到的bug被引入的地方)。

答案 1 :(得分:2)

r = { TUPLE {X 1 , Y 1} }
s = { TUPLE {X 1 , Y 2} }

r MINUS s = r = { TUPLE {X 1 , Y 1} }

Take projections over X (A = {X} ???)

r PROJECT {X} === { TUPLE {X 1} }
s PROJECT {X} === { TUPLE {X 1} }

(r PROJECT {X}) MINUS (s PROJECT {X}) === { }
(r MINUS s) PROJECT {X} === { TUPLE {X 1} }

这是s中的Y 2部分。这是r和s中元组之间的区别。如果你首先“抛弃那种差异”,那么在那之后剩下的任何东西都是平等的,并且计算相等的东西之间的差异当然不算什么。

但是如果你先计算差异,那么s中元组中的Y 2部分会导致r中的元组(粗略地说)不会从结果中丢弃,然后对该结果进行投影当然会产生自身一些非空的东西。