1.关系演算之关系元组演算(行)
- 关系演算形式:举例:R∪S={r | r∈R
r∈S}
- 关系演算是以数理逻辑中的谓词演算为基础的
- 关系演算是描述关系运算的另一种思维方式
- SQL语言是继承了关系代数和关系演算各自的优点所形成的
- 按照谓词变量的不同,可分为关系元组演算和关系域演算
- 关系元组演算是以元组变量作为谓词变量的基本对象
- 关系域演算是以域变量作为谓词变量的基本对象
- 关系元组演算公式的基本形式:{ t | P(t) }
- 上式表示:所有谓词P为真的元组t的集合
- t是元组变量
- t∈r 表示元组t在关系r中
- t[A]表示元组t的分量,即t在属性A上的值
- P是与谓词逻辑相似的公式,P(t)表示以元组t为变量的公式
- P(t)可以如下递归地进行定义:
- 三种形式的原子公式:
- s ∈ R; s是R中的一个元组,例如:{s | s∈ student}
- s[A] θ c; 元组分量s[A]与常量c之间满足比较关系θ,比较运算符<,≤,=,<>,>,≥
- s[A] θ u[B]; s[A]与u[B]为元组分量,A和B分别是某些关系的属性,他们之间满足比较关系θ
- P(t)可以由运算符∧;∨;﹁;递归地构造
- 如果P是公式,那么﹁P也是公式
- 如果P1,P2是公式,则P1∧P2,P1∨P2也是公式
- 如果P(t)是公式,R是关系,则
(t∈R(P(t)) 和
(t∈R (P(t) )也是公式
- 需要时可加括弧
- 上式运算符的优先次序自高至低为:括弧;θ;
;
;﹁;∧;∨;
- 公式只限于以上形式
- 在元组演算公式构造过程中,如果需要,可以使用括号,通过括号改变运算地优先次序,即,括号内的运算优先计算
- 构造P(t)还有两个运算符:
(存在);
(任意)
- 如果P(t)是一个公式,则
(t∈R(P(t)) 也是公式
- 如果P(t)是一个公式,则
(t∈R (P(t) )也是公式
- 如果P(t)是一个公式,则
- 运算符
;
,又称为量词,前者称“存在量词”,后者称“全称量词”
- 而被
或
限定的元组变量t,或者说,元组变量t前又存在量词或全称量词,则该变量被称为“约束变量”,否则被称为“自由变量”
- 三种形式的原子公式:
- 元组演算的等价性变换:
- P(t)公式,如谓词演算一样,也有一系列演算的等价性
- 元组演算与关系代数对比应用的例子
- 将关系代数转化为元组演算:
2.关系演算之关系域演算(列)
- 基于关系域演算的QBE语言
- QBE的操作命令:
- Print或P.——显示输出操作
- Delete或D.——删除操作
- Insert或I.——插入操作
- Update或U.——更新操作
- QBE的查询条件——简单条件
- QBE查询条件可以直接在查询条件区书写,形式为θ参量
- θ可以是<,≤,=,<>,>,≥;如省略θ,则默认为=
- θ参量中的参量可以是常量,直接书写
- QBE不同属性上的条件可以写在同一行
- 条件θ参量中的参量可以是域变量,用任何一个值(不必是结果中的值)被称为示例元素,示例元素下划线上面的值不起作用,被当作域变量名称来对待,只用于占位或是连接条件。不带下划线的则是构成实际条件一部分的值。
- 用示例元素实现多个表的连接
- 应用训练:
3.关系演算之安全性
- 关系运算的安全性:不产生无限关系和无穷验证的运算被称为是安全的
- 关系代数是一种集合运算,是安全的(集合本身是有限的,有限元素集合的有限次运算依旧是有限的)
- 关系演算不一定是安全的
- 需要对关系施加约束条件,即任何公式都在一个集合范围内操作,而不是无限范围内操作,才能保证其安全性。
- 安全约束有限集合DOM(不太懂这一部分)
- DOM(ψ)是一个有限集合,其中的每个符号要么是ψ中明显出现的符号,要么是出现在ψ中的某个关系R的某元组的分量。
- DOM主要用于约束ψ中的一些谓词的计算范围,它不必是最小集合。
- 安全演算表达式:
4.关于三种关系演算的一些观点
- 关系运算有三种:关系代数、关系元组演算和关系域演算
- 三种关系运算都是抽象的数学运算,体现了三种不同的思维
- 关系代数——以集合为对象的操作思维,由集合导集合的变换
- 元组演算——以元组为对象的操作思维,取出关系的每一个元组进行验证,有一个元组变量则可能需要一个循环,多个元组变量则需要多个循环
- 域演算——以域变量为对象的操作思维,取出域的每一个变量进行验证看其是否满足条件
- 三种运算之间是等价的
- 关系代数与安全的元组演算表达式与安全的域演算表达式是等价的。即一种形式的表达式可以被等价地转换为另一种形式
- 三种关系运算都可说是非过程性的:
- 相比之下:域演算的非过程性最好,元组演算次之,关系代数最差
- 三种关系运算虽是抽象的,但却是衡量数据库语言完备性的基础
- 一个数据库语言如果能够等价地实现这三种关系运算的操作,则说该语言是完备的
- 目前多数数据库语言都能实现这三种运算的操作,在此基础上还增加了许多其他操作,如赋值操作、聚集操作等
- 数据库语言可以基于这三种抽象运算来设计: