把数理逻辑的谓词演算引入到关系运算中,就可得到以关系演算为基础的运算。关系演算又可分为元组关系演算和域关系演算,前者以元组为变量,后者以属性(域)为变量。
元组关系演算
在元组关系演算(Tuple Relational Calculus)中,元组关系演算表达式简称为元组表达式,其一般形式为 { t | P(t)},其中,t是元组变量,表示一个元数固定的元组;P是公式,在数理逻辑中也称为谓词,也就是计算机语言中的条件表达式。{ t | P(t)}表示满足公式P的所有元组t的集合。
在元组表达式中,公式由原子公式组成。
原子公式(Atoms)有下列三种形式:
① R(s)
② s[i]θu[j]
③ s[i]θa或aθu[j]。
在定义关系演算操作时,要用到“自由”(Free)和“约束”(Bound)变量概念。在一个公式中,如果元组变量未用存在量词?或全称量词?符号定义,那么称为自由元组变量,否则称为约束元组变量。
公式(Formulas)的递归定义如下:
① 每个原子是一个公式。其中的元组变量是自由变量。
② 如果P1和P2是公式,那么┐P1、P1∨P2、P1∧P2和P1?P2也都是公式。
③ 如果P1是公式,那么(?s)(P1)和(?s)(P1)也都是公式。
④ 公式中各种运算符的优先级从高到低依次为:θ,?和?,┐,∧和∨,?。在公式外还可以加括号,以改变上述优先顺序。
⑤ 公式只能由上述四种形式构成,除此之外构成的都不是公式。
在元组关系演算的公式中,有下列三个等价的转换规则:
① P1∧P2等价于┐(┐P1∨┐P2);
P1∨P2等价于┐(┐P1∧┐P2)。
②(?s)(P1(s))等价于┐(?s)(┐P1(s));
(?s)(P1(s))等价于┐(?s)(┐P1(s))。
③1?P2等价于 ┐P1∨P2。
注:该部分有些字符html显示不了,请下载原ppt文档,下载地址:
数据库学习教程(二)-关系模型和关系运算理论关系代数表达式到元组表达式的转换例2.17
R∪S可用{ t | R(t)∨S(t)}表示;
R-S可用{ t | R(t)∧┐S(t)} 表示;
R×S可用{ t |(?u)(?v)(R(u)∧S(V) ∧t[1]=u[1] ∧t[2]=u[2]∧t[3]=u[3]∧t[4]=v[1] ∧t[5]=v[2] ∧t[6]=v[3])} 表示。
设投影操作是π2,3(R),那么元组表达式可写成:
{ t |(?u)(R(u)∧t[l]=u[2]∧t[2]=u[3])}
σF(R)可用{ t |R(t)∧F'}表示,F'是F的等价表示形式。譬如σ2='d'(R)可写成{ t |(R(t)∧t[2]='d')。
域关系演算
原子公式有两种形式:
⑴ R(x1…xk);
⑵ xθy。
公式中也可使用∧、∨、┐和?等逻辑运算符,(?x)和(?x),但变量x是域变量,不是元组变量。
自由域变量、约束域变量等概念和元组演算中一样。
域演算表达式是形为{t1…tk∣P(t1,…,tk)}的表达式,其中P(t1,…,tk)是关于自由域变量t1,…,tk 的公式。
元组表达式到域表达式的转换我们可以很容易地把元组表达式转换成域表达式,转换规则如下:
⑴ 对于k元的元组变量t,可引入k个域变量t1…tk,在公式中t用t1…tk替换,元组分量t[i]用ti替换。
⑵ 对于每个量词(?u)或(?u),若u是m元的元组变量,则引入m个新的域变量u1…um。在量词的辖域内,u用u1…um替换,u[i]用ui替换,(?u)用(?u1)…(?um)替换,(?u)用(?u1)…(?um)替换。
关系运算的安全约束和等价性
在数据库技术中,不产生无限关系和无穷验证的运算称为安全运算,相应的表达式称为安全表达式,所采取的措施称为安全约束。
并、差、笛尔卡积、投影和选择是关系代数最基本的操作,并构成了关系代数运算的最小完备集。已经证明,在这个基础上,关系代数、安全的元组关系演算、安全的域关系演算在关系的表达和操作能力上是完全等价的。
关系代数表达式的优化在关系代数表达式中需要指出若干关系的操作步骤。那么,系统应该以什么样的操作顺序,才能做到既省时间,又省空间,而且效率也比较高呢?这个问题称为查询优化问题。
在关系代数运算中,笛卡儿积和联接运算是最费时间的。
例2.23 设关系R和S都是二元关系,属性名分别为A,B和C,D。设有一个查询可用关系代数表达式表示:
E1=πA(σB=C∧D='99'(R×S))
也可以把选择条件D=‘99’移到笛卡儿积中的关系S前面:
E2=πA(σB=C(R×σD='99'(S))
还可以把选择条件B=C与笛卡儿积结合成等值联接形式:
E3=πA(R ? σD=‘99’(S))
B=C
这三个关系代数表达式是等价的,但执行的效率大不一样。显然,求El,E2,E3的大部分时间是花在联接操作上的。
关系代数表达式的优化算法在关系代数表达式中,最花费时间和空间的运算是笛卡尔积和联接操作,为此,引出三条启发式规则,用于对表达式进行转换,以减少中间关系的大小。
·尽可能早地执行选择操作;
·尽可能早地执行投影操作;
·避免直接做笛卡尔积,把笛卡尔积操作之前和之后的一连串选择和投影合并起来一起做。u覻
TNt^劅0<