关系代数和关系微积分的确切区别是什么?在大多数引用中,它将是
Relational algebra is procedural and calculus is non procedural
。
那么,这些代表的是什么。但是,我们可以使用关系代数来解决所有问题。那么为什么我们要使用关系演算。除了定义,用例子来解释是非常有价值的。
发布于 2015-09-29 18:06:32
TL;DR:查询调用RA (关系代数)运算符&两个关系演算( RC) TRC (元组RC)和DRC (域RC)的查询对于同一事物是不同的语法:关系值或关系值的元组必须满足的属性/条件。SQL也是(它们的混合体)。谓词演算是数学、逻辑、科学(包括计算机科学)和工程(包括软件工程)中的精确语言。而RA是过程性的,RCs是声明性的,这是一个神话。
关系包含的元组使一些谓词--由属性参数化的语句模板--成为一个真正的命题--语句。
/* 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将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表达式一样。
(由于这些词的历史,这个神话可能会有所帮助。“现代代数”有运算符取值和赋值的表达式,可以计算。“微积分”又称分析--微分与积分--具有通过不可能计算的无限极限与求和来描述数值的表达式。我们以其他方式计算,通常只计算近似值。)
(另外,具有讽刺意味的是:“谓词演算”被认为是“声明性地”指定事物,而不考虑它们是如何计算或估计的。但是这种表达式的标准语义/含义是通过遍历表达式树的算法给出的。因此,它有一个明显的“程序性”解释。)
发布于 2015-09-29 14:54:19
有关详细信息,请转到此链接。http://ecomputernotes.com/database-system/rdbms/relational-algebra-and-relational-calculus
[
发布于 2015-09-29 15:41:19
纽约大学一个班级的This演讲对我很有帮助。我也只是在学习这一点,所以我不能提供太多的帮助,但我至少知道关系代数处理更具体的集合表达式,连接操作和集合组合,而关系演算主要坚持AND-OR关系和存在(“存在一个x这样的条件(X))或通用的(”对于所有x的,条件(X))量词。我设想关系代数表达式在功能和特性上类似于汇编语言,而关系演算表达式在外观和功能上更接近于高级编程语言。希望这能对你有所帮助。
https://stackoverflow.com/questions/32837278
复制相似问题