关系代数和关系微积分之间的确切区别是什么。在大多数参考中,它将是
Relational algebra is procedural and calculus is non procedural
.
那么,这些代表什么。但是,我们可以使用关系代数解决所有问题。那么为什么我们会使用关系微积分。除定义外,非常感谢用示例进行解释。
关系代数和关系微积分之间的确切区别是什么。在大多数参考中,它将是
Relational algebra is procedural and calculus is non procedural
.
那么,这些代表什么。但是,我们可以使用关系代数解决所有问题。那么为什么我们会使用关系微积分。除定义外,非常感谢用示例进行解释。
TL;DR:调用 RA(关系代数)运算符的查询和两个关系演算 (RC) TRC(元组 RC)和 DRC(域 RC)的查询是同一事物的不同语法:关系值或属性/条件关系值的元组必须满足。就像 SQL 一样(它们的混合)。与谓词演算一样,数学、逻辑、科学(包括计算机科学)和工程(包括软件工程)中的精确性语言。RA 作为程序性与 RC 作为声明性是一个神话。
关系包含使某些谓词--由属性参数化的语句模板--成为真正的命题--语句的元组。
/* tuples where employee PERSONNAME lives on STREET in CITY */
Employee
/* tuples where employee PERSONNAME works at COMPANY for $SALARY */
WorksFor
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))
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']
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
]
(教授了 RA 和 RC 的一些变体。例如,一些按顺序识别参数,而另一些按名称识别。有时会添加额外的功能。例如,允许在 RC 中调用函数就像允许某个关系常数加上RA 中的运算符R RENAME A TO N。)
但是,RA 运算符和 RC 运算符之间以及 RA 表达式和 RC 表达式之间存在对应关系:
如果:
• R - 保存元组,其中 R(...)
• S - 保存元组,其中 S(...)
则:
• R JOIN S 保存元组,其中 R(...) AND S(...)
• R UNION S 保存元组,其中 R(...) OR S(...)
• R MINUS S 保存元组,其中 R(...) AND 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 表达式,包括扩展运算符。
(由于单词的历史,这个神话可能会有所帮助。“现代代数”具有运算符取值和给出值的表达式,并且可以计算。“微积分”又名分析 - 微分和积分 - 具有通过不可能描述值的表达式- 计算无限极限和总和。我们以其他方式计算,通常只计算近似值。)
(此外,具有讽刺意味的是:“谓词演算”被认为是“以声明方式”指定事物,而不考虑如何以其他方式计算或估计它们。但是这种表达式的标准语义/含义是通过遵循一个遍历表达式的算法给出的树。所以它有一个明显的“程序”解释。)
去这个链接了解详情。 http://ecomputernotes.com/database-system/rdbms/relational-algebra-and-relational-calculus
[
纽约大学课堂上的这个演讲对我很有帮助。我也只是在学习这个,所以我不能提供太多帮助,但我至少知道关系代数处理更具体的集合表达式、连接操作和集合组合,而关系微积分主要关注 AND-OR 关系以及存在量词(“存在一个 x 使得 [condition(x)])或通用量词(“对于所有 x,[condition(x)])量词。我认为关系代数表达式在功能和特异性上类似于汇编语言,而关系微积分表达式在外观和功能上更接近高级编程语言。希望这会有所帮助。
关系代数和关系微积分的区别
关系代数运算操纵一些关系并以查询的形式提供一些表达式,其中关系演算是基于表达式对形成的查询。
RA 有连接、联合、交集、除法、差分、投影、选择等运算符,而 RC 有元组和面向域的表达式。
RA 是过程语言,而 RC 是非过程查询系统。
RA 和 RC 的表现力是等价的。这意味着任何可以用 RA 表示的查询都可以用 RC 中的公式表示。
任何 KC 公式都会在代数查询中翻译。
RA 中的查询比 RC 更容易进行修改。
RA形成了数学形式,没有特定的juer1语言RC也有数学形式,但只有一种查询语言QUEL。
关系代数比 RC 更容易操作和理解。
RA 查询比 RC 更强大。
RC 形成 WFF,而 RA 不形成任何公式。
RA是一个程序。这意味着我们已经按顺序编写了一些条件。
RC 是非程序性的。在这里,我们以任意顺序编写条件。
例子:-
库示例:-
Book is a relation it have a following attributes.
1. Book Name
2. Accession Number
3. Year of publication
问题:-
Find out the all book names published in the year 2000
关系代数:-
-------------------------------------------------------
| (σ (book) ) |
| ¶ (yr_pub=2000) |
| (Book name) |
------------------------------------------------------
关系演算:-
S = { t | ∃ u ∈ book (t[book name] = u[book name]) ∧ (u[yr_pub] = 2000 ) }
在这个关系演算中,我们可以在任何地方写下条件,如下所示。
S = { t | ∃ u ∈ book (u[yr_pub] = 2000 ) ∧ (t[book name] = u[book name]) }
但是在关系代数中,我们首先要找到出版年份是2000年的元组是什么,然后我们只需要提取书名列。