首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关系代数与关系演算的区别

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

Stack Overflow用户
提问于 2015-09-29 14:40:40
回答 4查看 28K关注 0票数 14

关系代数和关系微积分的确切区别是什么?在大多数引用中,它将是

Relational algebra is procedural and calculus is non procedural

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

EN

回答 4

Stack Overflow用户

发布于 2015-09-29 18:06:32

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

关系包含的元组使一些谓词--由属性参数化的语句模板--成为一个真正的命题--语句。

代码语言:javascript
运行
复制
/* 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等。它表示通过计算表达式获得的关系值。但它也是价值要满足的要求。

代码语言:javascript
运行
复制
/* 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具有作为属性的量化名称。对于每个属性只有一个参数的语句,我们使用一个简写:

代码语言:javascript
运行
复制
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具有元组形式的量化名称。我们在名称上加点,以获得与其中的属性名称相关联的值。(类似于编程语言记录的字段。)我们对只有一个参数(一个元组)的语句使用简写:

代码语言:javascript
运行
复制
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将A重命名为N一样具有表现力。)

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

如果:

·R --保存元组,其中R(...)

·S --保存元组,其中S(...)

然后:

·R JOIN S包含元组,其中R(...)和S(...)

·R UNION S包含元组,其中R(...)或S(...)

·R减去S保存元组,其中R(...)而不是S(...)

·要保留的R项目列包含要删除的某些列的元组,R(...)

·R限制条件保存元组,其中R(...)AND条件

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

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

所以: RA是过程性的,RCs是声明性的,这是一个神话。每个RA运算符具有对应的RC运算符,每个RC运算符具有(可能扩展的)对应的RA运算符,并且一个运算符的每个表达式具有另一个运算符的对应表达式(在基本和扩展意义上)。它们是同一事物的两个符号。任何一个的表达式都可以被认为是“过程性”的,通过将其作为解析或规范化来执行,而通过以其他方式执行来作为“声明性”。这个神话是试图捕捉RC表达式不像使用基本RA运算符的表达式那样逐个运算符的想法。但RC表达式确实使用基本运算符识别其非明显范式的RA表达式。它是逐个运算符的,就像包含扩展运算符的RA表达式一样。

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

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

票数 8
EN

Stack Overflow用户

发布于 2015-09-29 14:54:19

有关详细信息,请转到此链接。http://ecomputernotes.com/database-system/rdbms/relational-algebra-and-relational-calculus

[

票数 6
EN

Stack Overflow用户

发布于 2015-09-29 15:41:19

纽约大学一个班级的This演讲对我很有帮助。我也只是在学习这一点,所以我不能提供太多的帮助,但我至少知道关系代数处理更具体的集合表达式,连接操作和集合组合,而关系演算主要坚持AND-OR关系和存在(“存在一个x这样的条件(X))或通用的(”对于所有x的,条件(X))量词。我设想关系代数表达式在功能和特性上类似于汇编语言,而关系演算表达式在外观和功能上更接近于高级编程语言。希望这能对你有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32837278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档