mrg*_*mrg 7 rdbms relational-algebra relational-database tuple-relational-calculus domain-calculus
关系代数和关系演算之间的确切区别是什么?在大多数参考文献中,它将是
Relational algebra is procedural and calculus is non procedural.
那么,这些代表什么呢.但是,我们可以使用关系代数解决所有问题.那么为什么我们要使用关系演算.除了定义,用例子解释非常感谢.
去这个链接了解详情。 http://ecomputernotes.com/database-system/rdbms/relational-algebra-and-relational-calculus
[![2]](https://i.stack.imgur.com/VroOK.png)
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)]量词 ( ) 。关系代数表达式在功能和特异性上类似于汇编语言,而关系微积分表达式在外观和功能上更接近高级编程语言。
纽约大学课堂上的演讲对我很有帮助。