如何理解关系代数中的除法运算符u=r÷s?
How to understand `u=r÷s`, the division operator, in relational algebra?
假设数据库具有以下 relational-schemes:R(A,B,D)
和 S(A,B)
在同一域中具有相同名称的属性以及实例 r
和 s
分别。
r
的实例
s
的实例
方案是什么,u=r÷s
的元组是什么?如何用r
和s
用英语定义它们?
我的尝试
我知道
u=r÷s
=
这让我认为它只是一个包含一列 A 的数组,但我不确定数组中的结果会是什么。
你能帮我理解u=r÷s吗?
关系代数的除法运算符的一个直观的属性简单来说就是它是笛卡尔积的倒数。例如,如果你有两个关系 R 和 S,那么,如果 U 是定义为它们的笛卡尔积的关系:
U = R x S
除法运算符使得:
U ÷ R = S
和:
U ÷ S = R
因此,您可以将 U ÷ R
的结果视为:“U
的投影乘以 R
,产生 U
”,以及操作 ÷
,作为查找 U
的所有“部分”的操作,这些“部分”与 all R
的元组组合。
然而,为了有用,我们希望这个操作可以应用于任何一对关系,也就是说,我们想要划分一个 而不是 的关系笛卡尔积的结果。对于这个,正式的定义比较复杂。
所以,假设我们有两个关系R和S,属性分别为A和B,它们的划分可以定义为:
R ÷ S = πA-B(R) - πA-B((πA-B(R) x S) - R)
可以这样读:
πA-B(R) x S:将 R 投影到 R 的不在 S 中的属性上,并乘以(笛卡尔积) 与 S 的这种关系。这会产生与 R 的属性 A 和行的关系,即 S 的行和 R 的投影的所有可能组合;
将前面的结果减去R中原有的所有元组,即执行(πA-B(R) x S) - R. 这样我们就得到了“额外的”元组,即笛卡尔积中原始关系中不存在的元组。
最后,从原始关系中减去那些额外的元组(但是,同样,只对 R 的属性执行此操作,而 S 中不存在)。所以,最后的运算是: πA-B(R) - πA-B(the步骤 2).
的结果
因此,对于您的示例,r
在 D 上的投影等于:
(D)
d1
d2
d3
d4
与 s
的笛卡尔积是:
(A, B, D)
a1 b1 d1
a1 b1 d2
a1 b1 d3
a1 b1 d4
现在我们可以从这个集合中删除也在原始关系r
中的元组,即前两个元组和最后一个,这样我们得到以下结果:
(A, B, D)
a1 b1 d3
最后,我们可以从原始关系(再次投影到 D)中删除之前的元组(投影到 D),即我们删除:
(D)
d3
来自:
(D)
d1
d2
d3
d4
得到如下结果,即除法的最终结果:
(D)
d1
d2
d4
最后,我们可以通过将结果与原始关系 s
(仅由元组 (a1, b1)
组成)相乘来仔细检查结果:
(A B D)
a1 b1 d1
a1 b1 d2
a1 b1 d4
并查看原始关系 r
的行,您可以看到这个事实,这应该会让您对除法运算符的 含义 有一个重要的了解:
the only values of the column D
in r
that are present together with (a1, b1)
(the only tuple of s
), are d1
, d2
and d4
.
您还可以在 Wikipedia, and for a detailed explanation of the division, together with its transformation is SQL, you could look at these slides 中查看另一个示例。
假设数据库具有以下 relational-schemes:R(A,B,D)
和 S(A,B)
在同一域中具有相同名称的属性以及实例 r
和 s
分别。
r
的实例
s
方案是什么,u=r÷s
的元组是什么?如何用r
和s
用英语定义它们?
我的尝试
我知道
u=r÷s
=
这让我认为它只是一个包含一列 A 的数组,但我不确定数组中的结果会是什么。
你能帮我理解u=r÷s吗?
关系代数的除法运算符的一个直观的属性简单来说就是它是笛卡尔积的倒数。例如,如果你有两个关系 R 和 S,那么,如果 U 是定义为它们的笛卡尔积的关系:
U = R x S
除法运算符使得:
U ÷ R = S
和:
U ÷ S = R
因此,您可以将 U ÷ R
的结果视为:“U
的投影乘以 R
,产生 U
”,以及操作 ÷
,作为查找 U
的所有“部分”的操作,这些“部分”与 all R
的元组组合。
然而,为了有用,我们希望这个操作可以应用于任何一对关系,也就是说,我们想要划分一个 而不是 的关系笛卡尔积的结果。对于这个,正式的定义比较复杂。
所以,假设我们有两个关系R和S,属性分别为A和B,它们的划分可以定义为:
R ÷ S = πA-B(R) - πA-B((πA-B(R) x S) - R)
可以这样读:
πA-B(R) x S:将 R 投影到 R 的不在 S 中的属性上,并乘以(笛卡尔积) 与 S 的这种关系。这会产生与 R 的属性 A 和行的关系,即 S 的行和 R 的投影的所有可能组合;
将前面的结果减去R中原有的所有元组,即执行(πA-B(R) x S) - R. 这样我们就得到了“额外的”元组,即笛卡尔积中原始关系中不存在的元组。
最后,从原始关系中减去那些额外的元组(但是,同样,只对 R 的属性执行此操作,而 S 中不存在)。所以,最后的运算是: πA-B(R) - πA-B(the步骤 2).
的结果
因此,对于您的示例,r
在 D 上的投影等于:
(D)
d1
d2
d3
d4
与 s
的笛卡尔积是:
(A, B, D)
a1 b1 d1
a1 b1 d2
a1 b1 d3
a1 b1 d4
现在我们可以从这个集合中删除也在原始关系r
中的元组,即前两个元组和最后一个,这样我们得到以下结果:
(A, B, D)
a1 b1 d3
最后,我们可以从原始关系(再次投影到 D)中删除之前的元组(投影到 D),即我们删除:
(D)
d3
来自:
(D)
d1
d2
d3
d4
得到如下结果,即除法的最终结果:
(D)
d1
d2
d4
最后,我们可以通过将结果与原始关系 s
(仅由元组 (a1, b1)
组成)相乘来仔细检查结果:
(A B D)
a1 b1 d1
a1 b1 d2
a1 b1 d4
并查看原始关系 r
的行,您可以看到这个事实,这应该会让您对除法运算符的 含义 有一个重要的了解:
the only values of the column
D
inr
that are present together with(a1, b1)
(the only tuple ofs
), ared1
,d2
andd4
.
您还可以在 Wikipedia, and for a detailed explanation of the division, together with its transformation is SQL, you could look at these slides 中查看另一个示例。