Igg*_*ass 4 relational-algebra
让是一个具有以下关系方案的数据库:R(A,B,D)并且S(A,B)在同一域中具有相同名称的属性,r并且s分别具有实例和。
一个实例 s
什么是方案,什么是元组u=r÷s?如何用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)
可以这样读:
? AB (R) x S:将 R 投影到不在 S 中的 R 的属性上,并将此关系与 S 相乘(笛卡尔积)。这会产生与 R 的属性 A 和行的所有可能组合的关系S 和 R 的投影;
从前面的结果中减去原来在 R 中的所有元组,即执行 (? AB (R) x S) - R。这样我们就得到了“额外”的元组,即笛卡尔积中没有的元组存在于原始关系中。
最后,从原始关系中减去那些额外的元组(但同样,仅对 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,您可以看到这个事实,这应该让您对除法运算符的含义有了重要的了解:
塔的唯一值
D在r能与共同存在(a1, b1)(的唯一元组s),是d1,d2和d4。
您还可以在维基百科中查看另一个示例,有关除法的详细说明,连同其转换是 SQL,您可以查看这些幻灯片。