14

关系代数和关系微积分之间的确切区别是什么。在大多数参考中,它将是

Relational algebra is procedural and calculus is non procedural.

那么,这些代表什么。但是,我们可以使用关系代数解决所有问题。那么为什么我们会使用关系微积分。除定义外,非常感谢用示例进行解释。

4

4 回答 4

8

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 表达式,包括扩展运算符。

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

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

于 2015-09-29T10:06:31.540 回答
6

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

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

[2]

在此处输入图像描述

于 2015-09-29T06:54:19.273 回答
2

纽约大学课堂上的这个演讲对我很有帮助。我也只是在学习这个,所以我不能提供太多帮助,但我至少知道关系代数处理更具体的集合表达式、连接操作和集合组合,而关系微积分主要关注 AND-OR 关系以及存在量词(“存在一个 x 使得 [condition(x)])或通用量词(“对于所有 x,[condition(x)])量词。我认为关系代数表达式在功能和特异性上类似于汇编语言,而关系微积分表达式在外观和功能上更接近高级编程语言。希望这会有所帮助。

于 2015-09-29T07:41:18.937 回答
0

关系代数和关系微积分的区别

  1. 关系代数运算操纵一些关系并以查询的形式提供一些表达式,其中关系演算是基于表达式对形成的查询。

  2. RA 有连接、联合、交集、除法、差分、投影、选择等运算符,而 RC 有元组和面向域的表达式。

  3. RA 是过程语言,而 RC 是非过程查询系统。

  4. RA 和 RC 的表现力是等价的。这意味着任何可以用 RA 表示的查询都可以用 RC 中的公式表示。

  5. 任何 KC 公式都会在代数查询中翻译。

  6. RA 中的查询比 RC 更容易进行修改。

  7. RA形成了数学形式,没有特定的juer1语言RC也有数学形式,但只有一种查询语言QUEL。

  8. 关系代数比 RC 更容易操作和理解。

  9. RA 查询比 RC 更强大。

  10. RC 形成 WFF,而 RA 不形成任何公式。

  11. RA是一个程序。这意味着我们已经按顺序编写了一些条件。

  12. 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年的元组是什么,然后我们只需要提取书名列。

于 2015-10-01T05:27:32.737 回答