如何理解关系代数中的除法运算符“u=r÷s”?

Igg*_*ass 4 relational-algebra

让是一个具有以下关系方案的数据库:R(A,B,D)并且S(A,B)在同一域中具有相同名称的属性,r并且s分别具有实例和。

一个实例 r r 的一个实例

一个实例 s

s 的一个实例

什么是方案,什么是元组u=r÷s?如何用r和用英语定义它们s

我的尝试

我知道

u=r÷s=u=r÷s

这让我认为它只会是一个 A 列的数组,但我不确定在数组中会产生什么结果。

你能帮我理解u=r÷s吗?

Ren*_*nzo 10

关系代数的除法算子的一个直观性质就是它是笛卡尔积的逆。例如,如果您有两个关系 R 和 S,那么,如果 U 是定义为它们的笛卡尔积的关系:

U = R x S
Run Code Online (Sandbox Code Playgroud)

除法是这样的运算符:

U ÷ R = S
Run Code Online (Sandbox Code Playgroud)

和:

U ÷ S = R
Run Code Online (Sandbox Code Playgroud)

所以,你可以把 的结果U ÷ R看作:“那个的投影U,乘以R,产生U”,而操作的结果÷,作为找到所有“部分”U与 的所有元组组合的操作R

然而,为了有用,我们希望这个操作可以应用于任何一对关系,也就是说,我们想要划分一个不是笛卡尔积的结果的关系。为此,正式定义更为复杂。

因此,假设我们有两个关系 R 和 S,分别具有属性 A 和 B,它们的划分可以定义为:

R÷S = ? AB (R) - ? AB ((? AB (R) x S) - R)

可以这样读:

  1. ? AB (R) x S:将 R 投影到不在 S 中的 R 的属性上,并将此关系与 S 相乘(笛卡尔积)。这会产生与 R 的属性 A 和行的所有可能组合的关系S 和 R 的投影;

  2. 从前面的结果中减去原来在 R 中的所有元组,即执行 (? AB (R) x S) - R。这样我们就得到了“额外”的元组,即笛卡尔积中没有的元组存在于原始关系中。

  3. 最后,从原始关系中减去那些额外的元组(但同样,仅对 S 中不存在的 R 属性执行此操作)。所以,最后的操作是: ? AB (R) - ? AB步骤 2 的结果)。

因此,以您的示例为例,rD 上的投影等于:

(D)
d1
d2
d3 
d4
Run Code Online (Sandbox Code Playgroud)

和笛卡尔积s是:

(A,  B,  D)
 a1  b1  d1
 a1  b1  d2
 a1  b1  d3
 a1  b1  d4
Run Code Online (Sandbox Code Playgroud)

现在我们可以从这个集合中删除同样在原始关系中的r元组,即前两个元组和最后一个元组,以便我们获得以下结果:

(A,  B,  D)
 a1  b1  d3
Run Code Online (Sandbox Code Playgroud)

最后,我们可以从原始关系(再次投影到 D)中删除之前的元组(投影到 D),即我们删除:

(D)
d3
Run Code Online (Sandbox Code Playgroud)

从:

(D)
d1
d2
d3
d4
Run Code Online (Sandbox Code Playgroud)

我们得到以下结果,这是除法的最终结果:

(D)
d1
d2
d4
Run Code Online (Sandbox Code Playgroud)

最后,我们可以通过将结果与原始关系s(仅由 tuple 组成(a1, b1))相乘来再次检查结果:

(A  B  D)
 a1 b1 d1
 a1 b1 d2
 a1 b1 d4
Run Code Online (Sandbox Code Playgroud)

查看原始关系的行r,您可以看到这个事实,这应该让您对除法运算符的含义有了重要的了解:

塔的唯一值Dr能与共同存在(a1, b1)(的唯一元组s),是d1d2d4

您还可以在维基百科中查看另一个示例,有关除法的详细说明,连同其转换是 SQL,您可以查看这些幻灯片