关系演算

来源:互联网 发布:淘宝潮男衣服店铺推荐 编辑:程序博客网 时间:2024/04/24 11:17

关系演算

把数理逻辑的谓词演算引入到关系运算中,就可得到以关系演算为基础的运算。关系演算又可分为元组关系演算和域关系演算,前者以元组为变量,后者以属性(域)为变量。

在元组关系演算(Tuple Relational Calculus)中,元组关系演算表达式简称为元组表达式,其一般形式为

                   { t | P(t)}

其中,t是元组变量,表示一个元数固定的元组;P是公式,在数理逻辑中也称为谓词,也就是计算机语言中的条件表达式。 { t | P(t)}表示满足公式P的所有元组t的集合。

在元组表达式中,公式由原子公式组成。

原子公式(Atoms)有下列三种形式:

  ① R(s)。 其中R是关系名,s是元组变量。s是R的一个元组。 

  ② 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) 也都是公式。 

   ④ 公式中各种运算符的优先级从高到低依次为:θ,∃和,┐,∧和∨,=>。在公式外还可以加括号,以改变上述优先顺序。 

   ⑤ 公式只能由上述四种形式构成,除此之外构成的都不是公式。 

 

R1 = { t | S ( t ) ∧t[1]>2 }

R2 = { t | R ( t ) ∧┐S ( t )}

R3 = { t | ( ∃u )(S ( t ) ∧R ( u ) ∧t[3]<u[2])}

R4 = { t | ( ∀u )(R ( t ) ∧ S ( u ) ∧t[3]>u[1])}

R5={t|(∃u)(∀v)(R(u)∧S(v)∧u[1]>v[2]∧t[1]=u[2]∧t[2]=v[3]∧t[3]=u[1])}

在元组关系演算的公式中,有下列三个等价的转换规则:

 ①  P1∧P2等价于┐(┐P1∨┐P2);

       P1∨P2等价于┐(┐P1∧┐P2)。

 ②(∀s)(P1(s))等价于┐(∃s)(┐P1(s)); 

     (∃s)(P1(s))等价于┐(∀s)(┐P1(s))。

 ③  P1=>P2等价于 ┐P1∨P2。

关系代数表达式到元组表达式的转换

例2.17   R和S都是3元关系。五个基本操作的等价元组关系演算如下:

 1. R∪S可用{ t | R(t)∨S(t)}表示;

 2. R-S可用{ t | R(t)∧┐S(t)} 表示; 

 3.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])} 表示。

4. 设投影操作是π2,3(R),那么元组表达式可写成:

{ t |(∃u)(R(u)∧t[l]=u[2]∧t[2]=u[3])}

 5. σF(R)可用{ t |R(t)∧F'}表示, F'是F的等价表示形式。譬如   σ2='d'(R)可写成{ t |R(t)∧t[2]='d'}。 

例 设教学数据库中有三个关系:

学生关系   S(S#,SNAME,AGE,SEX)

选课关系 SC(S#,C#,GRADE)

课程关系   C(C#,CNAME,TEACHER)

(1)检索学习课程号为C2的学生学号与成绩。

πS#,GRADE(σC#='C2'(SC)) 或π1,3(σ2='C2'(SC)) 

{t|(∃u)(SC(u)∧u[2]='C2'∧t[l]=u[1]∧t[2]=u[3])}

(2) 检索学习课程号为C2的学生学号与姓名。

πS#,SNAME(σC#='C2'(S⋈SC))

{t|(∃u)(∃v)(S(u)∧SC(v)∧v[2]='C2'∧u[l]=v[1]∧t[l]=u[1]∧t[2]=u[2])}

(3) 检索选修课程名为MATHS的学生学号与姓名。

πS#,SNAME(σCNAME='MATHS'(S⋈SC⋈C))

{t|(∃u)(∃v)(∃w)(S(u)∧ SC(v)∧C(w)∧w[2]='MATHS'             ∧u[l]=v[1]∧v[2]=w[1]∧t[l]=u[1]∧t[2]=u[2])}

(4) 检索选修课程号为C2或C4的学生学号。

   πS# (σC#='C2'∨C#='C4'(SC)) 

{t|(∃u)(SC(u)∧(u[2]='C2'∨u[2]='C4')∧t[1]=u[1]}

(5) 检索至少选修课程号为C2和C4的学生学号。

π1 (σ1=4∧2='C2'∧5='C4'(SC×SC)) 

{t| (∃u)(∃v)(SC(u)∧SC(v)∧u[2]='C2'∧v[2]='C4'∧u[1]=v[1]∧t[1]=u[1]}

0 0
原创粉丝点击