试图理解元组关系演算

时间:2014-07-01 16:21:41

标签: relational tuple-relational-calculus

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

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

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

与这些关系: 作者(的 AUTHORID 下,名) 和创作( articleID,authorID ) 主键和外键以粗体显示。

{t:articleID,name | ∃a∈作者∃au作者a.authorID =au.AuthorID∧a.name='JohnSmith'∧a.authorID= au.AuthorID}

此外,您如何表达两者的差异?我正在努力解决以下问题:

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

1 个答案:

答案 0 :(得分:1)

  

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

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

元组演算表达式

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

描述了与域演算表达式相同的集合

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

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

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

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

    1. 在结果中插入元组的名称。
    2. 重新排列,以便每个量化的属性列表都包含一个关系的属性,并且具有该关系的原子公式跟随它。
    3. 使用一些新的量化元组名称和关系名称替换关系属性名称和原子公式的量化列表。
    4. 在其属性前插入虚线元组名称。
    5.   

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

      微积分中的表达式描述了一组元组。设置差异A \ B是集合A中的元组集合,但不在集合B中。如果关系R保持元组,其中 expressionR 且关系S保持元组,其中 expressionS 然后R \ S = R MINUS S =元组,其中表达式∧~表达式

      (可能会帮助您阅读this关于通过自然语言构建查询然后转换为域演算然后转换为关系代数。它以参数化语句作为每个给定关系/表的含义开始。然后它找到那些表达给定查询的组合。然后它将该表达式转换为简写,就像域微积分一样。(和标准谓词逻辑也称谓词微积分一样。)为了得到关系元组微积分,你将域微积分转换为元组微积分。如上所述。在SQL中,JOIN ON,CROSS JOIN和“,”很像元组演算,而JOIN USING和NATURAL JOIN就像是域演算和元组演算的混合。)