数据库模型与语言-5-关系模型之关系演算
基本内容:
- 关系演算之关系元组演算
- 关系演算之关系域演算
- 关系演算之安全性
- 关于三种关系运算的一些观点
重点与难点:
- 关系元组演算公式的递归定义;关系域演算公式的递归定义
- 关系元组演算公式:与 ∧、或 ∨、非 ﹁、存在量词 ∃、全称量词 ∀
- 用关系元组演算公式表达查询的思维训练
- 用QBE语言表达查询的思维训练
- 关系元组演算、域演算和关系代数在表达查询方面的思维差异
一、关系元组演算
(1)概述
前面出现过关系演算形式
如,并运算定义中: R ∪ S= {r|r∈R ∨ r∈S}
再如,差运算定义中:R-S= {r|r∈R ∧ r∉S}
- 关系演算是以数理逻辑中的谓词演算为基础的
- 关系演算是描述关系运算的另一种思维方式
- SQL语言是继承了关系代数和关系演算各自的优点所形成的
- 按照谓词变量的不同,可分为关系元组演算和关系域演算
- 关系元组演算是以元组变量作为谓词变量的基本对象
- 关系域演算是以域变量作为谓词变量的基本对象
(2)关系元组演算公式的形式
关系元组演算公式的基本形式: { t | P(t) }
上式表示:所有使谓词 P 为真的元组 t 的集合
- t 是元组变量
- t ∈ r 表示元组t在关系r中
- t [A]表示元组t的分量,即t在属性A上的值
- P 是与谓词逻辑相似的公式, P(t)表示以元组 t 为变量的公式
P(t)可以如下递归地进行定义
(3)关系元组演算公式的完整定义
关系元组演算公式的基本形式:{ t | P(t) }
其中公式P(t)可以递归地进行构造:
- 三种形式的原子公式是公式
- s ∈ R
- s[A] θ c (θ代表比较运算;c代表常量)
- s[A] θ u[B]
- 如果P是公式,那么﹁P也是公式
- 如果P1 , P2是公式,则P1 ∧ P2 , P1 ∨ P2 也是公式
- 如果P(t)是公式,R是关系,则 ∃(t∈R)(P(t))和 ∀(t∈R)(P(t)) 也是公式
- 需要时可加括弧
- 上述运算符的优先次序自高至低为:括弧;θ ;∃ ;∀ ;﹁ ;∧ ;∨ ;
- 公式只限于以上形式
二、关系元组演算公式 之 原子公式及与、或、非之理解与运用
(1)元组演算公式之原子公式
关系元组演算公式的基本形式:{ t | P(t) }
P(t)可以是如下三种形式之一的原子公式
- t∈ R t是关系R中的一个元组,例如:{ t | t ∈ Student }
- s[A] θ c 元组分量s[A]与常量 c 之间满足比较关系θ.
θ:比较运算符<, <=, =, <>, >, >=
例如:{t| t∈R ∧ t[Sage]<=19 ∧ t[Sname]=‘张三’}
s[A] θ u[B]
s[A] 与 u[B] 为元组分量,A和B分别是某些关系的属性,他们之间满足
比较关系θ.
例如:{ t | t∈Student ∧ ∃ (u ∈Student) ( t [Sage] > u [Sage] ) }
“检索出年龄不是最小的所有同学”
(2)元组演算公式之与、或、非运算符
P(t)可以由公式加运算符 ∧ (与)、 ∨ (或)、 ﹁(非)递归地构造
- 如果F是一个公式,则 ﹁F 也是公式
- 如果F1、F2是公式,则F1 ∧ F2, F1 ∨ F2也是公式
例如:检索出年龄小于20岁并且是男同学的所有学生。 { t | tStudent t[Sage] < 20 t[Ssex] = ‘男’ } 再例如:检索出年龄小于20岁或者03系的所有男学生。 { t | tStudent ( t[Sage] < 20 t[D#] = ‘03’ ) t[Ssex] = ‘男’ } 在元组演算公式构造过程中,如果需要,可以使用括号,通过括号改变运 算的优先次序,即:括号内的运算优先计算
参考资料:
哈尔滨工业大学 战德臣 课件
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn