目录
1. 关系操作
(1)基本关系操作
① 常用的关系操作
• 查询:选择、投影、连接、除、并、差等,其中选择、投影、并、差、笛卡尔积是5钟基本 操作
• 数据更新:插入、删除、修改
• 查询的表达能力是是其中最主要的部分
② 关系操作的特点
• 集合操作方式:操作的对象和结果都是集合,一次一集合的方式
(2)关系代数语言
① 关系代数语言
• 用对关系的运算来表达查询要求。代表:ISBL
② 关系演算语言
● 用谓词来表达查询要求
• 元组关系演算语言:谓词变元的基本对象是元组变量
代表:APLHA,QUEL
• 域关系演算语言:谓词变元的基本对象是域变量
代表:QBF
③ 具有关系代数和关系演算双重特点的语言
• 代表:SQL(Struotured Query Language)
2. 关系的完整性
(1)关系的三类完整约束
●关系模型中有三类完整性约束:实体完整性约束、参照完整性和用户定义的完整性
• 实体完整性、参照完整性是关系模型必须满足的完整性约束条件,称为关系的两个不变 性。应该由关系系统自动支持
• 用户定义的完整性是应用领域需要遵循的约束条件,体现了具体领域中的语义约束
(2)实体完整性
① 实体完整性规则(Entity Integrity):是指若属性A是基本关系R的主属性,则属性A不能取 空值
空值:“不知道”或“不存在”或“无意义”的值
【例】SAP(SUPERVISOR,SPECIALITY,POSTGRADUATE)
POSTGRADUATE:主码(假设研究生不会重名)不能去空值
② 实体完整性的规则说明:
1. 实体完整性规则是针对基本关系而言的,一个基本表通常对应现实世界的一个实体集
2. 现实世界中的实体是可区分的,即它们具有某种唯一性标识
3. 关系模型中以主码作为唯一性标识
4. 主码中的属性即主属性不能取空值
• 主属性取空值,就说明存在某个不可标识的实体,即存在不可区分的实体
• 这与第 2 点相矛盾,因此这个规则称为实体完整性
【注意】实体完整性规则规定基本关系的所有主属性都不能取空值
【例】 选修(学号,课程表,成绩)
“学号,课程表”为主吗。则学号和课程号两个属性都不能为空值
(3)参照完整性
① 关系间的引用
• 在关系模型中实体及实体间的联系都是用关系来描述的,存在着关系与关系间的引用
【例】学生实体、专业实体
学生(学号、姓名、性别、专业号、年龄)
专业(专业号、专业名)
学生关系引用了专业关系的主码“专业号”
学生关系中的“专业号”值必须是确实存在的专业的专业号,即专业关系中有该专业的记录
【例】学生、课程、学生与课程之间多对多联系
学生(学号、姓名、性别、专业号、年龄)
课程(课程号、课程名、学分)
选修(学号、课程号、成绩)
【例】学生实体及其内部的一对多联系
学生(学号、姓名、性别、专业号、年龄、班长)
“学号”是主码,“班长”是外码,它引用了本关系的“学号;“班长”是必须确实存在的学生 的学号”、
② 外码(Foreign Key)
定义:设 F 是基本关系的 R 的一个或一组属性,但不是关系R 的码
如果 F 与基本关系 S 的主码 K 相对应,则称 F是基本关系的 外码
基本关系 R 称为参照关系(Referencing Relation)
基本关系 S 称为被参照关系(Referenced Relation)或者目标关系(Target Relation)
【例】学生关系的“专业号”与专业关系的主码“专业号”相对应
“专业号”属性是学生关系的外码;专业关系是被参照关系,学生关系为参照关系
【例】选修关系的“学号”与学生关系的主码“学号”相对应;选修关系的“课程号”与课程关系的主 码“课程号”相应
“学号”和“课程号”是选修关系的外码
学生关系和课程关系均为被参照关系
选修关系为参照关系
【例】“班长”与本身的主码“学号”相对应
“班长”是外码
学生关系即使参照关系也是被参照关系
【说明】
• 关系 R 和 S 不一定是不同的关系
• 目标关系 S 的主码 Ks 和参照关系的外码 F 必须定义在同一个(或一组)域上
• 外码并不一定要与相应的主码同名,当外码与相应的主码属于不同关系时,往往取相同的名 字,以便于识别
③ 参照完整性规则
参照完整性规则:若属性(或属性组)F 是基本关系 R 的外码,它与基本关系 S 的主码 Ks相 对于(基本关系 R 和 S 不一定是不同的关系)
则对于 R 中每个元组 F 上的值必须为:
或者取空值(F 的每个属性值均为空值);或者等于 S 中的某个元组的主码值
【例】学生关系中的每个元组的“专业号”属性只去两类值
1. 空值,表示尚未给该学生给配专业
2. 非空值,这时该值必须是专业关系中某个元组的“专业号”值,表示该学生不可能分配 一个不存在的专业
【例】选修(学号、课程号、成绩)
“学号”和“课程号”可能的取值
1. 选修关系中的主要属性,不能去空值
2. 只能取相应被参照关系中已经存在的主码值
【例】学生(学号、姓名、性别、专业号、年龄、班长)
“班长”属性值可以取两类值:
1. 空值,表示该学生所在班级尚未选出班长
2. 非空值,该值必须是本关系中某个元组的学号值
(4)用户定义的完整性
• 针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求
• 关系模型应提供定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,而不 要由应用程序承担这一功能
【例】课程(课程号、课程名、学分)
“课程号”属性必须取唯一值,非主属性“课程名”也不能取空值,“学分”属性只能取值
{1,2,3,4}
3. 关系代数
(1)关系代数的概念
• 关系代数是一种抽象的查询语言,是对关系的运算来表达查询
• 关系代数的运算对象是关系,运算结果也是关系
• 关系代数按运算符的不同可分为传统的集合运算和专门的关系运算两类:
集合运算是从关系的水平方向即行的角度进行
专门的关系运算不仅设计行而且涉及列
(2)关系代数运算符
(3)传统的集合运算
① 并(union)
• 关系 R 和 S 具有相同的目 n(即两个关系都有n个属性),相应的属性取自同一个域
• R 与 S 并运算表示 R ∪ S:R ∪ S = {t | t ∈ R ∨ T ∈ S}
• 运算结构为:n 目关系,由属于 R 或 属于 S 的元组组成
【例】关系 R 与 关系 S 的并运算
② 差(except)
• 关系 R 和 S 具有相同的目 n(即两个关系都有n个属性),相应的属性取自同一个域
• R 与 S的差运算表示 R — S:R — S = { t | t ∈ R ∨ t ∉ S}
• 运算结构为:n 目关系,由属于 R 而不属于 S 的所有元组组成
【例】关系 R 与 关系 S 的差运算
③ 交(intersection)
• 关系 R 和 S 具有相同的目 n(即两个关系都有n个属性),相应的属性取自同一个域
• R 与 S的交运算表示 : R ∩ S:R ∩ S = { t | t ∈ R ∧ t ∈ S},R ∩ S = R — (R — S)
• 运算结构为:n 目关系,由即属于 R 又属于 S 的元组组成
【例】关系 R 与 关系 S 的差运
④ 笛卡尔积(Cartesian Product)
• 严格地讲应该是广义的笛卡尔积(Extended Cartesian Product)
• R:n目关系,k1 个元组,S:m目关系,k2 个元组
• R 与 S 的笛卡尔积运算表示为 R×S:
• 运算结果:行:k1 × k2 个元组,列:(n+m)列元组的集合,其中元组的前n列是关系R的一 个元组,后m列是关系的S中的一个元组
【例】关系R与关系S的笛卡尔积
(4)专门的关系运算
• 关系运算包括:选择、投影、连接、除运算
① 相关记号说明:
• R,t∈R,t[Ai]
设关系模式为 R(A1,A2,... An)
它的一个关系设为 R
t∈R表示 t 是 R 的一个元组
t[A] 则表示元组 t 中相应于属性A的一个分量
•
若A={Ai1,Ai2,..,Aik}, 其中Ai1,Ai2,... ,Aik是A1,A2,..,. A,中的一部分
则A称为属性列或属性组
t[A]=(t[A;],t[A2], ... t[Ax])表示元组t在属性列A_上诸分量的集合
A则表示{A1,A2,.. A,}中去掉{A;,A2, ... Ax}后剩余的属性组
•
R为n目关系,S为m目关系
t,∈R,tg∈S,t t称为元组的连接。
tt是一个n + m列的元组,前n个分量为R中的一个
n元组,后m个分量为S中的一个m元组
• 象集Zx
给定一个关系R (X, Z),X和Z为属性组。
当t[X]=x时,x在R中的象集(Images Set)为:
Zx ={t[Z]|t∈R,t[X]=x}
它表示R中属性组X上值为x的诸元组在Z.上分量的集合
【例】求x1、x2、x3在关系 R上的象集
【例】学生 — 课程数据库:学生关系(Student)、课程关系(Course)、选课关系(SC)
② 选择(Selection)
• 选择又称为限制(Restriction)
③ 投影(Projection)
④ 连接(Join)
⑤ 除运算(Division)
⑥ 综合举例
4. 关系演算
(1) 关系演算
• 已数理逻辑中的谓词演算为基础
■ 按谓词变元不同进行分类
1. 元组关系演算
• 以元组变量作为谓词变元的基本对象
2. 域关系演算
• 以域变量作为谓词变元的基本对象
域关系演算语言 QBE
(2) 元组关系演算语言 ALPHA
■ 标志语句格式
表达式1:指定语句的操作对象
格式:关系名 | 关系名 . 属性名 | 元组变量 . 属性名 | 集函数【,... 】
条件:结果元组应该满足的条件
格式:逻辑表达式
表达式2:指定排序方式
格式:关系名 . 属性名 | 元组变量 . 属性名 【,.... 】
(3)检索
① 简单检索
GET 工作空间名(表达式)
【例1】查询所有被选修的课程号码
GET W(SC.Cno)
【例2】查询所有学生的数据
GET W(Student)
② 限定的索引
GET 工作空间名(表达式1) :条件
【例3】查询信息系(IS)中年龄小于20岁的学生的学号和年龄
GET W(Student . Sno,Student . Sage):
Student . Sdept = ' IS ' ∧ Student . Sage < 20
③ 带排序的检索
GET 工作空间名(表达式1)【:条件】
DOWN | UP 表达式2
【例4】查询计算机科学系(CS)学生的学号、年龄
GET W(Student . Sno,Student . Sage):
Student . Sdept = ' CS ' DOWN Student . Sage
④ 带定额的检索
GET 工作空间名(定额)(表达式1)【:条件】【DOWN | UP 表达式2】
【例5】取出一个信息系学生的学号
GET W(1)(Student . Sno): Student . Sdept = ' IS '
【例6】查询信息系年龄最大的三个学生的学号及其年龄,结果按年龄降序排序
GET W(3)(Student . Sno,Student . Sage)
⑤ 用元组变量的检索
■ 元组变量的含义
• 表示可以在某一关系范围内变化
• 也可以称为范围Range Variable
■ 元组变量的用途
• 简化关系名:设一个较短名字的元组变量来代替较长的关系名
• 条件中使用量词 时必须用元组变量
■ 定义元组变量
• 格式:RANGE 关系名 变量名
• 一个关系可以设多个元组变量
⑥ 用存在量词的检索
【例8】查询选修2号课程的学生名字
【例9】查询选修了这样的课程的学生学号,其直接先行课是6号课程
【例10】查询至少选修一门其先行课为6号课程的学生名字
⑦ 带多个关系的表达式的检索
【例11】查询成绩为90分以上的学生名字与课程名字
⑧ 用(全称)量词的检索
【例12】查询不选1号课程的学生名字
用存在量词表达:
用全称量词表达:
⑨ 用两种量词的检索
【例13】查询选修了全部课程的学生姓名
⑩ 用蕴含(Implication)的检索
【例14】查询最少选修了S3学生所选课程的学生学号
⑪ 聚集函数
常用聚集函数(Aggregation)或内部函数(Build - infunction)
【例15】查询学生所在系的数目
GET W(COUNT(Student . Sdept))
【例16】查询信息系学生的平均年龄
GET W(AVG(Student . Sage):Student . Sdept = ' IS ')
(5)域关系演算语言QBE
① QBE的概念
■ 一种典型的域关系演算语言
• 以元组变量的分量即域变量作为谓词变元的基本对象
• 1978年在IBM370上得以实现
• QBE也指此关系数据库管理系统
■ QBE:Query Example
• 基于屏幕表格的查询语言
• 查询要求:已填写表格的方式构造查询
• 用示例元素(域变量)来表示查询结果可能的情况
• 查询结果:以表格形式显示
② QBE操作框架
③ 简单查询
【例1】求信息系全体学生的姓名
操作步骤:
1. 用户提出
2. 屏幕显示空白表格
3. 用户在最左边一栏输入要查询的关系名Student
4. 系统显示该关系的属性名
5. 用户在上面构造查询要求
6. 屏幕显示查询结果
【例2】查询全体学生的全体数据
显示全体数据也可以简单地把 P . 操作符作用在关系名上
【例3】求年龄大于19岁的学生的学号
④ 条件查询(与条件)(多表连接)(非条件)
【例4】求计算机科学系年龄大于19岁的学生的学号
方法(1):把两个条件写在同一行上
方法(2):把两个条件写在不同行上,但使用相同的示例元素值
【例5】查询即选修了1号课程又选修了2号课程的学生的学号
【例6】查询计算机科学系或者年龄大于19岁的学生的学号
条件查询(多表连接)
【例7】查询选修1号课程的学生姓名
条件查询(非条件)
【例8】查询为选修1号课程的学生姓名
条件查询
【例9】查询有两个人以上选修的课程号
聚集函数
【例10】查询信息系学生的平均年龄
⑤ 对查询结排序
■ 升序排序:
• 对查询结果按某个属性值的升序排序,只需要在相应列中填入 “AO .”
■ 降序排序:
• 按降序排序则天 “DO .”
■ 多列排序:
• 如果按多列排序,用 “AO(i).” 或 “DO (i).”表示,其中 i 为排序的优先级,i 越小,优先级越高
【例11】查全体男生的姓名,要求查询结果按所在系升序排序,对相同系的学生按年龄降序排序