关系代数部

时间:2015-10-27 17:13:48

标签: relational-algebra relational-division

我目前正在处理关系代数除法问题。我有以下两种关系:

              A | B | C                 B
              --|---|--                ---
              1 | 2 | 3                 2
Relation R =  1 | 2 | 6   Relation T =  
              4 | 2 | 2
              4 | 5 | 6

现在我正在执行以下操作:R ÷ T

当我计算这个时,我的结果如下:

              A | C                
              --|--               
              1 | 3               
R ÷ T =       1 | 6    
              4 | 2 

对我而言,因为对于分部,我会查看R中与T中的所有元组组合出现的元组。但是当我使用关系代数计算器时,例如RelaX,它会返回

              A | C                
              --|--               
  R ÷ T =     4 | 2                

我在哪里弄错了?提前感谢您的帮助。

有人可以提供帮助吗?

1 个答案:

答案 0 :(得分:0)

对这些架构进行划分并不能完全理解运算符的工作原理。此运算符的定义不是很清楚,操作通常由其他运算符的组合替换。

一个明确的方法来看看它在你的情况下是如何工作的将是创建一个新的R实例,其中列有正确定义新模式的列:(A,C,B)。这就是,使T的属性显示为A中的最后一个属性。在这种情况下,您执行一个非常简单的除法,看到结果非常简单,但想象一下如果你有模式R(A, D,B,C)和T(B,D)。这里T的属性在R中出现了不同的顺序,并且假设一些元组数量不多的实例已经很难通过查找来检查它们。

这可能是关系代数中定义的最困难的运算符,因为查询通常涉及选择,投影和连接的概念。另外,仅仅用文字来表达它是很复杂的。 考虑这个运算符的一个好方法是考虑SQL上的GROUP BY。在您的示例中,这意味着使用GROUP BY属性A,C - 这将为模式实例上显示的这些属性创建具有不同值的每种组合的组。这些组中的每一组都将具有与A,C的值组合相关联的B的所有值的集合。如果您将T实例中的属性B的值视为一组,则可以快速验证:通过A,C分组获得的每个组,如果T中B的值集合包含在R中的B值集合中,则A,C的值是所得关系的元组。

我知道我对这个问题有点迟了但是我看到很多人对此感到困惑。如果它不够清楚,我会留下对我写的文件的引用,这些文档更详细地说明了一个非常好的例子HERE