2

在什么情况下你会使用域关系演算而不是元组关系演算?

例如,我使用元组关系解决了这个问题:

列出 John Smith 的共同作者(与 John Smith 共同撰写文章的作者)

与这些关系:作者(作者ID,名称)和创作(文章ID,作者ID)粗体的主键和外键。

{t:文章ID,名称| ∃ a ∈ 作者 ∃ au 创作 a.authorID = au.AuthorID ∧ a.name = 'John Smith' ∧ a.authorID = au.AuthorID}

此外,您将如何表达两者的集合差异?我正在尝试解决以下问题:

哪个作者与每位作者共同撰写了至少 1 篇论文(没有聚合函数)。

4

1 回答 1

1

在什么情况下你会使用域关系演算而不是元组关系演算?

假设您可以对列的值访问相同的运算符,则元组关系演算、域谓词演算或关系代数的任何表达式都可以转换为另一个表达式。您可以在给定的情况下使用它们中的任何一个。

元组演算表达式

{ t < c,... > | ∃ u ∈ U : ... t.c ... u.x ...}

描述与域微积分表达式相同的集合

{ < c,... > | ∃ x,... : U(x,...) ∧ ... c ... x ...}.

“U”命名给定关系,“u”从中命名任意元组,“x,...”是它的属性。“U(x,...)”被称为原子公式。“∃”被称为量词,意思是“存在”或“对于某些人”。)

所以要将元组演算转换为域演算:

  1. 在结果中删除元组的名称。
  2. 将量化的元组名称和关系名称替换为其属性名称的量化列表和使用它们的原子公式。
  3. 删除虚线元组名称。

并将域微积分转换为元组微积分:

  1. 在结果中插入一个元组的名称。
  2. 重新排列,使每个量化的属性列表准确地包含一个关系的属性,并且该关系的原子公式跟在它后面。
  3. 用一些新的量化元组名称和关系名称替换关系属性名称的量化列表和使用它们的原子公式。
  4. 在它们的属性前面插入点元组名称。

此外,您将如何表达两者的集合差异?

任一微积分中的表达式都描述了一组元组。集合差 A \ B 是在集合 A 中但不在集合 B 中的元组的集合。如果关系 R 持有元组 where expressionR和关系 S 持有元组 where expressionS则 R \ S = R MINUS S = 元组 where expressionR ∧ ~表达式

(它可以帮助您阅读有关通过自然语言构建查询然后转换为域演算然后转换为关系代数的内容。它以参数化语句作为每个给定关系/表的含义开始。然后它找到了这些组合来表达给定查询。然后它将该表达式转换为类似于域演算的速记。(并且与标准谓词逻辑又名谓词演算类似。)要获得关系元组演算,您可以将域演算转换为元组演算,如上所述。在 SQL 中, JOIN ON、CROSS JOIN 和 "," 很像元组演算,而 JOIN USING 和 NATURAL JOIN 就像域演算和元组演算的混合。)

于 2014-07-06T22:58:36.693 回答