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

时间:2016-01-24 16:48:22

标签: relational-algebra

让我们成为一个拥有以下关系方案的数据库:R(A,B,D)S(A,B),同一域中的同名属性以及实例rn

r的一个实例 an instance of r

s

的实例

an instance of s

该计划是什么?u=r÷s的元组是什么?如何使用rs

用英语定义它们

我的尝试

我知道

u=r÷s = u=r÷s

这让我觉得它只是一个A列的数组,但我不确定知道数组中的结果会是什么。

你能帮我理解你吗?

1 个答案:

答案 0 :(得分:2)

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

U = R x S

该部门是运营商,以便:

U ÷ R = S

U ÷ S = R

因此,您可以将U ÷ R的结果视为:“U的投影,乘以R,生成U”,以及操作÷,作为查找与{em>所有 U元组合并的R的所有“部分”的操作。

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

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

R÷S =π AB (R) - π AB ((π AB (R)x S) - R)< / p>

可以这种方式阅读:

  1. π AB (R)x S:对R中不属于S的属性进行项目R,并将此关系与S相乘(笛卡儿积)。这与R的属性A和行的所有可能的S行组合和R的投影;

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

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

  4. 所以,举个例子,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的行,你可以看到这个事实,它应该让你对除法运算符的含义有一个重要的见解:

      

    Dr列与(a1, b1)s的唯一元组)一起出现的唯一值d1,{ {1}}和d2

    您还可以在Wikipedia中看到另一个示例,有关除法的详细说明以及它的转换是SQL,您可以查看这些slides