You are on page 1of 107

第2章 关系模型

第二章: 关系模型

北京大学 数据库教研室

2.1
第2章 关系模型

提纲
♠ 关系模型基本概念
♠ 基本关系代数操作
♠ 扩展关系代数操作
♠ 数据库修改
♠ 视图
♠ 关系代数的优化
♠ 元组Tuple关系演算

2.2
第2章 关系模型

关系模型回顾
♠ E.F.Codd于70年代初提出关系数据理论,他因此获得
1981年的ACM图灵奖
♠ 关系理论是建立在集合代数理论基础上的,有着坚实的
数学基础
♠ 早期代表系统
♣ INGRES:由加州Berkeley分校研制
♣ System R:由IBM研制

2.3
第2章 关系模型

关系模型:数据结构
♠ 域(Domain)
♣ 一组值的集合,这组值具有相同的数据类型
♣ 如整数的集合、字符串的集合、全体学生的集合
♠ 笛卡尔积(Cartesian Product)
♣ 一组域D1 , D2 ,…, Dn的笛卡尔积为:
♦ D1×D2×…×Dn = {(d1, d2, … , dn) | di∈Di , i=1,…,n}
♣ 笛卡尔积的每个元素(d1, d2, … , dn)称作一个n-元组(n-tuple)
♣ 元组的每一个值di叫做一个分量(component)
n
♣ 若Di的基数为mi,则笛卡尔积的基数为 ∏ mi
i =1

2.4
第2章 关系模型

关系模型:数据结构(cont.)
♠ 例:设
♣ D1为教师集合(T)= {t1,t2}
♣ D2为学生集合(S)= {s1,s2 ,s3}
♣ D3为课程集合(C)= {c1,c2}则
D1×D2×D3是个三元组集合,元组
T S C
个数为2×3×2,是所有可能的(教
t1 s1 c1
师,学生,课程)元组集合
t1 s1 c2
♠ 笛卡尔积可表为二维表的形式
t1 s2 c1
… … …
t2 s3 c2

2.5
第2章 关系模型

关系模型:数据结构(cont.)
♠ 关系
♣ 笛卡尔积D1×D2×…×Dn的子集叫做在域D1, D2 ,…, Dn上的
关系,用R(D1, D2 ,…, Dn )表示
♣ R是关系的名字,n是关系的度或目
♣ 关系是笛卡尔积中有意义的子集
♣ 关系也可以表示为二维表 属性
T S C
t1 s1 c1
t1 s1 c2
元组 t1 s2 c1
t2 s3 c2 2.6
第2章 关系模型

关系模型:数据结构(cont.)
♠ 关系的性质
♣ 列是同质的
♦ 即每一列中的分量来自同一域,是同一类型的数据。
♦ 如TEACH(T, S, C)={(t1, s1 , c1), (t1 , t2 , c1)}是错误的
♣ 不同的列可来自同一域,每列必须有不同的属性名
♦ 如P={t1,t2 , s1,s2 ,s3},C= {c1,c2},
♦ TEACH不能写成TEACH (P, P, C)
♣ 行列的顺序无关紧要
♣ 任意两个元组不能完全相同(集合内不能有相同的两个元素)
♣ 每一分量必须是不可再分的数据。满足这一条件的关系称作满足第一
范式(1NF)的

2.7
第2章 关系模型

关系模型:数据结构(cont.)
♠ 数据结构
♣ 单一的数据结构——关系
♣ 实体集、联系都表示成关系


