关系运算关系演算

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2.4 关系运算(二)——关系演算

关系代数是将整个关系看作变元,并以其作为基本运算单位,同时以集合方法为关系运算的理论基础。如果将组成关系的基本成分例如元组或者属性域看作变量,以其作为基本运算单位,同时以数理逻辑中谓词演算为相应关系演算的理论基础,就得到了另外一种形式的关系数据语言——关系演算。

关系演算基于谓词演算。在谓词演算中,如果谓词中的变元是关系中的元组,则得到所谓元组关系演算;如果谓词中的变元是关系中的属性域,则得到所谓域关系演算。这样,关系演算就分为元组关系演算和域关系演算两类。

在 2.4节和2.5节,均以本章 2.3.4节中的关系数据库{S,C,SC}为背景举例。这里S (S#,Sn,Sex,Sa,Sd);C (C#,Cn,P#,Tn);SC (S#,C#,G),其中各个属性的含义见2.3.4节。

2.4.1 元组关系演算

如果在一阶谓词演算表达式中,变量是以元组为演算单位,就称其为元组关系演算(Tuple Relation Calculus),其中元组变量表示关系中的元组,变量取值范围是整个关系。

1. 关系的元组演算表示

(1) 关系与谓词的对应

为了得到关系操作的元组关系演算表达式,需要考虑关系与谓词的联系。

z由关系R确定的谓词P

在数理逻辑中我们知道,关系可用谓词表示,n元关系可以由n元谓词表示。

设有关系R,它有元组(r1,r2,…,r m),定义关系R对应如下一个谓词

P (x1,x2, …,x n)。

当t =(r1,r2, …,r m)属于R时,t为P的成真的真值指派,而其他不在R中的任意元组t则是P 的成假指派。即是说,由关系R定义一个谓词P具有如下性质:

P(t) = T (当t在R中);

P(t) = F (当t不在R中)。

z由谓词P表示关系R

由于关系代数中R是元组集合,一般而言,集合是可以用满足它的某种特殊性质来刻画与表示。如果谓词P表述了关系R中元组的本质特性,就可以将关系R写为:

R={t | P(t)}

这个公式就建立了关系(元组集合)的谓词表示,称之为关系演算表达式。

(2) 元组关系演算表达式

元组关系演算表达式的严格数学描述是由“归纳定义”方式完成的。按照通常的思路,元组演算表达式是由“关系演算公式”组成;“关系演算公式”是由“原子公式”组成。

①原子公式

下述三类称为元组演算原子公式,简称原子公式:

z谓词R(t)是原子公式。

z u(i)θv(j)是原子公式。

z u(i)θa是原子公式。

其中,t =(r1,r2,…,r m)是P的成真指派;u(i)表示元组u的第i个分量,v(j)表示元组v的第j 个分量;a是常量,u(i)θa表示u的第i个分量与常量a有关系θ。

② 关系演算公式

利用原子公式可以递归定义关系演算公式:

z 原子公式是公式。

z 如果φ1,φ2是公式,则φ1∧φ2,φ1∨φ2,φ1→φ2和¬φ1均是公式。

z

如果φ是公式,r 是φ中自由变元,则∃r(φ),∀r(φ)是公式。

z 所有公式由且仅由上述三种方式经过有限次操作生成。

在公式中,各种运算的优先次序规定如下:

z 比较运算符:<、>、≤、≥、=、≠。 z

量词:、∀。

∃z 否定词:¬。

z 合取、析取、蕴含运算符:∧、∨、→。

③ 关系演算表达式

有了公式φ的概念,以公式φ作为特性就构成一个有若干元组组成的集合,即关系R ,这种形式的元组集合就称其为关系演算表达式。关系演算表达式的一般形式为: {t | φ(t)}

其中,φ(t)为公式,t 为φ中出现的自由变元。关系演算表达式也简称为关系表达式或者表达式。

2. 关系操作的元组演算表示

关系操作由5种基本操作,它们在关系代数中分别对应5种基本运算,这5种基本运算可以用一阶谓词演算中的公式表示。

设有关系R 、S ,其谓词表示为R(t)和S(t),此时有

z R S={t | R(t)S(t)};

∪∨z

R – S = (t | R(t)¬S(t)); ∧z

σF (R)= {t | R(t)F} ,其中F 是一个谓词公式; ∧z

(k)ui1,ui2,uik (R)={t |(u)R(u)∏∃…t(1)=u(i1)t(2)=u(i2)t(k)=u(ik)}∧∧∧∧

其中t (k)所表示的元组有k 个分量,而t(i)表示t 的第i 个分量,u(j)表示u 的第j 个分量。

(r+s)R S={t |u v(R(u)S(v)t(1)=u(i1)t(2)=u(i2)

t(r)=u(ir)t(r+1)=v(j1)t(r+2)=v(j2) t(r+s)=v(js))}

×∃∃∧∧∧∧∧∧∧∧∧

例2-20 查询计算机科学系(CS)全体学生

S cs ={t | S(t)∧t[5]= 'CS' }

例2-21 查询年龄大于20岁的学生姓名:

S 20={t | S(t)∧t[4]<20 }

例2-22 查询学生姓名和所在系:

S 1={t (2)| (∃u)(S(u)∧t[1]=u[2]∧t[1]=u[5] )

2.4.2 域关系演算

1. 关系的域演算表示

域关系演算(Domain Relation Calculus)简称为域演算,它是关系演算的另外一种形式。域关系和元组关系演算十分类似,这是因为它们都建立在谓词演算之上;两者又有区别,这

是因为有两点不同:其一是谓词变元的不同,元组演算以元组为变元,域演算以元组的分量即属性域为变元,而在实际上,人们就将关系的属性名视为域变元;其二是元组变元的变化范围为整个关系,而域变元的变化范围是某个属性域。域演算表达式的一般形式为:

{t 1,t 2,…,t k | P(t 1,t 2,…,t k )}

其中,t 1,t 2,…,t k 是域变量,P(t 1,t 2,…,t k )是域演算表达式。

为了揭示域演算表达式的语义,我们同样需要进行递归定义。

(1) 原子公式

下述三类称为域演算原子公式,简称原子公式:

z 如果R(t 1,t 2,…,t k )表示命题“以t 1,t 2,…,t k 为分量的元组在关系R 之中”,则R(t 1,t 2,…,t k )

是原子公式,其中,R 是k 元关系,t i 是t 的第i 个分量;

z t i θC 或者C θt i 是原子公式,其中t i 是元组变量的第i 个分量,C 是常量,θ是算数比较

符;

z t i θ u j 是原子公式,其中,t i 表示元组变量t 的第i 个分量,u j 表示元组变量u 的第j 个分

量,它们之间满足运算θ。

例如 t 1=>u 4表示t 的第一个分量大于等于u 的第四个分量。

(2) 域演算公式

域演算公式(简称为公式)可以递归定义如下:

z 原子公式是公式。

z 如果φ1,φ2是公式,则φ1∧φ2,φ1∨φ2,φ1→φ2和¬φ1均是公式。

z

如果φ1是公式,∃t i (φl ),∀t i (φl )是公式。

z 所有公式由且仅由上述三种方式经过有限次操作生成。

例如φ(x 1,x 2,x 3,x 4,x 5)=S(x 1,x 2,x 3,x 4,x 5)∧(x 5>21)∨¬x 4='M'是一个域演算公式。

域演算公式φ中变量的自由出现与约束出现、公式中自由变量x 的型T(x,φ)以及域演算合法公式、域常量带入公式的规则和公式的解释规则等均与元组演算类似。下面举例说明。

例2-23 设φ=z[Sex](S(x ∃1 x 2 z x 4 22))∧¬z='M',则x 1,x 2,x 4在φ中为自由变量,x 3为约束变量。

例2-24 设φ=x ∃2[Sn ,Sex] y ∀1(C#)(S(x 1,x 2,x 3,x 4,x 5)∧x 5

例2-25 查询所有女生的S#、Sn ,Sex 、Sa 和Sd 。

{x 1[S#]x 2[Sn]x 3[Sex]x 4[Sa]x 5[Sd] | XS(x 1,x 2,x 3,x 4,x 5) ∧x 3='F'}

例2-26 查询所有男生的S#、Sa 。

{x 1[S#]x 2[Sa] | ∃y 1y 2y 3y 4y 5(XS(y 1,y 2,y 3,y 4,y 5))∧x 3='M' ∧y 1=x 1 y ∧4=x 2}

例2-27 查询所有年龄小于20岁的男生的S#、C#和G 。

{x 1[S#]x 2[C#]x 3[G] |y ∃1y 2y 3y 4y 5(XS(y 1,y 2,y 3,y 4,y 5))∧x 3='M'∧y 4<20z ∧∃1z 2z 3 (XSC(z 1z 2z 3)z ∧1=y 1 z ∧2=x 2 z ∧3=x 3)y 2=x 1}

2.4.3 关系运算的安全性

1. 安全性问题的提出

对于任何一个计算机系统来说,它都要受到两个“有限”的制约:

z 系统的存储容量是有限的,它不可能存储无限关系。这里所说的“无限关系”是指

元组个数为无限的关系。

相关文档
最新文档