关系演算属于了解内容 不需要重点掌握
基本内容
1. 关系演算之关系元组演算
2. 关系演算之关系域演算
3. 关系演算之安全性
4. 关于三种关系运算的一些观点
主要是元组演算和域演算
关系元组演算公式的定义方法是:递归 评价:递归是一种定义语言的好方法
存在量词和全称量词是我们学习元组演算的关键之所在
公式记起来很简单,但是如何运用公式来表达查询的思维训练是不可缺少的
我们知道:关系代数是基于集合、元组演算和域演算是基于逻辑,他们共同构成了数据库查询语言SQL的基础
元组演算是以元组为操作对象、单位 上面的r就代表元组
关系演算是以谓词变量为基础的 也就是上面的操作对象 也就是上面的r
按照操作对象不同我们可以把关系演算分为两种类型 元组演算和域演算(谓词变量分辨是元组和域)
SQL语言是继承了关系代数和关系演算的优点形成的
如何递归的定义呢?
首先我们要知道 P(t)的原子公式有三个
第一个表示元组s属于关系R当中
第二个表示元组s在A属性下的分量和一个常量的比较运算
第三个表示元组s在属性A下的分量和元组u在B属性下的分量的比较运算
还有几个要了解的
第一个存在元组t属于R使得P(t)成立,第二个对于R中的任意一个元组t都使得P(t)成立。
需要的时候可以加括号 上述运算符的优先次序分别是:
原子公式及与、或、非之理解与运用(优先级很重要)
存在量词和全称量词的运用
存在量词
对应关系代数的写法
等价变换:
元组演算的等价性变换
四个最复杂的例子
全都学过
全没学过
至少有一学过
至少有一没学过
用元组演算实现关系代数
元组演算公式总结
关系域演算
域演算是以域变量为变量的。
域变量组成一个元组,看看是否满足公式p
关系域演算的构造示例
关系域演算和关系元组演算的区别
元组演算是以元组为单位,然后找到元组的分量进行谓词判断
域演算是以域为单位,然后判断与组成的元组是否存在或者满足谓词判断,是非过程化的
元组演算和域演算是可以等价转化的
什么是示例查询?
基于域演算的QBE语言
query by example:按照示例查询
是很多数据库管理系统为一般用户提供表达查询的语言
1975年就提出了,1978年就被IBM公司实现了
特点
基于屏幕表格的查询语言,不需要书写复杂的查询公式
只要将条件写在表格里面即可
评价:
是一种高度为过程化的查询语言,特别适合 终端用户的使用(这一点和关系代数不同,关系代数体现了明显的先后顺序)。
表格有几个区域如下:
关系名区域:书写 想要查询的关系的名称
属性名区域:显示 对应关系名区域书写关系的 所有属性
操作命令区域:书写 查询操作的命令
查询条件区域:书写查询操作的条件
QBE的操作命令
例如:向student表中插入两个元组
我们在关系名区域写上Student之后属性名区域会显示改关系的属性
然后在操作命令区域写上QBE的操作命令
最后在该命令后填写元组的各个分量值
再例如:将student表中的这两个元组删除掉
很简单
那么 我们如何在示例查询中 表示简单的条件?
稍微复杂一点的:
不同属性的条件可以写在同一行(表示这两个不同的条件之间是一种与操作)
例如:找到所有年龄小于17岁的女同学
注意:如果是等于的话,那么这个=号是可以省略的
写成域演算公式:
那复杂一点的怎么书写呢?
QBE引入了一个示例元素的概念
例如:找到小于17岁的所有女同学的姓名
示例元素不是某一个具体的值而是起到一个占位的作用
解析:加上下划线就变成是实例元素了,就不再是条件,可以是域里面的任意值,效果是一样的。
我们可以使用示例元素起到一个连接的作用,多个条件之间的组合的作用
用示例元素实现‘与’运算和‘或’运算
用两个不同的示例元素 表示或运算
例如:找出所有年龄小于17岁 或者 大于20岁的学生姓名
用两个相同的示例元素 表示与运算
例如:找出所有年龄 大于17岁并且小于等于20岁的同学姓名
也可以将 与或非 条件写在 操作命令区
例如:(年龄<17并且是男的)或者(年龄大于20并且是女的)
如何用示例元素实现多个表之间的连接
当检索多个表的时候可以 利用同一的连接条件 使用相同的示例元素 来实现多个表之间的连接
例如:李明老师教过的所有学生
当不同的表 使用相同的示例元素的时候 表示 这两个表的S#相等 起到自然连接的 作用
QBE应用训练
例如:查询计算机系年龄大于19岁的男同学的姓名
例如:查询计算机系 或者 年龄大于19岁 或者 是男同学的姓名
例如:查询既选修了001号课程 又选修了002号课程的学生 的学号
再例如:找出比男同学张三 年龄大 的 所有男同学的姓名
例如:将张三同学的年龄更新为19岁
再例如:将每位同学的年龄增加1岁
例如:找出成绩不及格同学的姓名 及 不及格的课程和分数
用QBE也可以实现关系代数的操作
关系演算的安全性
关系运算安全性:不产生 无线关系 和 无穷验证 的运算 是安全的
集合本身是有限的,有限元素集合的有限次运算还是有限的
我们知道关系代数是基于集合的运算,所以关系代数是安全的,但是关系演算可能不是安全的 。
如何保证关系演算的安全性?
需要我们加上一些约束条件:即任何公式都在一个集合范围内 操作,而不是无限范围内操作,才能保证其安全性
安全约束有限集合DOM
安全元组运算表达式
满足三个条件
同样也有安全域演算表达式
关于关系运算的一些观点
基于元组演算的语言
回顾