DEPT(D# , DN , DEAN)

属于 工作 S(S# , SN , SEX , AGE , D#)


C(C# , CN , PC# , CREDIT)
学生 教师 SC(S# , C# , SCORE)
PROF(P# , PN, D# , SAL)
选修 教授
TEACH(P# , C#)

课程 2.8
第2章 关系模型

关系模型:数据结构(cont.)
♠ 关系中的每一个属性都有一个名字
♠ 属性允许的值的集合被称为属性域domain
♠ 属性值通常是原子的 atomic
♣ 多值属性不是原子的
♣ 复合属性不是原子的
♠ 每个属性域中包含一个特殊的值null
♣ 不存在
♣ 值未知
♠ Null导致数据操作的复杂性
2.9
第2章 关系模型

关系模型:数据结构(cont.)
♠ 候选码(Candidate Key)
♣ 关系中的一个属性组,其值能唯一标识一个元组。
若从属性组中去掉任何一个属性,它就不具有这一
性质了,这样的属性组称作候选码
♣ 如DEPT中的D#,DN都可作为候选码
♣ 任何一个候选码中的属性称作主属性
♦ 如SC(student-course)中的S#,C#

2.10
第2章 关系模型

关系模型:数据结构(cont.)
♠ 主码(Primary Key)
♣ 进行数据库设计时,从一个关系的多个候选码中选定一个
作为主码
♣ 如可选定D#作为DEPT的主码
♠ 外部码(Foreign Key)
♣ 关系R中的一个属性组,它不是R的码,但它与另一个关系
S的码相对应,则称这个属性组为R的外部码
♣ 如Student关系中的D#属性

2.11
第2章 关系模型

关系模型:数据结构(cont.)
♠ 关系模式
♣ 关系的描述称作关系模式,包括关系名、关系中的属性名、
属性向域的映象、属性间的数据依赖关系等,记作R(A1,
A2 ,…, An )
♣ 属性向域的映象一般直接说明为属性的类型、长度等
♣ 某一时刻对应某个关系模式的内容(元组的集合)称作关系
♣ 关系模式是型,是稳定的
♣ 关系是某一时刻的值,是随时间不断变化的

2.12
第2章 关系模型

银行企业的模式图

2.13
第2章 关系模型

关系模型:操作
♠ 关系操作
♣ 关系操作是集合操作,操作的对象及结果都是集合,是一
次一集合(Set-at-a-time)的方式
♣ 而非关系型的数据操作方式是一次一记录(Record-at-a-
time)
♣ 关系操作可以用关系代数和关系演算两种方式来表示,它
们是相互等价的
♣ 如用关系代数来表示关系的操作,可以有选择、投影、连
接、除、交、差、并等

2.14
第2章 关系模型

关系模型:完整性约束
♠ 关系模式的完整性
♣ 实体完整性
♦ 关系的主码中的属性值不能为空值
♦ 空值:不知道或无意义
– 意义:关系对应到现实世界中的实体集,元组对
应到实体,实体是相互可区分的,通过主码来唯
一标识,若主码为空,则出现不可标识的实体,
这是不容许的

2.15
第2章 关系模型

关系模型:完整性约束(cont.)
♠ 参照完整性
♣ 如果关系R2的外部码Fk与关系R1的主码Pk相对应,则R2中
的每一个元组的Fk值或者等于R1中某个元组的Pk值,或者
为空值
♣ 意义:如果关系R2的某个元组t2参照了关系R1的某个元组t1,
则t1必须存在
♣ 例如关系S在D#上的取值有两种可能
♦ 空值,表示该学生尚未分到任何系中
♦ 若非空值,则必须是DEPT关系中某个元组的D#值,表示该
学生不可能分到一个不存在的系中

2.16
第2章 关系模型

关系模型:完整性约束(cont.)
♠ 用户定义的完整性
♣ 用户针对具体应用环境定义的完整性约束条件
♣ 如S#要求是8位整数,SEX要求取值为“男”或
“女”
♠ 系统支持
♣ 实体完整性和参照完整性由系统自动支持
♣ 系统提供定义和检验用户定义的完整性的机制

2.17
第2章 关系模型

关系模型:完整性约束(cont.)
供应商关系S(主码是“供应商号”)

供应商号 供应商名 所在城市


B01 红星 北京
今要向关系P中插入新行,新
S10 宇宙 上海 行的值分别列出如下。哪些行
能够插入?
T20 黎明 天津 A.(‘037’,‘绿’,null)
Z01 立新 重庆 B.(null,‘黄’,‘T20’)
C.(‘201’,‘红’,‘T20’)
零件关系P(主码是“零件号”,外码是“供应商号”) D.(‘105’,‘蓝’,‘B01’)
E.(‘101’,‘黄’,‘T11’)
零件号 颜色 供应商号
010 红 B01
312 白 S10
201 蓝 T20 2.18
第2章 关系模型

查询语言
♠ 用户和数据库交互,获取信息的语言.
♠ 语言的分类
♣ 过程性procedural
♣ 非过程性non-procedural
♠ 纯语言“Pure” languages:
♣ 关系代数Relational Algebra
♣ 元组关系演算Tuple Relational Calculus
♣ 域关系演算Domain Relational Calculus

2.19
第2章 关系模型

设计语言注意事项

♠ 对最终用户是否简单

♣ 用户是否需要掌握数据处理的细节

♠ 这个语言是否有足够的表达能力(强大)

♣ 存在某些查询,这种语言表达不出来

♠ 是否存在高效的执行的方式
2.20
第2章 关系模型

关系数据语言概述
♠ 具体系统中的实际语言
♣ QUEL
♦ 基于Codd提出的元组关系演算语言ALPHA,在INGRES上实

♣ SQL
♦ 介于关系代数和元组关系演算之间,由IBM公司在研制
System R时提出
♣ QBE
♦ 基于域关系演算,由IBM公司研制

2.21
第2章 关系模型

关系代数
♠ 过程性语言
♠ 6个基本操作符
♣ 选择select
♣ 投影project
♣ 并union
♣ 差set difference
♣ 笛卡儿乘积Cartesian product
♣ 重命名rename
♠ 运算符的输入是单个或多个关系,输出是一个新的关系,
满足运算的封闭性
2.22
第2章 关系模型

关系代数运算汇览
♠ 关系代数运算
♣ 一元运算
♦ 选择、投影、更名
♣ 多元运算
♦ 笛卡儿积、集合并、集合差
♣ 其它运算
♦ 集合交、 θ连接、自然连接、外连接
♣ 扩展运算
♦ 赋值、广义投影、插入、删除、更新

2.23
第2章 关系模型

选择运算
♠ 基本定义
在关系R中选择满足给定条件的元组(从行的角度)
σF(R)={t | t ∈ R , F(t) = true}
F是选择的条件,∀t ∈ R, F(t)要么为真,要么为假
F的形式:由逻辑运算符连接算术表达式而成
逻辑表达式:∧,∨,¬
算术表达式:X θ Y
X,Y是属性名、常量、或简单函数
θ是比较算符,θ ∈{ > , ≥ , < , ≤ , = , ≠}

2.24
第2章 关系模型

选择运算
R
σA<5(R)
A B C
A B C
3 6 7
3 6 7
2 5 7
2 5 7
7 2 3
4 4 3
4 4 3
σA<5 ∧ C=7(R) σA=B(R)
A B C A B C
3 6 7 4 4 3
2 5 7
2.25
第2章 关系模型

投影
♠ 定义
♣ 从关系R中取若干列组成新的关系(从列的角度)
ΠA(R) = { t[A] | t∈R } , A⊆R
♣ 投影的结果中要去掉相同的行(集合)

R ΠB , C(R)
A B C
B C
a b c
b c
d e f
c b c e f

2.26
第2章 关系模型

投影
♠ 示例
♣ 给出所有学生的姓名和年龄
♦ΠSN, AGE(S)
♣ 找001号学生所选修的课程号
♦ΠC#(σS#=001(SC ))

2.27
第2章 关系模型

并运算
R S
A B C
A B C
3 6 7
R∪S 3 4 5
2 5 7
A B C 7 2 3
7 2 3
3 6 7
4 4 3
2 5 7
R和S必须是相容的
7 2 3
r 和s 必须包含同样的目
4 4 3 r 和s 对应的属性必须相容

3 4 5

2.28
第2章 关系模型

并运算
♠ 示例
♣ 求选修了001号或002号课程的学生号
♣ 方案1:
♦ ∏S#(σC# = 001∨ C# = 002(SC))
♣ 方案2:
♦ ∏S#(σC# = 001 (SC))∪∏S#(σC# = 002(SC))

2.29
第2章 关系模型

差运算
♠ 定义
♣ 所有出现在一个关系而不在另一关系中的元组集合
♣ R−S ={ r | r∈R ∧ r∉S }

R−S

♣ R和S必须是相容的
♦ r 和s 必须包含同样的目
♦ r 和s 对应的属性必须相容

2.30
第2章 关系模型

差运算
R S
A B C A B C
3 6 7 3 4 5
2 5 7 7 2 3
7 2 3 R-S
4 4 3 A B C S-R
3 6 7 A B C
2 5 7 3 4 5
4 4 3

2.31
第2章 关系模型

差运算
♠ 示例
♣ 求选修了001号而没有选002号课程的学生号

♦ 错误的写法:∏S#(σC# = 001 ∧ C# ≠ 002(SC))


♦ 正确的写法:

∏S#(σC# = 001 (SC)) -∏S#(σC# = 002(SC))

S# C# score
1 001 75

1 002 70

2.32
第2章 关系模型

交运算
♠ 定义
♣ 所有同时出现在两个关系中的元组集合
♦ R∩S ={ r | r∈R ∧ r∈S }
♣ 交运算可以通过差运算来重写
♦ R∩S = R − (R − S)

R∩S

2.33
第2章 关系模型

交运算
R
A B C
S
3 6 7 A B C

2 5 7 3 4 5

7 2 3 7 2 3

4 4 3
R∩S
A B C
7 2 3

2.34
第2章 关系模型

交运算
♠ 示例
♣ 求同时选修了001号和002号课程的学生号
♦ 错误的写法:

–∏S#(σC# = 001 ∧ C# = 002(SC))


♦ 正确的写法:

–∏S#(σC# = 001 (SC))∩∏S#(σC# = 002(SC))

2.35
第2章 关系模型

笛卡尔积运算

rxs
s A B C D E
r
C D E α 1 α 10 a
A B α 1 β 19 a
α 10 a α β
α 1 1 20 b
β 10 a α 1 γ 10 b
β 2 β 20 b β 2 α 10 a
γ 10 b β 2 β 10 a
β 2 β 20 b
β 2 γ 10 b

2.36
第2章 关系模型

笛卡尔积运算
♠ σA=C(r x s)
A B C D E
♠rxs α 1 α 10 a
α 1 β 19 a
α 1 β 20 b
α 1 γ 10 b
β 2 α 10 a
β 2 β 10 a
β 2 β 20 b
β 2 γ 10 b

A B C D E
♠ σA=C(r x s) α 1 α 10 a
β 2 β 20 a
β 2 β 20 b
2.37
第2章 关系模型

更名运算
♠ 定义
♣ 给一个关系表达式赋予名字ρx(E) 返回表达式E的结果,并
把名字x赋给E

♣ ρx(A1, A2 ,… , An )(E)返回表达式E的结果,并把名字x赋
给E,同时将各属性更名为A1,A2,… ,An
♣ 关系被看作一个最小的关系代数表达式,可以将更名运算
施加到关系上,得到具有不同名字的同一关系。这在同一
关系多次参与同一运算时很有帮助

2.38
第2章 关系模型

笛卡尔积和更名运算
♠ 示例
♣ 求数学成绩比王红同学高的学生
♦ ∏S.姓名( σR.成绩<S.成绩 ∧ R.课程=数学 ∧ S.课程=数学 ∧ R.姓名=王红 (R×ρS( R))

R
姓名 课程 成绩
张军 物理 93
王红 数学 86
张军 数学 89

R.姓名 R.课程 R.成绩 S.姓名 S.课程 S.成绩


王红 数学 86 张军 物理 93
王红 数学 86 王红 数学 86
王红 数学 86 张军 数学 89
2.39
第2章 关系模型

查询示例
♠ account(account-number, branch-name,
balance)
♠ 找到帐户中最大的余额
♣ 重命名account为d
♣ 查询为:
♦ ∏balance(account) - ∏account.balance
(σaccount.balance < d.balance (account x rd (account)))

2.40
第2章 关系模型

θ连接
♠ 定义
♣ 从两个关系的广义笛卡儿积中选取给定属性间满足
一定条件的元组
♣ A,B为R和S上度数相等且可比的属性列
♣ θ为算术比较符,为等号时称为等值连接
R S = { rs | r∈R ∧ s∈S ∧ r[A]θs[B] }
AθB

R S = σr[A]θs[B]( R×S)
AθB
2.41
第2章 关系模型

θ连接
♠ 求数学成绩比王红同学高的学生
∏S.姓名((σ课程=数学 ∧ 姓名=王红(R)) ( σ课程=数学ρS(R)))
R.成绩<S.成绩

R S R S
B<D
A B C A B C D E
D E
1 2 3 1 2 3 3 1
4 5 6 3 1
1 2 3 6 2
7 8 9 6 2
4 5 6 6 2
2.42
第2章 关系模型

自然连接
♠ 定义
♣ 从两个关系的广义笛卡儿积中选取在相同属性列B、D上取
值相等的元组,并去掉重复的行
r s
r s
A B C D A B C D E
B D E
1 a α α 1 α a α
α 1 α a α 1 α a γ
β 2 γ a 3 a β
1 a γ α 1 γ a α
γ 4 β b α 1 γ a γ
α 1 γ a 2 b δ
3 b ∈ δ 2 β b δ
δ 2 β b

2.43
第2章 关系模型

自然连接
♠ 示例
♣ 求001号学生所在系的名称
♣ ∏DN(σS# = 001(S) DEPT)

R S R S
A B C C D A B C D
1 2 3 3
3 1 1 2 1
4 5 6
6 4 5 6 2
7 8 9 2

2.44
第2章 关系模型

除运算
♠ 如何得到选修了全部课程的学生?
♠ 象集(Image Set)
♣ 关系R(X , Z), X, Z是属性组,x是X上的取值,定义x在R中的象集为Zx
= { t[Z] | t∈R ∧ t[X]= x }
♣ 从R中选出在X上取值为x的元组,去掉X上的分量,只留Z上的分量

x=张军
张军同学所选修
X Z Zx 的全部课程
姓名 课程 课程
张军 物理 数学
王红 数学 物理
张军 数学
2.45
第2章 关系模型

除运算
♠ 做法:逐个考虑选课关系SC中的元组r,求r在姓
名SN上的分量x,再求x在选课关系中的象集课程
Cx,若Cx包含了所有的课程C,则x是满足条件的
一个元组
选修全部课 x同学所选修
全部课程
程的学生 的全部课程

{ x | x=r[SN] ∧ r∈SC ∧ Cx⊇C }

2.46
第2章 关系模型

除运算 所有学生选修
姓名 课程 全部课程
课程 姓名 张军 物理
数学 × 张军 = 王红 数学
没有选修全部课
物理 王红 张军 数学
程的学生
王红 物理
姓名 课程
姓名 课程
张军 物理
张军 物理
王红 数学 − 王红 数学
= 姓名 课程
王红 物理
张军 数学
张军 数学
王红 物理
姓名 选修了全部课
姓名
王红 − 姓名
= 程的学生
王红 张军
张军
2.47
第2章 关系模型

除运算
♠ 性质
♣令q=r ÷s
♣ 则 q 是满足q x s ⊆ r 的最大关系
♠ 用基本关系代数运算定义
♣ 设有关系 r(R) 和 s(S), 且 S ⊆ R
♣ r ÷ s = ∏R-S (r) –∏R-S ( (∏R-S (r) x s) – ∏R-S,S(r))
♦ ∏R-S,S(r) 只是对r 的属性重新排序
∏R-S(∏R-S (r) x s) – ∏R-S,S(r)) 给出∏R-S (r) 的元组 t 使得存在
元组 u ∈ s, tu ∉ r.

2.48
第2章 关系模型

赋值运算
♠ 定义
♣ 为使查询表达简单、清晰,可以将一个复杂的关系
代数表达式分成几个部分,每一部分都赋予一个临
时关系变量,该变量可被看作关系而在后面的表达
式中使用
临时关系变量←关系代数表达式
♣ 赋值给临时关系变量只是一种结果的传递,而赋值
给永久关系则意味着对数据库的修改
2.49
第2章 关系模型

赋值运算
♠ 示例
♣ R÷S过程用赋值重写为:
♦ all ← ΠR-S(r)
♦ noncomplete ← ΠR-S(all × s − ΠR-S,S(r))
♦ result ← all − noncomplete

♠ 注意 不支持递归定义

2.50
第2章 关系模型

关系代数查询实例
♠ 示例:求没有选修001号课程的学生姓名

♣ 所有学生 – 选修了001号课程学生
∏SNAME(S) -∏SNAME(σC# = 001 (S SC))

∏SNAME(σC# ≠ 001 (s sc)) Wrong


返回没有选修001课程的同学,和选课大于两门,其中包含001
课程的同学。
S# C# score

1 001 75

1 002 70
2.51
第2章 关系模型

关系代数查询实例
♠ 示例
♣求选修课程中包含了S01号学生所选修的所
有课程的学生号

♦∏S#,C#(SC) ÷ ∏C#(σS# = S01 (SC))

2.52
第2章 关系模型

外连接
♠ 外连接
♣ 为避免自然连接时因失配而发生的信息丢失,可以假定往
参与连接的一方表中附加一个取值全为空值的行,它和参
与连接的另一方表中的任何一个未匹配上的元组都能匹配,
称之为外连接
♦ 外连接 = 自然连接 + 未匹配元组
♣ 外连接的形式:左外连接、右外连接、全外连接
♦ 左外连接 = 自然连接 + 左侧表中未匹配元组
♦ 右外连接 = 自然连接 + 右侧表中未匹配元组
♦ 全外连接 = 自然连接 + 两侧表中未匹配元组

2.53
第2章 关系模型

外连接 – 例
♠ 关系loan
loan-number branch-name amount
L-170 Downtown 3000
L-230 Redwood 4000
L-260 Perryridge 1700

♠ 关系borrower
customer-name loan-number
Jones L-170
Smith L-230
Hayes L-155

2.54
第2章 关系模型

外连接 – 例
♠ 内连接 loan Borrower
loan-number branch-name amount customer-name
L-170 Downtown 3000 Jones
L-230 Redwood 4000 Smith

♠ 左外连接 loan borrower


loan-number branch-name amount customer-name
L-170 Downtown 3000 Jones
L-230 Redwood 4000 Smith
L-260 Perryridge 1700 null

2.55
第2章 关系模型

外连接 – 例
♠ 右外连接 loan borrower
loan-number branch-name amount customer-name
L-170 Downtown 3000 Jones
L-230 Redwood 4000 Smith
L-155 null null Hayes

♠ 全外连接 loan borrower


loan-number branch-name amount customer-name
L-170 Downtown 3000 Jones
L-230 Redwood 4000 Smith
L-260 Perryridge 1700 null
L-155 null null Hayes

2.56
第2章 关系模型

聚集函数
♠ 定义
♣ 求一组值的统计信息,返回单一值
♣ 使用聚集的集合可以是多重集,即一个值可以重复
出现多次。如果想去除重复值,可以用连接符“-”
将“distinct”附加在聚集函数名后,如sum-
distinct
♣ sum:求和
♦ 求全体教工的总工资 sumSAL(PROF)
♦ 求001号学生的总成绩 sumSCORE(σS# = 001 (SC))
2.57
第2章 关系模型

聚集函数
♠ avg:
♣ 求001号同学选修课程的平均成绩。

♣ avgSCORE(σS# = 001(SC))
♠ count:
♣ 计数
♦ 求001号同学选修的课程数。countC#(σS# = 001(SC))

♦ 求任课老师的总数。count-distinctP#(PC)

2.58
第2章 关系模型

聚集函数
♠ max:求最大值
♠ min:求最小值
♣ 求学生选修数学的最高成绩
♣maxSCORE(σCN = 数学(C SC))
♠ 分组
♣ 将一个元组集合分为若干个组,在每个分组上使用聚集函
数。
♦ 属性下标 G 聚集函数属性下标(关系)

按此属性上的值对 对此属性在每个分组上运
关系分组 用聚集函数
2.59
第2章 关系模型

分组和聚集函数
♠ 列出每个学生的平均成绩 列出每门课程的平均成绩
S# C# G S# C# G
s1 c1 84 s1 c1 84
90 s1 c2 90 s1 c2 90 82

s1 c3 96 s1 c3 96
s2 c1 80 s2 c1 80 92
85
s2 c2 90 s2 c2 90
92
s3 c2 96 s3 c2 96
92
s3 c3 88 s3 c3 88
group by S# group by C#
2.60
第2章 关系模型

聚集函数
♠ 分组运算G 的一般形式

♣ G1 , G2 , ... , Gn G F1(A1), F2(A2), … , Fm(Am)(E)

♣ Gi是用于分组的属性, Fi是聚集函数, Ai是属性名。


♣ G 将E分为若干组,满足:
♦ 1)同一组中所有元组在G1 , G2 , ... , Gn上的值相同。
♦ 2)不同组中元组在G1 , G2 , ... , Gn上的值不同。
♠ 示例
♣ 求每位学生的总成绩和平均成绩

♦ S# G sumSCORE ,avgSCORE(SC)运算结果的关系模式
♦ 包括属性 S#, SUMScore,AVGScore
♦ 后续使用需用对结果进行重命名
2.61
第2章 关系模型

广义投影
♠ 定义
♣ 在投影列表中使用算术表达式来对投影进行扩展
ΠF1 , F2 , … , Fn (E)

F1 , F2 ,… , Fn 是算术表达式
♠ 示例
♣ 求教工应缴纳的所得税
ΠP# , SAL*5/100 (PROF)

2.62
第2章 关系模型

数据库修改
♠ 删除
♣ 将满足条件的元组从关系中删除
♦r←r−E
♦ 是对永久关系的赋值运算
♣ 例:
♦ 删除001号老师所担任的课程
– PC ← PC − σP# = 001(PC)
♦ 删除没有选课的学生
– S ← S − (∏S# (S) − ∏S# (SC)) S
2.63
第2章 关系模型

数据库修改
♠ 插入
♣ 插入一个指定的元组,或者插入一个查询结果
r←r∪E
♣ 示例:新加入一个老师
PROF ← PROF ∪ {(P07 ,“周正”, 750 , D08)}

♣ 示例:加入计算机系学生选修“数学”的信息
SC ← SC ∪ ∏S# (S σDN =计算机系 (DEPT))
× ∏C#(σCN =数学(C))

2.64
第2章 关系模型

数据库修改
♠ 更新
♣ 利用广义投影改变元组的某些属性上的值
r ← ΠF1 , F2 , … , Fn (r)
♣ 示例:给每位老师上调10%的工资
PROF ← ΠP# , PN , SAL← SAL* 1.1 , D# (PROF)

♣ 示例:对工资超过800的老师征收5%所得税
PROF ← ΠP# , PN , SAL← SAL* 0.95 , D# (σSAL> 800 (PROF))
∪ΠP# , PN , SAL , D# (σSAL ≤ 800 (PROF))

2.65
第2章 关系模型

空值
♠ 元组中在某些属性之上可能存在空值
♠ null 表明值是不存在或者是未知的.
♠ 包含空值的算术操作的结果是空值.
♠ 聚集函数简单地忽略空值
♠ 对于去重操作和分组操作,空值的处理方式等同
于其他值,两个空值被认为是一致的

2.66
第2章 关系模型

空值
♠ 涉及空值的比较返回一个特殊的值 unknown
♠ 三值逻辑用到真值 unknown:
♣ OR:
♦ (unknown or true) = true,
♦ (unknown or false) = unknown
♦ (unknown or unknown) = unknown
♣ AND:
♦ (true and unknown) = unknown,
♦ (false and unknown) = false,
♦ (unknown and unknown) = unknown
♣ NOT:
♦ (not unknown) = unknown
♠ 在SQL中, 如果P 属性为空, 则 “P is unknown” 为 true
♠ 如果选择谓词计算到unknown, 则视为false

2.67
第2章 关系模型

视图Views
♠ 在某些情况下,用户并不需要看到整个逻辑模型 (如., 所有保存在
数据库中的关系.)
♠ 假定一个人需要看到分行名称和贷款loan客户名称,不过不需要
看到loan 额度. 则这个人应该看到下列关系 ∏customer-name,
branch_name (borrower loan)
♠ 所有不属于概念模型,但是为用户所见的虚拟关系,被称为视图.

视图V1 视图V2

基本表B1 基本表B2 基本表B3

2.68
第2章 关系模型

视图
♠ 视图的优点
♣ 个性化服务
♦ 简化了用户观点,使不同用户可以从不同角度观察
同一数据
♣ 安全性
♦ 限制用户数据的访问范围
♣ 逻辑独立性
♦ 视图作为基本表与外模式之间的映象

2.69
第2章 关系模型

视图定义
♠ 一个视图利用create view 语句来创建
♣ create view v as <query expression>
♦ 其中 <query expression> 是任意合法的关系代数
查询表达式. 视图名称为v.
♦ 一旦视图定义,视图名称能够作为虚拟关系得到引
用.
♦ 数据库中视图定义和关系定义的过程不同,在数据
库中仅仅保存视图定义.

2.70
第2章 关系模型

视图示例
♠ 考虑视图 (命名为all-customer) 包含分行信息和所有客户.
♣ create view all-customer as
∏branch-name, customer-name (depositor account) ∪ ∏branch-name,
customer-name (borrower loan)
♣ 我们查询所有Perryridge分行的客户: ∏customer-name (σbranch-name
= “Perryridge” (all-customer))

2.71
第2章 关系模型

通过视图更新
♠ 如果通过视图进行更新,则这个语句需要转换到数据库中
真实表的更新.
♠ 假定一个人希望看到除了loan金额的所有其他信息,我
们定义了branch-loan视图为:
♣ create view branch-loan as ∏branch-name, loan-number
(loan)
♠ 我们允许利用视图名来更新数据,
♣ branch-loan ← branch-loan ∪ {(“Perryridge”, L-37)}

2.72
第2章 关系模型

利用视图进行更新 (Cont.)
♠ 对视图的插入操作,必须转换为对建立视图的真实关系的操作
♠ 在插入关系loan的过程化中,需要提供amount的值. 插入操作可能的处理
方式包括.
♣ 拒绝插入操作,返回用户错误信息.
♣ 插入元组 (“L-37”, “Perryridge”, null) 到数据库中
♠ 某些插入操作逻辑上不符合视图的定义,如
♣ 创建视图v as σbranch-name = “Perryridge” (account)
♦ v ← v ∪ (“L-99”, “Downtown”, 23)
♣ 由用户在创建视图时指定
♠ 某些查询不能转换为唯一的查询
♣ all-customer ← all-customer ∪ (Perryridge, John)
♣ 只能选择loan 或者account, 并且需要创建一个新的loan/account 编
号!
2.73
第2章 关系模型

视图更新存在的问题
♠ 主码信息缺失
♣ create view p_salary as ∏PN , SAL(PROF)
♣ 在视图p_salary上执行:
♦ p_salary ←p_salary ∪{(李明, 800)}
♣ 在基本表PROF上执行:
♦ PROF ← PROF ∪{(李明, 800)}
♦ 往PROF中加入元组(李明, 800),缺主码P#信息

2.74
第2章 关系模型

视图更新存在的问题
♠ 连接属性信息缺失
♣ create view s_dean as ∏SN , DEAN(S DEPT)
♦ 在视图s_dean上执行:
– s_dean ← s_dean ∪{(叶开, 伍魁)}
♦ 在基本表S上执行:
– S ← S ∪{(null, 叶开, null, null)}
♦ 在基本表DEPT上执行:
– DEPT ← S ∪{(null, null, 伍魁)}

2.75
第2章 关系模型

通过已有视图定义其他视图
♠ 我们可以利用已有的视图来定义新的视图
♠ 新的视图v1直接依赖于depend directly 视图v2,
如果v1的定义表达式中使用了视图 v2
♠ 一个视图v1 依赖于视图 depend 视图v2
如果或
者是v1 直接依赖于 v2 或者存在一个从v1 到 v2
的依赖路径
♠ 一个视图的定义被称为是递归的recursive ,如果
它依赖自身.
2.76
第2章 关系模型

视图执行过程中扩展
♠ 假定视图v1 通过表达式e1 来定义,表达式e1可能包含
视图定义.
♠ 视图扩展重复下列的替换操作:
♣ repeat
♦ Find any view relation vi in e1
♦ Replace the view relation vi by the expression defining
vi
♣ until no more view relations are present in e1
♠ 只要视图不是递归的,上述重复是可以终止的
2.77
第2章 关系模型

物化视图
♠ 物化视图
♣ 视图的计算结果被实际存储起来,不仅仅包括定义,而且包括视图内容
♣ 物化视图可以看成是数据库的cache
♣ 查询物化视图比重新计算视图要快许多
♠ 三个问题
♣ 物化视图选择 View Selection
♣ 物化视图维护 View Maintenance
♣ 使用物化视图回答物化视图 Answer Query Using Materialized Views
♠ 应用场合
♣ 数据仓库
♣ 移动计算环境
♣ 数据集成
♣ …….

2.78
第2章 关系模型

关系代数表达式的等价规则
选择运算的级联:合取选择运算可分解为单个选择运
算的序列
σθ ∧θ (E) =σθ (σθ (E))
1 2 1 2

投影运算的级联:投影运算序列中只有最后一个运算
是需要的,其余的可省略
∏L (∏L (…(∏L (E))…)) = ∏L (E)
1 2 n 1

选择运算满足交换律
σθ (σθ (E)) =σθ (σθ (E))
1 2 2 1

2.79
第2章 关系模型

关系代数表达式的等价规则
选择与笛卡尔积以及θ连接相结合
σθ(E1×E2) = E1 θE 2

σθ (E1 θ2 E2)= E1 θ1 ∧ θ2 E2
1

θ连接满足交换律
E1 θE2= E2 θE 1

自然连接满足交换律
E1 E2= E2 E1

2.80
第2章 关系模型

关系代数表达式的等价规则

自然连接运算满足结合律
(E1 E2) E3 = E1 (E2 E3)

θ连接具有以下方式的结合律
(E1 θ1 E2) θ ∧θ E3 = E1 θ ∧θ (E2 θ2E3)
2 3 1 3
其中θ2只涉及E2与E3的属性

2.81
第2章 关系模型

关系代数表达式的等价规则
选择运算在下面两个条件下对θ连接运算具有分配律

当选择条件θ0的所有属性只涉及参与连接运算的表达
式之一(E1)时:
σθ (E1 θE2)= (σθ (E1)) θ E2
0 0

当选择条件θ1只涉及E1的属性,选择条件θ2只涉及E2
的属性时:
σθ ∧ θ (E1 θE2) = (σ θ (E1)) θ(σθ (E2))
1 2 1 2

先执行选择操作,再执行连接操作,是重要的优化策略
2.82
第2章 关系模型

关系代数表达式的等价规则
集合运算并与交满足交换律
E1∪E2=E2∪E1
E1∩E2=E2∩E1
集合差运算不满足交换律

集合运算并与交满足结合律
(E1∪E2)∪E3= E1∪(E2∪E3)
(E1∩E2)∩E3= E1∩(E2∩E3)
集合差运算不满足结合律
2.83
第2章 关系模型

关系代数表达式的语法树
S(S#, SNAME, AGE, SEX)
C(C#, CNAME, TEACHER)
SC(S#, C#, GRADE)
求选修了刘老师课程的女学生的学号及姓名

∏S#, SNAME(σTEACHER=‘LIU’∧SEX=‘F’(S SC C))


∏S#, SNAME(σTEACHER=‘LIU’∧SEX=‘F’(∏L
(σSC.C#=C.C# ∧ SC.S#=S.S#(S × SC × C))))

L=S#,SNAME,AGE,SEX,C#,CNAME,TEACHER,GRADE

2.84
第2章 关系模型

关系代数表达式的语法树

S#,SNAME
σ
TEACHER=‘LIU’∧SEX=‘F’

L
σ
SC.C#=C.C# ∧ SC.S#=S.S#
×
× S
SC C
2.85
第2章 关系模型

关系代数表达式的优化

将选择运算尽可能移向叶节点

S#,SNAME

L
σ
SC.S#=S.S#
×
σ σ
SC.C#=C.C# SEX=‘F’
× S
SC σ
TEACHER=‘LIU’
C
∏S#, SNAME’ (∏L (σSC.S#=S.S#(σSEX=‘F’(S) ×σSC.C#=C.C#(SC × σTEACHER=‘LIU’(C)))))) 2.86
第2章 关系模型

关系代数表达式的优化

合并可能的投影操作
S#,SNAME
σ
SC.S#=S.S#
×
σ σ
SC.C#=C.C# SEX=‘F’
× S
SC σ
TEACHER=‘LIU’
C
∏S#, SNAME’ (σSC.S#=S.S#(σSEX=‘F’(S) ×σSC.C#=C.C#(SC × σTEACHER=‘LIU’(C))))2.87
第2章 关系模型

关系代数表达式的优化

将投影运算尽可能移向叶节点

S#,SNAME
σ
SC.S#=S.S#
×
∏ ∏
SC.S# S.S#,SNAME
σ σ
SC.C#=C.C# SEX=‘F’
× S
∏ ∏
SC.S#,SC.C# C.C#
SC σ
TEACHER=‘LIU’
C 2.88
第2章 关系模型

元组关系演算
♠ 形式化定义
♣ {t|P(t)}
♣ 表示所有使谓词P为真的元组集合
♠ t为元组变量
♣ 如果元组变量前有“全称” (∀)或“存在” (∃)量词,则称
其为约束变量,否则称为自由变量
♣ 查询结果中的变量是都是自由变量,表达式中出现的其他
变量都是约束变量
♣ 约束变量实现自由变量与其他表中变量的关系描述,实现
自由变量的“赋值”(关系演算的执行角度)
♠ P是公式
♣ 由原子公式和运算符组成
2.89
第2章 关系模型

元组关系演算
♠ 原子公式
♣ s∈R
♦ s是关系R中的一个元组
♣ s[x]θ u[y]
♦ s[x]与u[y]为元组分量,它们之间满足比较关系
♣ s[x]θ c
♦ 分量s[x]与常量c之间满足比较关系

2.90
第2章 关系模型

元组关系演算
♠ 公式的递归定义
♣ 原子公式是公式
♣ 如果P是公式,那么┑P也是公式

♣ 如果P1 , P2是公式,则P1 ∧P2 , P1 ∨ P2 , P1


P2 也是公式
♣ 如果P(t)是公式,R是关系,则∃t∈R(P(t))和∀t∈R
(P(t))也是公式

2.91
第2章 关系模型

元组关系演算
♠ 公式的等价性
♣ P1 ∧ P2 ⇔ ┑(┑P1 ∨ ┑P2)
♣ ∀t∈R (P(t)) ⇔ ┑∃t ∈R (┑P(t))
♣ P1  P2 ⇔ ┑P1 ∨P2
p q ┑p p q ┑p ∨ q
T T F T T
T F F F F
F T T T T
F F T T T
2.92
第2章 关系模型

元组关系演算 { t | t∈S ∧ ∃u∈R(t[C] < u[B])}


R S A B C
A B C A B C 1 2 3
1 2 3 1 2 3 3 4 6
4 5 6 3 4 6
{ t | t∈R ∧ ∀u∈S(t[C] > u[A])}
7 8 9 5 6 9
A B C
{ t | t ∈ S ∧ t[A] >2}
4 5 6
A B C
7 8 9
3 4 6
{ t | ∃u∈R ∃v∈S (u[A]>v[B] ∧ t[A]=u[B] ∧t[B]=v[C] ∧t[C]=u[A])}
5 6 9
R.B S.C R.A
{ t | t ∈ R ∧ ┑t∈S } 5 3 4

A B C 8 3 7
不恰当的描述可能产生无限的结果,
4 5 6 称为Unsafe的元组关系演算 8 6 7

7 8 9 8 9 7 2.93
第2章 关系模型


元组关系演算
属于 工作
♠ 找出工资在800元以上的老师的情况
学生 教师
♣ {t | t∈PROF ∧ t[SAL] > 800}
选修 教授
♠ 找出工资在800元以上的老师的姓名
课程
♣ {t | ∃s∈PROF ( t[PNAME] = s[PNAME]
∧ s[SAL] > 800 )}
♠ 给出计算机系老师的姓名
♠ {t | ∃u∈DEPT ( u[DNAME] = “计算机系” ∧
∃s∈PROF ( s[DNO] = u[DNO] ∧ t[PNAME] =
s[PNAME] ))}
2.94
第2章 关系模型


元组关系演算
属于 工作
♠ 求选修了全部课程的学生号
学生 教师
♣ {t | ∃u∈S ∀v∈C ( ∃w∈SC
选修 教授
( v[CNO]=w[CNO] ∧ u[SNO]=w[SNO]
∧ t[SNO]=u[SNO] ))} 课程

♠ 假定course表中有包含学分grade字段,求选修了全部大于3
学分课程的学生号
♣ {t | ∃u∈S ∀v∈C ( v.grade>3  ∃w∈SC
( v[CNO]=w[CNO] ∧ u[SNO]=w[SNO] ∧
t[SNO]=u[SNO] ))}

2.95
第2章 关系模型

查询示例
♠ 获取loan关系中的loan-number, branch-name, amount
并且amount大于 $1200
♣ {t | t ∈ loan ∧ t [amount] > 1200}
♠ 找到贷款额度大于1200的贷款号
♣ {t | ∃ s ∈ loan (t[loan-number] = s[loan-number]
∧ s [amount] > 1200)}

2.96
第2章 关系模型

查询示例
♠ 找到所有客户的名字,这些客户在银行中有一个loan, 或者一个 account
♣ {t | ∃s ∈ borrower(t[customer-name] = s[customer-name]) ∨
∃u ∈ depositor(t[customer-name] = u[customer-name]}
♠ 找到所有的客户名字,这些客户在银行中有loan 并且有account
♣ {t | ∃s∈borrower(t[customer-name] = s[customer-name])
∧ ∃u∈depositor(t[customer-name] = u[customer-name]}

2.97
第2章 关系模型

元组关系演算
♠ 元组关系演算与关系代数的等价性
♠ 投影
♣ ∏A( R ) = { t | ∃s∈R ( s[A] = t[A] ) }
♠ 选择
♣ σF(A)(R) = { t | t∈R ∧ F(t[A]) }
♠ 广义笛卡儿积
♣ R(A) × S(B) = { t | ∃u∈R∃s∈S( t[A] = u[A] ∧ t[B] = s[B])}
♠ 并
♣ R∪S={ t | t∈R ∨ t∈S}
♠ 减
♣ R−S={ t | t∈R ∧ ┑t∈S}

2.98
第2章 关系模型

总结
♠ 关系模型基本概念
♠ 基本关系代数操作
♠ 扩展关系代数操作
♠ 数据库修改
♠ 视图
♠ 关系代数的优化
♠ 元组Tuple关系演算
2.99
第2章 关系模型

习题1:编写关系代数表达式
♠ 给定关系模式
♣ employee (person-name, street, city)
♣ works (person-name, company-name, salary)
♣ company (company-name, city)
♣ manages (person-name, manager-name)
♠ 编写关系代数查询
♣ 找出First Bank Corporation所有员工的姓名
♣ 找出First Bank Corporation所有员工的姓名和居住的城市.
♣ 找出First Bank Corporation所有收入在10000以上的员工的姓名、街道和城市.
♣ 找出所在居住地和工作的公司在同一城市的员工姓名
♣ 找出与其经理在同一城市、同一街道的所有员工的姓名
♣ 找出数据库中不在First Bank Corporation公司工作的员工姓名
♣ 找出比Small Bank Corporation所有员工收入都高的员工姓名.
♣ 假定一个公司可以在多个城市,找出位于Small Bank Corporation所在的所有城市的公司(
这个时候company的key为company-name和city)

2.100
第2章 关系模型

习题2:编写关系代数表达式
♠ 给定关系模式
Depositor(customer-name, account-number)
♠ 使用两种关系代数表达方式(利用聚集函数表达,
不利用聚集函数表达),查找持有者大于两个人的
账户

2.101
第2章 关系模型

习题3:元组关系演算
♠ Let the following relation schemas be given:R
= (A,B,C) S = (D,E, F), Let relations r(R) and s(S)
be given. Give an expression in the tuple
relational calculus(元组关系演算) that is
equivalent to each of the following:
♣ ΠA(r)
♣ σB =17 (r)
♣r×s
♣ ΠA,F (σC=D(r×s))
2.102
第2章 关系模型

Extension: Restrictive Programming Model


♠ 关系代数和元组关系演算都是所谓受限编程模型
♣ 不是支持全功能的查询
♣ 但是支持足够强的查询
♣ 同时,为最终用户提供了简单的查询界面,隐藏实
现细节,系统通过自动优化,也能高效实现

2.103
第2章 关系模型

另一个例子:MapReduce
♠ 分布式环境下的程序开发是必然
♣ CPU频率提升困难,多核成为趋势
♦ 分布、并行编程
♣ 单个高性能服务器价格过于昂贵
♠ 分布式环境下的程序开发挑战
♣ 需要考虑分布式环境中,任务程序在不同计算节点上的创
建、销毁、消息传递、节点崩溃等问题
♣ 每个分布式程序中,不仅仅有业务逻辑代码,而且有大量
的分布式环境相关的代码
♠ MapReduce是分布式环境中的一个计算框架
2.104
第2章 关系模型

MapReduce执行流程
♠ map (in_key, in_value) -> (out_key, intermediate_value)
♠ Reduce(out_key, list(intermediate_value)) -> list(out_value)

Map和Reduce函数相当于在key-value集合上进行变换的基本操作
2.105
第2章 关系模型

MapReduce和关系代数
♠ 服务于不同领域
♠ 都是实现了所解决问题受限子问题各个因素相对平衡的解决方案
♣ 最终用户是否方便、是否有比较强的表达能力、自身能够做出优化

关系代数 MapReduce
数据结构 表 Key-value

操作 6种基本符号+扩展符号 Map和Reduce函数

屏蔽问题 数据存储格式、数据访问方 数据存储格式、数据分布式环


式、查询具体执行流程 境中复制、任务fork,初始化、
销毁、任务间消息传递
表达能力 一阶谓词能表示的查询,用 Map和Reduce内部可用任何
户的查询需要用SQL重写 的逻辑,整个任务的逻辑用
Map和Reduce重写
复杂的任务往往需要多个
MapReduce 2.106
第2章 关系模型

受限编程
♠ SQL和MapReduce都可以看作是受限编程
♠ 只有受限,公共的部分才能做好。
♣ SQL和MapReduce的接口和基本流程都是固定的
♣ SQL才能优化
♣ MapReduce才能考虑很多分布式处理的其他因素
♠ 受限的方法有很多种,不是唯一的
♣ 除了MapReduce模型,还有BSP模型等
♠ 客户端必须按照受限的接口重写其方法,有的时候公共部分的能
力达不到
♣ 关系数据库的递归可能需要应用程序的支持
♣ MapReduce中的迭代操作也需要外部程序的支持

2.107

You might also like