乘法算子做关系代数是什么?

时间:2013-11-02 09:54:57

标签: relational-algebra

我是关系代数的新手。我在以下表达式中找到了*运算符

enter image description here

这与使用联接

的不同之处是什么

enter image description here

1 个答案:

答案 0 :(得分:3)

*应更正确地写为×,因为它代表Cartesian product。此操作返回所有元组的集合,这些元组是每个操作数的元组串联。联接将笛卡尔积向下过滤为仅具有指定属性匹配值的元组。如果连接是自然连接,如在您的示例中,匹配的属性是具有相同名称的属性。

例如,假设显示以下两个关系RS

R ( a, b, c )      S ( b, c, d )
  ( 1, 2, 3 )        ( 2, 7, 9 )
  ( 2, 4, 6 )        ( 5, 3, 4 )
  ( 3, 6, 9 )        ( 2, 3, 6 )

笛卡儿积R × S是:

  ( R.a, R.b, R.c, S.b, S.c, S.d )
  ( 1,   2,   3,   2,   7,   9   )
  ( 1,   2,   3,   5,   3,   4   )
  ( 1,   2,   3,   2,   3,   6   )
  ( 2,   4,   6,   2,   7,   9   )
  ( 2,   4,   6,   5,   3,   4   )
  ( 2,   4,   6,   2,   3,   6   )
  ( 3,   6,   9,   2,   7,   9   )
  ( 3,   6,   9,   5,   3,   4   )
  ( 3,   6,   9,   2,   3,   6   )

自然加入R ⨝ S是仅过滤为bc值匹配的元组的产品:

  ( a, b, c, d )
  ( 1, 2, 3, 6 )

加入R ⨝b S是仅过滤到b值匹配的元组的产品:

  ( R.a, b,   R.c, S.c, S.d )
  ( 1,   2,   3,   7,   9   )
  ( 1,   2,   3,   3,   6   )