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

时间:2015-09-29 06:40:40

标签: relational-database rdbms relational-algebra tuple-relational-calculus domain-calculus

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

Relational algebra is procedural and calculus is non procedural

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

4 个答案:

答案 0 :(得分:5)

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

relation 包含使元素参数化的谓词 - 语句模板的元组 - 成为真正的命题 - 语句。

/* 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表达式为set-builder notation。它涉及一个带有关系变量/常量名称,属性名称和属性的谓词。价值观,谓词算子和量化名称(逻辑变量)。运算符是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和RCs原件的一些变体被教导。例如,一些按顺序识别参数,其他一些按名称识别。有时候会增加额外的功能。例如,允许在RC中进行函数调用就像允许一定的表达一样RA中的关系常量加运算符 R RENAME A TO N 。)

然而,RA运营商和RC运营商之间存在对应关系。在RA表达式和RC表达式之间:

如果:
 •R - 保持元组R(...)
 •S - 保持元组S(...)
然后:
 •R JOIN S保存元组,其中R(...)和S(...)
 •R UNION S保持元组R(...)或S(...)
 •R MINUS S保持元组R(...)AND NOT S(...)
 •R PROJECT 列保持保存元组,其中FOR SOME 列要删除,R(...)
 •R RESTRICT 条件保存元组,其中R(...)AND 条件

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

如果我们想要逐个运算符从RC表达式映射到RA表达式,那么我们需要扩展的RA运算符:一个概括UNION&一个对应于NOT。那些不是我们想要在实现中实际使用的运算符 - 返回的关系值在某种意义上是不可取的大。但是使用它们的每个RC表达式都可以机械地重新排列为仅使用基本RA运算符的正常形式。

所以:RA作为程序对象和RCs作为声明是一个神话。每个RA运算符都有一个相应的RC运算符,每个RC运算符都有一个(可能是扩展的)相应的RA运算符,并且每个运算符的每个表达式都具有(在基本和扩展的意义上)另一个的相应表达式。它们是同一事物的两个符号。任何一个的表达都可以作为"程序"通过执行它作为解析或规范化和"声明"否则执行它。这个神话试图捕捉到RC表达式不像运算符那样使用基本RA运算符的表达式。但RC表达式 使用基本运算符识别其非显而易见的正常形式的RA表达式。并且它运算符的运算符,就像包含扩展运算符的RA表达式一样。

(由于词语的历史,这个神话可能会有所帮助。"现代代数"表达式与操作员一起服用并给出值并且可以计算。&#34 ;微积分"又名分析 - 微分和积分 - 具有通过不可能计算无限极限和总和来描述值的表达式。我们以其他方式计算,通常只计算近似值。)

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

答案 1 :(得分:3)

答案 2 :(得分:2)

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

答案 3 :(得分:0)

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

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

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

  3. RA是程序性语言,其中RC是非程序性查询系统。

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

  5. 任何KC公式都在Algebric查询中翻译。

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

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

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

  9. RA查询比RC更强大。

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

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

  12. RC是非程序性的。在这里,我们以任何顺序编写条件。

  13. 实施例: -

    图书馆示例: -

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