关系代数与关系演算的区别

mrg*_*mrg 7 rdbms relational-algebra relational-database tuple-relational-calculus domain-calculus

关系代数和关系演算之间的确切区别是什么?在大多数参考文献中,它将是

Relational algebra is procedural and calculus is non procedural.

那么,这些代表什么呢.但是,我们可以使用关系代数解决所有问题.那么为什么我们要使用关系演算.除了定义,用例子解释非常感谢.

Ame*_*mee 5

关系代数与关系微积分的比较

去这个链接了解详情。 http://ecomputernotes.com/database-system/rdbms/relational-algebra-and-relational-calculus

[2]

在此处输入图片说明

  • 现在请注明您*第二*报价的来源。 (2认同)

phi*_*pxy 5

TL; DR:调用RA(关系代数)运算符的查询以及对两个关系计算(RCs)TRC(元组RC)和DRC(域RC)的查询是同一事物的不同语法:关系值或关系值的元组必须满足。和SQL(它们的混合)一样。正如谓词演算一样,数学,逻辑,科学(包括计算机科学)和工程(包括软件工程)中的精确语言。RA是程序性的,而RC是声明性的,这是一个神话。


一个关系认为,做一些元组谓词的属性--statement模板参数-成为一个真正的命题 --statement。

/* tuples where employee PERSONNAME lives on STREET in CITY */
Employee
/* tuples where employee PERSONNAME works at COMPANY for $SALARY */
WorksFor
Run Code Online (Sandbox Code Playgroud)

RA风格的查询表达式涉及属性名称,关系变量/常量名称,关系文字(涉及属性名称和值)和关系运算符。运算符为JOIN,UNION,MINUS,PROJECT,RESTRICT等。它表示您通过评估表达式所获得的关系值。但这也是满足价值的要求。

/* RA query for tuples where
    FOR SOME STREET & CITY [employee PERSONNAME lives on STREET in CITY]
AND NOT FOR SOME COMPANY & SALARY
        [employee PERSONNAME works at COMPANY for $SALARY AND COMPANY = 'FBC']
*/
    PROJECT PERSONNAME (Employee)
MINUS PROJECT PERSONNAME (RESTRICT COMPANY = 'FBC' (WorksFor))
Run Code Online (Sandbox Code Playgroud)

RC表达式是关系值的集构建器符号。它涉及带有关系变量/常量名称,属性名称和值,谓词运算符和量化名称(逻辑变量)的谓词。运算符为AND,OR,NOT,FOR SOME / ALL和=。通常将其视为满足价值的要求。但这也表示您通过评估表达式或某个等效表达式而获得的关系值。

DRC具有作为属性的量化名称。对于每个属性一个参数的语句,我们使用简写形式:

Employee(PERSONNAME, STREET, CITY)
    means (PERSONNAME, STREET, CITY) IN Employee
    means employee PERSONNAME lives on STREET in CITY
WorksFor(PERSONNAME, COMPANY, SALARY)
    means (PERSONNAME, COMPANY, SALARY) IN WorksFor
    means employee PERSONNAME works at COMPANY for $SALARY

/* DRC query for the same tuples as the RA query above */
tuples like (PERSONNAME) where
    FOR SOME STREET & CITY [Employee(PERSONNAME, STREET, CITY)]
AND NOT FOR SOME COMPANY & SALARY
        [WorksFor(PERSONNAME, COMPANY, SALARY) AND COMPANY = 'FBC']
Run Code Online (Sandbox Code Playgroud)

TRC的量化名称是元组。我们在名称上加点以获取与属性名称关联的值。(就像编程语言记录的字段一样。)对于带有一个参数(元组)的语句,我们使用简写形式:

Employee(T)
    means T IN Employee
    means employee T.PERSONNAME lives on T.STREET in T.CITY
Worksfor(T)
    means T IN Worksfor
    means employee T.PERSONNAME works at T.COMPANY for $T.SALARY

/* TRC query for the same tuples as the RA query above */
tuples equal to some tuple T like (PERSONNAME) where
    FOR SOME E [Employee(E) AND E.PERSONNAME = T.PERSONNAME]
AND NOT FOR SOME W [
        WorksFor(W)
    AND W.COMPANY = 'FBC'
    AND E.PERSONNAME = T.PERSONNAME
    ]
Run Code Online (Sandbox Code Playgroud)

(教授了RA和RC原始版本的一些变体。例如,有些通过顺序标识参数,而另一些通过名称标识。有时会添加额外的功能。例如,允许在RC中调用函数与允许某个关系常量加表示一样。操作者ř RENAME TO ñ在RA)。

但是,RA运算符和RC运算符之间以及RA表达式和RC表达式之间存在对应关系:

如果:
•R-持有R(...)的
元组•S-持有S(...)的元组
然后:
•R JOIN S持有R(...)AND S(...)的元组
•R UNION S在R(...)或S(...)处
保存元组•R MINUS S在R(...)和NOT S(...)处 保存元组
•R PROJECT 列在以下位置保留元组对于某些要下降的列,R(...)
•R RESTRICT 条件 保存元组,其中R(...)AND 条件

RA表达式的值是满足相应RC表达式的元组。

如果要在每个运算符的基础上将RC表达式映射到RA表达式,则需要扩展的RA运算符:一个泛化UNION,另一个泛化为NOT。这些不是我们想在实现中实际使用的运算符-在某种意义上,返回的关系值不合要求地很大。但是,使用它们的每个RC表达式都可以机械地重新排列为仅使用基本RA运算符的正常形式。

因此:RA作为程序而RC是声明式是一个神话。每个RA运算符都有一个对应的RC运算符,每个RC运算符都有一个(可能是扩展的)对应的RA运算符,一个表达式的每个表达式(在基本和扩展意义上)都具有另一个表达式。它们是相同事物的两种表示法。通过解析或规范化执行,可以将任一表达式视为“过程式”,否则,可以将其视为“声明式”。神话试图捕获这样的想法,即RC表达式不像使用基本RA运算符的表达式那样逐个运算符。但是RC表达式确实使用基本运算符来标识其非显而易见的正常形式的RA表达式。这 逐个运算符,例如包含扩展运算符的RA表达式。

(由于单词的历史,神话可能会有所帮助。“现代代数”具有表达式,运算符可以取值并给出值,并且可以进行计算。“演算”又名分析(微分和积分)具有通过不可能描述值的表达式-计算无限的极限和总和。我们以其他方式进行计算,通常只计算近似值。)

(此外,具有讽刺意味的是:“谓词演算”被认为是“声明性地”指定事物,而不考虑如何以其他方式计算或估算事物。但是,此类表达式的标准语义/含义是通过遵循遍历表达式的算法来给出的树。因此它具有明显的“过程”解释。)


小智 3

关系代数处理更具体的集合表达式、连接操作和集合组合,而关系演算主要坚持与或关系以及存在量词 ( There exists an x such that [condition(x)]) 或通用For all x's, [condition(x)]量词 ( ) 。关系代数表达式在功能和特异性上类似于汇编语言,而关系微积分表达式在外观和功能上更接近高级编程语言。

纽约大学课堂上的演讲对我很有帮助。