在什么情况下你会使用域关系演算而不是元组关系演算?
例如我使用元组关系解决了这个问题:
列出John Smith的合着者(与John Smith共同撰写文章的作者)
与这些关系: 作者(的 AUTHORID 下,名) 和创作( articleID,authorID ) 主键和外键以粗体显示。
{t:articleID,name | ∃a∈作者∃au作者a.authorID =au.AuthorID∧a.name='JohnSmith'∧a.authorID= au.AuthorID}
此外,您如何表达两者的差异?我正在努力解决以下问题:
哪位作者与每位作者共同撰写了至少1篇论文(没有聚合函数)。
答案 0 :(得分:1)
在什么情况下你会使用域关系演算而不是元组 关系演算?
假设您可以访问列的值上的相同运算符,则元组关系演算,域谓词演算或关系代数的任何表达式都可以转换为另一个。您可以在特定情况下使用其中任何一种。
元组演算表达式
{ t < c,... > | ∃ u ∈ U : ... t.c ... u.x ...}
描述了与域演算表达式相同的集合
{ < c,... > | ∃ x,... : U(x,...) ∧ ... c ... x ...}.
“U”命名给定关系,“u”命名来自它的任意元组,“x,...”是其属性。 “U(x,...)”被称为原子公式。 “∃”被称为量词,意思是“存在”或“为某些人”。)
所以将元组演算转换为域演算:
将域演算转换为元组演算:
此外,您如何表达两者的差异?
微积分中的表达式描述了一组元组。设置差异A \ B是集合A中的元组集合,但不在集合B中。如果关系R保持元组,其中 expressionR 且关系S保持元组,其中 expressionS 然后R \ S = R MINUS S =元组,其中表达式∧~表达式。
(可能会帮助您阅读this关于通过自然语言构建查询然后转换为域演算然后转换为关系代数。它以参数化语句作为每个给定关系/表的含义开始。然后它找到那些表达给定查询的组合。然后它将该表达式转换为简写,就像域微积分一样。(和标准谓词逻辑也称谓词微积分一样。)为了得到关系元组微积分,你将域微积分转换为元组微积分。如上所述。在SQL中,JOIN ON,CROSS JOIN和“,”很像元组演算,而JOIN USING和NATURAL JOIN就像是域演算和元组演算的混合。)