【问题标题】:Please clear this confusion regarding relational algebra/tuple relational calculus请清除有关关系代数/元组关系演算的混淆
【发布时间】:2016-01-13 13:05:06
【问题描述】:

1:对这个查询给出的解释是“所有元组的集合t,使得在关系borrow中存在一个元组s > 其中cname属性的ts的值相等,s的值对于cname amount 属性大于 1200"。但是我们从来没有提到 t 属于哪个关系。它是什么关系,为什么?

2:在底层图像中,对这两个投影进行“与”运算(包含“客户”关系中的属性“CustomerID”和“订单”关系中的属性“orderID”)是否给出了这两个投影的笛卡尔积-列关系?

【问题讨论】:

标签: relational-database relational-algebra cartesian-product cross-join tuple-relational-calculus


【解决方案1】:

1:

元组t,出现在左侧,是答案的元组。 { t | ...t... } 表示“每个值的集合,t 说,这样 ...t... 是真的”。对于每个元组值,我们将其称为 t,如果它满足条件,则它会进入答案。

2:

在第 1 部分中,“∧”用于关系元组演算查询中谓词逻辑表达式中的连接 AND。在 2 中,您在两个关系表达式之间使用它作为关系代数运算符。通常“⋈”用于 NATURAL JOIN,“⨯”用于 CARTESIAN PRODUCT(又名 CROSS JOIN)。有时只有一个 NATURAL JOIN 运算符,如果它没有共同属性使用,那么它的用途/价值就称为笛卡尔积。

这是两种不同的表达方式。然而,“∧”可以在两者中使用,尽管用于不同的事物。这不是问题,因为在两个谓词逻辑表达式之间它显然是 AND,而在两个关系代数表达式之间它显然是一个关系代数运算符。我希望这是自然加入。我还没有看到它用于笛卡尔积,但请记住,没有共同属性的 NATURAL JOIN 是/返回“笛卡尔积”。所以你的例子确实“给出了这两者的笛卡尔积”。

一些关系代数变体具有无序且具有唯一属性名称的元组。然后通常 CARTESIAN PRODUCT 采用两个没有任何共同属性的关系并返回它们的 NATURAL JOIN。由于您的微积分示例中元组 t 的属性名称没有给出任何顺序,可能就是这种关系。

一些关系代数变体有有序的元组,其中属性名称可以出现多次。然后通常 CARTESIAN PRODUCT 返回具有多次出现的公共属性名称的元组。 the slides for the textbook by Silberschatz, Korth & Sudarshan 似乎就是这种情况。 (它只使用“∧”作为 AND。)然后自然连接只有一个公共属性的副本,但笛卡尔连接有两个,所以它们可以不同。但是在您的示例中,两个 PROJECTION 结果具有不相交的属性集。因此 NATURAL JOIN 和 CARTESIAN PRODUCT 将返回相同的关系。 (假设属性顺序相同。)

[相同的符号有时用于 AND 和 NATURAL JOIN(并且可以用于 CARTESIAN PRODUCT)的原因是,如果关系代数表达式 R 持有元组,其中 r(...) 和关系代数表达式 S 持有s(...) 然后 R NATURAL JOIN S 保存 r(...) AND s(...) 的元组。事实上,每个关系代数表达式都是对应关系演算表达式的值,其中关系名称对应于给定的谓词(含义),逻辑运算符对应于关系运算符。]

使用教师/教科书告诉您使用的关系、运算符和符号。如果有疑问定义你的符号或使用文字。

【讨论】:

  • 在第二点中,我问了这个问题,因为“AND”也用于使用元组演算获得两个关系的笛卡尔积(我知道 AND 可以在任何地方使用,只是为了设置条件)。
  • 不,我的意思是元组微积分(来自 korth)
  • 我没有提到自然连接的∧,我找到了一个问题来表达元组演算中两个关系r和s的笛卡尔积,我没有做这个问题&看到答案∧是使用过 - 因此我质疑 ∧ 是否可以用来做笛卡尔积。
  • 很可能是错字。 (我将我的其他 cmets 移到我的答案中。)
猜你喜欢
  • 1970-01-01
  • 2011-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多