117

第三章 关系模型

Embed Size (px)

DESCRIPTION

第三章 关系模型. TABLE An arrangement of words, numbers, or signs, or combinations of them, as in parallel columns, to exhibit a set of facts or relations in a definite, compact, and comprehensive form; a synopsis or scheme. ——Webster’s Dictionary of the English Language. 提纲. 关系基本概念 关系模型 关系代数 - PowerPoint PPT Presentation

Citation preview

TABLETABLE

An arrangement of words, An arrangement of words, numbers, or signs, or combinations numbers, or signs, or combinations of them, as in parallel columns, to of them, as in parallel columns, to exhibit a set of facts or relations in exhibit a set of facts or relations in a definite, compact, and a definite, compact, and comprehensive form; a synopsis or comprehensive form; a synopsis or scheme.scheme.

————Webster’s Dictionary of the English LanguageWebster’s Dictionary of the English Language

提纲 关系基本概念 关系模型 关系代数 元组关系演算 域关系演算

关系模型回顾 E.F.Codd 于 70 年代初提出关系数据理论,他因

此获得 1981 年的 ACM 图灵奖 关系理论是建立在集合代数理论基础上的,有着

坚实的数学基础 早期代表系统

System R:由 IBM 研制 INGRES :由加州 Berkeley 分校研制

目前主流的商业数据库系统 Oracle , Informix , Sybase , SQL

Server , DB2 Access , Foxpro , Foxbase

关系基本概念 域( Domain )

一组值的集合,这组值具有相同的数据类型 如整数的集合、字符串的集合、全体学生的集合

笛卡尔积( Car’tesian Product ) 一组域 D1 , D2 ,…, Dn 的笛卡尔积为 :

D1×D2×…×Dn = {(d1 , d2 , … , dn) | di∈Di , i=1,…,n}

笛卡尔积的每个元素 (d1 , d2 , … , dn) 称作一个 n-元组( n-tuple )

元组的每一个值 di 叫做一个分量( component ) 若 Di 的基数为 mi ,则笛卡尔积的基数为 i

n

im

1

关系基本概念 例:设

D1 为教师集合( T ) = {t1 , t2}

D2 为学生集合( S ) = {s1 , s2 , s3}

D3 为课程集合( C ) = {c1 , c2}

则 D1×D2×D3 是个三元组集合,元组个数为 2×3×2 ,是所有可能的(教师,学生,课程)元组集合

笛卡尔积可表为二维表的形式T S Ct1 s1 c1

t1 s1 c2

t1 s2 c1

… … …

t2 s3 c2

关系基本概念 关系

笛卡尔积 D1×D2×…×Dn 的子集叫做在域 D1 , D2

,…, Dn 上的关系,用 R(D1 , D2 ,…, Dn ) 表示 R 是关系的名字, n 是关系的度或目 关系是笛卡尔积中有意义的子集 关系也可以表示为二维表

关系 TEACH(T, S, C)T S Ct1 s1 c1

t1 s1 c2

t1 s2 c1

t2 s3 c2

元组

属性

关系基本概念 关系的性质

列是同质的 即每一列中的分量来自同一域,是同一类型的数据。 如 TEACH(T, S, C)={(t1 , s1 , c1), (t1 , t2 , c1)} 是错误的

不同的列可来自同一域,每列必须有不同的属性名。 如 P={t1 , t2 , s1 , s2 , s3} , C= {c1 , c2} ,则

TEACH 不能写成 TEACH (P, P, C) ,而应写成 TEACH(T, S, C)

行列的顺序无关紧要 任意两个元组不能完全相同(集合内不能有相同的两

个元素) 每一分量必须是不可再分的数据。满足这一条件的关

系称作满足第一范式( 1NF )的

关系模型 数据结构

单一的数据结构——关系 实体集、联系都表示成关系

DEPT(D# , DN , DEAN)DEPT(D# , DN , DEAN)

S(S# , SN , SEX , AGE , D#)S(S# , SN , SEX , AGE , D#)

C(C# , CN , PC# , CREDIT)C(C# , CN , PC# , CREDIT)

SC(S# , C# , SCORE)SC(S# , C# , SCORE)

PROF(P# , PN, D# , SAL)PROF(P# , PN, D# , SAL)

TEACH(P# , C#)TEACH(P# , C#)

学生

课程

选修

属于

教师

教授

工作 管理

关系模型 候选码( Candidate Key )

关系中的一个属性组,其值能唯一标识一个元组。若从属性组中去掉任何一个属性,它就不具有这一性质了,这样的属性组称作候选码

如 DEPT 中的 D# , DN 都可作为候选码 任何一个候选码中的属性称作主属性主属性 如 SC 中的 S# , C#

主码( Primary Key ) 进行数据库设计时,从一个关系的多个候选码中选定一个

作为主码 如可选定 D# 作为 DEPT 的主码

外部码( Foreign Key ) 关系 R 中的一个属性组,它不是 R 的码,但它与另一个关

系 S 的码相对应,则称这个属性组为 R 的外部码 如 S 关系中的 D# 属性

关系模型

关系模型

关系模型 关系模式

关系的描述称作关系模式,包括关系名、关系中的属性名、属性向域的映象、属性间的数据依赖关系等,记作 R(A1 , A2 ,…, An )

属性向域的映象一般直接说明为属性的类型、长度等

某一时刻对应某个关系模式的内容 ( 元组的集合 )称作关系

关系模式是型,是稳定的 关系是某一时刻的值,是随时间不断变化的

关系模型 关系数据库

其型是关系模式的集合,即数据库描述,称作数据库的内涵 (Intension)

其值是某一时刻关系的集合,称作数据库的外延(Extension)

关系模型 关系操作

关系操作是集合操作,操作的对象及结果都是集合,是一次一集合( Set-at-a-time )的方式

而 非 关 系 型 的 数 据 操 作 方 式 是 一 次 一 记 录( Record-at-a-time )

关系操作可以用关系代数和关系演算两种方式来表示,它们是相互等价的

如用关系代数来表示关系的操作,可以有选择、投影、连接、除、交、差、并等

关系模型 关系模式的完整性

实体完整性 关系的主码中的属性值不能为空值 空值:不知道或无意义 意义:关系对应到现实世界中的实体集,元组对应到实

体,实体是相互可区分的,通过主码来唯一标识,若主码为空,则出现不可标识的实体,这是不容许的

关系模型 参照完整性

如果关系 R2 的外部码 Fk与关系 R1 的主码 Pk相对应,则 R2 中的每一个元组的 Fk值或者等于 R1 中某个元组的 Pk 值,或者为空值

意义:如果关系 R2 的某个元组 t2参照了关系 R1 的某个元组 t1 ,则 t1 必须存在

例如关系 S 在 D# 上的取值有两种可能 空值,表示该学生尚未分到任何系中 若非空值,则必须是 DEPT 关系中某个元组的 D# 值,表示该学生不可能分到一个不存在的系中

关系模型 用户定义的完整性

用户针对具体的应用环境定义的完整性约束条件 如 S# 要求是 8 位整数, SEX 要求取值为“男”或“女”

系统支持 实体完整性和参照完整性由系统自动支持 系统应提供定义和检验用户定义的完整性的机制

关系模型

供应商号 供应商名 所在城市B01 红星 北京

S10 宇宙 上海T20 黎明 天津

Z01 立新 重庆

零件号 颜色 供应商号010 红 B01

312 白 S10

201 蓝 T20

今要向关系 P中插入新行,新行的值分别列出如下。哪些行能够插入?

A .(‘037’ ,‘绿’, null)

B .(null ,‘黄’,‘ T20’)

C .(‘201’ ,‘红’,‘ T20’)

D .(‘105’ ,‘蓝’,‘ B01’)

E .(‘101’ ,‘黄’,‘ T11’)

零件关系 P (主码是“零件号”,外码是“供应商号”)

供应商关系 S (主码是“供应商号”)

关系数据语言概述 关系数据语言的特点

一体化 一般关系系统的数据语言都同时具有数据定义、数据操纵和数据控制语言,而不是分为几个语言。对象单一,都是关系,因此操作符也单一。而非关系型系统,如DBTG ,有对记录的操作,有对系的操作

非过程化 用户只需提出“做什么”,无须说明“怎么做”,存取路径的选择和操作过程由系统自动完成

面向集合的存取方式 操作对象是一个或多个关系,结果是一个新的关系(一

次一关系)。非关系系统是一次一记录的方式

关系数据语言概述 抽象的查询语言

关系代数 用对关系的运算来表达查询,需要指明所用操作

关系演算 用谓词来表达查询,只需描述所需信息的特性

元组关系演算 谓词变元的基本对象是元组变量

域关系演算 谓词变元的基本对象是域变量

关系数据语言概述 具体系统中的实际语言

SQL 介于关系代数和关系演算之间,由 IBM 公司在研制

System R 时提出 QUEL

基 于 Codd 提 出 的 元 组 关 系 演 算语言 ALPHA ,在INGRES 上实现

QBE 基于域关系演算,由 IBM公司研制

关系代数运算汇总 基本运算

一元运算 选择、投影、更名

多元运算 笛卡儿积、并、集合差

其它运算 集合交、自然连接、除、赋值

扩展运算 广义投影、外连接、聚集

修改操作 插入、删除、更新

关系代数的一些记号 给定关系模式 R(A1 , A2 , … , An) ,设 r是它的一个

具体的关系,记为 r(R),tr是关系的一个元组 分量

设 tr ,则 t[Ai]表示元组 t中相应于属性 Ai 的一个分量

属性列Ai={Ai1, Ai2, … ,Aik}{A1, A2, … ,An} ,称 Ai 为属

性组A 表示 {A1 ,A2 , … ,An} 中去掉 A 后剩余的属性组

t[Ai] = ( t[Ai1], t[Ai2], … , t[Aik])

选择运算 基本定义

在关系 r中选择满足给定条件的元组(从行的角度)

FF(r)={t | t (r)={t | t r r F(t) = F(t) = ‘‘ 真真’’ }}F是选择的条件, t r , F(t) 要么为真,要么为假F的形式:由逻辑运算符逻辑运算符连接算术表达式算术表达式而成

逻辑表达式:,,算术表达式: X Y

X , Y 是属性名、常量、或简单函数是比较算符, { , , , , , ≠}

选择运算

A B C

3 6 72 5 77 2 34 4 3

r A<5(r) A B C

3 6 72 5 74 4 3

A<5 C=7(r) A B C

3 6 72 5 7

选择运算 示例

找年龄不小于 20 的男学生

AGE≥20 ∧ SEX=‘male’ ( S ) 找出 Perryridge 分支机构带出 的贷款额大于

$1200 的贷款

投影 定义

从关系 r中取若干列组成新的关系(从列的角度)AA(r) = { t[A] | t(r) = { t[A] | tr } , Ar } , ARR

投影的结果中要去掉相同的行

cbc

fed

cba

CBAB C

b c

e f

r B , C(r)

投影 示例给出所有学生的姓名和年龄

SN, AGE(S)

找 001号学生所选修的课程号C#( S#=001 ( SC ))

找出居住在 Harrison 的所有客户的姓名

并运算 定义

所有至少出现在两个关系中之一的元组集合rrs={ t | ts={ t | tr r t ts }s }

RS

两个关系 r和 s若进行并运算,则它们必须是相容的:

关系 r和 s必须是同元的,即它们的属性数目必须相同对 i , r的第 i 个属性的域必须和 s的第 i 个属性的域相同换言之,对于关系 r(R) 和 s(S) 来说,二者能进行并的充要条件是它们的属性集 R,S 同质

并运算

A B C

3 6 72 5 77 2 34 4 3

R

A B C

3 4 57 2 3

S

A B C

3 6 72 5 77 2 34 4 33 4 5

R S ∪

并运算 示例

求选修了 001号或 002号课程的学生号方案 1 :

∏ S#(C# = 001∨ C# = 002(SC))

方案 2 :∏ S#(C# = 001 (SC))∪∏S#(C# = 002(SC))

差运算 定义

所有出现在一个关系而不在另一关系中的元组集合

rrs ={ t | ts ={ t | trr ¬¬r r s} s}

r和 s必须是相容的

rs

差运算

A B C

3 6 72 5 77 2 34 4 3

r

A B C

3 4 57 2 3

s

A B C

3 6 72 5 74 4 3

r - s A B C

3 6 7

s - r

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

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

002(SC))

求所有有账户而无贷款的客户姓名

交运算 定义

所有同时出现在两个关系中的元组集合

rrs ={ t | ts ={ t | tr r t ts }s }

交运算可以通过差运算来重写

rs = r (r s)

RS

交运算

A B C

3 6 72 5 77 2 34 4 3

r

A B C

3 4 57 2 3

s

A B C

7 2 3

r∩s

交运算 示例求同时选修了 001号和 002号课程的学生号

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

那个对?

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

交运算

求所有既有账户又有贷款的客户姓名。

广义笛卡尔积运算 元组的连串( Concatenation )

若 r = (R1 ,… , Rn) , s = (S1 ,… , Sm) ,则定义 r与 s的连串为:

定义 两个关系 r , s ,其度分别为 n , m ,则它们的

笛卡尔积是所有这样的元组集合:元组的前 n 个分量是 r中的一个元组,后m 个分量是 s 中的一个元组

rs 的度为 r与 s 的度之和, rs 的元组个数为r和 s的元组个数的乘积

rs = (R1 ,… , Rn , S1 ,… , Sm)

rrs={ rs | rs={ rs | rR R s sS }S }

广义笛卡尔积运算

A B

12

r

C D

10102010

E

aabb

s A B

11112222

C D

1019201010102010

E

aabbaabb

r x s

广义笛卡尔积运算 A=C(r x s) r x s

A=C(r x s)

A B

11112222

C D

1019201010102010

E

aabbaabb

A B C D E

122

102020

aab

更名运算 定义

给一个关系表达式赋予名字xx (( EE ))

返回表达式 E的结果,并把名字 x 赋给 E

xx (( AA11 , , AA2 2 ,, ,, AAnn ))(( EE ))返回表达式 E 的结果,并把名字 x 赋给 E ,同时将各属性更名为 A1, A2, , An

关系被看作一个最小的关系代数表达式,可以将更名运算施加到关系上,得到具有不同名字的同一关系。这在同一关系多次参与同一运算时很有帮助

广义笛卡尔积运算 示例

求数学成绩比王红同学高的学生

89数学张军86数学王红93物理张军

成绩课程姓名

∏S. 姓名 ( R. 成绩 S. 成绩 R. 课程 = 数学 S. 课程 = 数学 R. 姓名 = 王红 (RS( R))

R

86数学王红86数学王红86数学王红

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

89数学张军86数学王红93物理张军

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

可不可以优化?

广义笛卡尔积运算 找出所有在 Perryridge 分支机构中有贷款的客户姓名。

连接 定义

从两个关系的广义笛卡儿积中选取给定属性间满足一定条件的元组

A,B为 R 和 S 上度数相等且可比的属性列 为算术比较符,为等号时称为等值连接

R S = t[A]y[B]( R×S)A B

A A B B

r s = { ty | tr s = { ty | tR R y yS S t[A] t[A]y[B] }y[B] }

连接

求数学成绩比王红同学高的学生。

987

654

321

CBAD E

3 16 2

A B C D E

1 2 3 3 11 2 3 6 24 5 6 6 2

R S B < D

R

S

∏S. 姓名 (( 课程 = 数学 姓名 = 王红 (R)) ( 课程 = 数学 S(R)))R. 成绩 <S. 成绩

自然连接 定义

从两个关系的广义笛卡儿积中选取在相同属性列B上取值相等的元组,并去掉重复的行。

自然连接与等值连接的不同 自然连接中相等的分量必须是相同的属性组,并且要在

结果中去掉重复的属性,而等值连接则不必。 当 R 与 S 无相同属性时, R S = R×S

R S = { rs[B] | rR S = { rs[B] | rR R s sS S r[B]=S[B] } r[B]=S[B] }

自然连接

A B

12412

C D

aabab

r

B

13123

D

aaabb

E

s

11112

aaaab

A B C D E

r s

自然连接

示例求 001号学生所在系的名称

∏ DN(S# = 001(S) DEPT)

987

654

321

CBAC D

3 16 2

R

S A B C D

1 2 3 14 5 6 2

R S

自然连接

求 001号学生所在系的名称

∏ DN(S# = 001(S DEPT))

OR

∏ DN(S# = 001(S) DEPT)To be or not to be?That’s a question.

--------Hamlet

除运算 像集( Image Set )

关系 r(X , Z), X, Z 是属性组, x 是 X 上的取值,定义 x 在 r中的象集为

ZZxx = { t[Z] | t = { t[Z] | tr r t[X]= x } t[X]= x }

从 R 中选出在 X 上取值为 x 的元组,去掉 X 上的分量,只留 Z 上的分量

X Z张军同学所选修的全部课程x= 张军

Zx

姓名 课程张军 物理王红 数学张军 数学

课程数学物理

除运算

做法:逐个考虑选课关系 SC 中的元组 r ,求 r在姓名 SN 上的分量 x ,再求 x 在选课关系中的像集课程 Cx ,若 Cx 包含了所有的课程 C ,则 x 是满足条件的一个元组

如何得到选修了全部课程的学生学号?

{ x | x=r[S#] rSC CxC }

选修全部课程的学生

全部课程x同学所选修的全部课程

除运算 除定义

R(X , Y) S(Y) = { x | x=r[x] rR YxS}

R(X, Y) S(Y) = { t | tX(R) uS(tu R) }

RS = X(R) X(X(R) S X , Y(R))

除运算严格的形式化定义: 设 r(R) 和 s(S) 是两个关系,并且 ,即模式 S

中的每个属性都在模式 R 中。关系 是模式 R-S上的关系,即此模式中包含所有在 R 中而不在 S 中的属性。元组 t属于 当且仅当以下两个条件同时成立:1 、 t在 中。

2 、对 s中的每一个元组 ,在 r中都有元组 同时满足以下两个条件:a) b)

RS sr

sr SR

r)(

st rt

][][ StSt sr tSRtr ][

除运算

物理数学课程

=物理王红数学张军数学王红物理张军课程姓名

王红张军姓名

没有选修全部课

程的学生

所有学生选修

全部课程

=数学张军数学王红物理张军课程姓名

物理王红数学张军数学王红物理张军课程姓名

姓名王红

姓名王红张军

姓名王红

= 姓名张军

选修了全部课

程的学生

除运算A B C D

a b c d

a b e f

a b d e

b c e f

e d c d

e d e f

C D

c d

e f

A B

a b

e d

A B

a b

b c

e d

A B C D

a b c d

a b e f

b c c d

b c e f

e d c d

e d e f

R AB (R)S AB (R) CD (S)

AB (R) CD (S)-R

A B C D

b c c d

R S=

A B

a b

b c

e d

A B

b c- =

除运算 示例

求同时选修了 001 和 002号课程的学生号 方案 1 :

∏S# , C#(SC) C# = 001 C# = 002 (C)

方案 2 :∏ S#(SC C# = 001 C# = 002 (C))

哪一个正确?

除运算

课程数学物理

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

课程数学物理

姓名 课程张军 物理王红 数学张军 数学王红 物理

姓名张军王红

= 姓名 成绩张军 93

选修了全部课程并且成绩都

相同的学生

选修了全部课程的学生

赋值运算 定义

为使查询表达简单、清晰,可以将一个复杂的关系代数表达式分成几个部分,每一部分都赋予一个临时关系变量,该变量可被看作关系而在后面的表达式中使用

临时关系变量关系代数表达式 赋值给临时关系变量只是一种结果的传递,而赋值给永久关系则意味着对数据库的修改

赋值运算 示例

RS = X(R) X(X(R) Y(S) R)

用赋值重写为:temp1 X(R)

temp2 X(temp1 Y(S) R)

result temp1 temp2

赋值运算 求未选修 001号课程的学生号

方案 1 :∏ S#(S) ∏- S#(C# = 001 (SC))

方案 2 :∏ S#(C# ≠ 001 (SC)) 哪一个正确?

S# C# G

s1 c1 90

s2 c1 95

s1 c2 96

S# SNAGE

s1 … …

s2 … …

s3 … …

S换为 SC 对不对?

关系代数查询实例 求仅选修了 001号课程的学生号选修 001号课程的学生-选其他课程的学生=∏ S#(C# = 001 (SC)) ∏- S#(SC - C# = 001 (SC))

S# C# SCOREP01 C01 96P02 C01 90P03 C02 88P01 C03 92

S# C# SCOREP01 C01 96P02 C01 90

S# C# SCOREP03 C02 88P01 C03 92

S#P01P02

S#P01P03

S#P02

广义投影 定义

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

F1 , F2 ,… , Fn 是算术表达式 示例

求教工应缴纳的所得税P# , SAL*5/100 (PROF)

p# , INCOME-TAX (P# , SAL*5/100 (PROF))

外连接 例:列出老师的有关信息,包括姓名、工资、所教授的课程∏ P# ,PN , SAL , C# , CN((PROF) PC C)

500李三P04

600

700

800

SAL

孙立P03

钱广P02

赵明P01

PNP#

化学C03

数学C02

物理C01

CNC#

P04C02

P02C02

P01C01

P#C#

数学C02500李三P04

数学C02700钱广P02

物理C01800赵明P01

CNC#SALPNP#问题:有关 P03

号职工的姓名和

工资信息没有显

示出来

外连接 外连接

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

外连接 = 自然连接 + 失配的元组 外连接的形式:左外连接、右外连接、全外连接 左外连接 = 自然连接 + 左侧表中失配的元组右外连接 = 自然连接 + 右侧表中失配的元组全外连接 = 自然连接 + 两侧表中失配的元组

外连接

500李三P04

600

700

800

SAL

孙立P03

钱广P02

赵明P01

PNP#

化学C03

数学C02

物理C01

CNC#

P04C02

P02C02

P01C01

P#C#

数学C02500李三P04

数学C02700钱广P02

物理C01800赵明P01

CNC#SALPNP# 所有老师的信息

P03 孙立 600 null null

外连接

500李三P04

600

700

800

SAL

孙立P03

钱广P02

赵明P01

PNP#

化学C03

数学C02

物理C01

CNC#

P04C02

P02C02

P01C01

P#C#

数学C02500李三P04

数学C02700钱广P02

物理C01800赵明P01

CNC#SALPNP# 所有课程的信息

null null null C03 化学

外连接

500李三P04

600

700

800

SAL

孙立P03

钱广P02

赵明P01

PNP#

化学C03

数学C02

物理C01

CNC#

P04C02

P02C02

P01C01

P#C#

数学C02500李三P04

数学C02700钱广P02

物理C01800赵明P01

CNC#SALPNP#

所有老师和课

程的信息

P03 孙立 600 null nullnull null null C03 化学

聚集函数 定义

求一组值的统计信息,返回单一值 使用聚集的集合可以是多重集,即一个值可以重复出现多次。如果想去除重复值,可以用连接符‘ -’ 将‘ distinct’ 附加在聚集函数名后,如sum-distinct

sum :求和 求全体教工的总工资

sumSAL((PROF)) 求 001号学生的总成绩

sumSCORE(S# = 001 (SC))

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

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

countC#(S# = 001(SC))

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

聚集函数 max :求最大值 min :求最小值 求学生选修数学的最高成绩

maxSCORE(CN = 数学 (C) SC)) 分组

将一个元组集合分为若干个组,在每个分组上使用聚集函数。

属性下标 G 聚集函数属性下标(关系)对此属性在每个分组

上运用聚集函数

按此属性上的值

对关系分组

聚集函数 分组运算 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 )

数据库修改 删除

将满足条件的元组从关系中删除r r E

是对永久关系的赋值运算 例:

删除 001号老师所担任的课程

PC PC P# = 001(PC) 删除没有选课的学生

S S (∏S# (S) ∏S# (SC)) S

关系关系代数表达式

数据库修改 删除 Smith 的所有账户记录

_ " "

_

1 ( )

2 ( 1)

2

customer name Smith

account number

temp depositor

temp temp

account account temp

_ " "( )customer name Smithdepositor depositor depositor

account

数据库修改

0 501 ( )

1amount amounttemp loan

loan loan temp

borrower borrower

删除贷款额在 0~50之间的所有贷款

borrower _ ( 1)loan number temp

数据库修改 删除位于 Needham 的分支机构的所有账户

" "

_ , _ ,

1 (

( 1)

branch city Needhan

branch name account number balance

temp account

account account temp

depositor depositor

)branch

_( ( 1)account number temp )depositor

数据库修改 插入

插入一个指定的元组,或者插入一个查询结果r r E

示例:新加入一个老师PC PC {(P07 ,“周正” , 750 , D08)}

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

∏C#(CN = 数学 (C))

数据库修改 插入

插入这样的信息: Smith 在 Perryridge 分支机构的账户A-973 上有 $1200 ,则应写作:

{" ", 973,1200}account accout Perryridge A

数据库修改 插入对 Perryridge 分支机构的每个贷款客户赠送一个新的 $200 的存款客户,并将其贷款号码作为此账户的号码:

_ "P "1 (branch name erryridgetemp loan )borrower

_ , _

_ , _

2 ( 1)

( 2 {200})

( 1)

branch name loan number

customer name loan number

temp temp

account account temp

depositor depositor temp

数据库修改 更新

利用广义投影改变元组的某些属性上的值

其中 Fi当第 i 个属性不被修改时是 r 的第 i 个属性,当第

i 个属性将被修改时是一个只涉及常量和属性 i 的表达式,表达式给出了此属性的新值。

1 2, , , ( )nF F Fr r

数据库修改 更新

如果只希望选出一些元组并只对这些元组进行修改,可以用一下表达式

其中 P 代表用来选择需要修改的元组的条件。1 2, , , ( ( )) ( ( ))

nF F F P Pr r r r

数据库修改 更新

示例:给每位老师上调 10%的工资PC P# , PN , SAL SAL* 1.1 , D# (PC)

示例:对工资超过 800 的老师征收 5%所得税PC P# , PN , SAL SAL* 0.95 , D# (SAL 800 (PC))

∪P# , PN , SAL , D# (SAL 800 (PC))

数据库修改 更新

示例:付给所有账户 5% 的利息

示例:余额 $1000 以上的账户得到 6% 的利息,而其他账户得到 5% 的利息

_ , _ , *1.05 ( )branch name account number balance balanceaccount account

account

_ , _ , *1.06 10000( ( ))branch name account number balance balance balance account

_ , _ , *1.05 10000( ( ))branch name account number balance balance balance account

视图 定义

视图是命名的、从基本表中导出的虚表,它在物理上并不存在,存在的只是它的定义

视图中的数据是从基本表中导出的,每次对视图查询都要重新计算

create view view_name as < 查询表达式 > 视图之上可以再定义视图 视图 Vs 临时关系变量

视图 V1 视图 V2

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

视图 视图的优点

个性化服务 简化了用户观点,使不同用户可以从不同角度观察同一

数据 安全性

“知必所需”,限制用户数据的访问范围 逻辑独立性

视图作为基本表与外模式之间的映象

视图 示例

给出老师所教授课程的信息create view p_course

As ∏PN , CN(PROF PC C)

给出李明老师所教授的课程名称PN = 李明 (p_course)

视图 视图更新

信息缺失create view p_salary as ∏PN , SAL(PROF)

在视图 p_salary 上执行:p_salary p_salary ∪{( 李明 , 800)}

在基本表 PROF 上执行:PROF PROF ∪{( 李明 , 800)}

往 PROF 中加入元组 (李明 , 800) ,缺主码缺主码 P#P#信信息息

视图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, 叶开 )}

null = null?null = null?

视图S# SN AGE D#

s1 张三 20 d1

s2 李四 23 d2

s3 王五 22 d3

null 李寻欢

null null

D# DN DEAN

d1 物理 莫愁d2 数学 乐天d3 化学 安然null null 叶开

SN DEAN

张三 莫愁李四 乐天王五 安然李寻欢

叶开

连接属性连接属性

视图定义中不包括连接属性视图定义中不包括连接属性 D#

因此 SDEPT 结果中不包括 (叶开 , 伍魁 )

带标识的带标识的 nullnull:⊥:⊥ii ⊥ ⊥i i = ⊥= ⊥i i ⊥⊥i i ≠≠ ⊥ ⊥k k

视图 信息歧义

在视图 s_dean 上执行:s_dean SN , DEAN安然 (SN = 李四 (s_dean))

S# SN AGE D#

s1 张三 20 d1

s2 李四 23 d2

s3 王五 22 d3

D# DN DEAN

d1 物理 莫愁d2 数学 乐天d3 化学 安然

SN DEAN

张三 莫愁李四 乐天王五 安然

S# SN AGE D#

s1 张三 20 d1

s2 李四 23 d3

s3 王五 22 d3

D# DN DEAN

d1 物理 莫愁d2 数学 安然d3 化学 安然

OR

视图 物化视图

视图的计算结果被实际存储起来 物化视图可以看成是数据库的 cache 查询物化视图比重新计算视图要快许多 需要进行物化视图与基本表之间的一致性维护 应用场合

任何需要对派生数据的快速访问、或视图的重新计算非常昂贵、或查询需要耗费非常高的 CPU 和磁盘吞吐量的应用场合,都可以使用物化视图来提高效率

视图 如一个零售数据库,存储 terabytes 数量级的几

个月的销售数据。而诸如某个商店的某件商品的销售总量这样的查询,每天可能要被零售商、仓库管理员、市场部人员执行若干次。这时可以将商品的销售总量查询结果商品的销售总量查询结果定义为物化视图

如一个处理定单与产品的事务系统,大量的查询需要连接定单与产品表,可以将定单与产品表的定单与产品表的连接结果连接结果定义为物化视图

元组关系演算 形式化定义

{ t | P ( t ) }表示所有使谓词P为真的元组集合

t为元组变量 如果元组变量前有“全称”()或“存在”()量词,

则称其为约束变量,否则称为自由变量 P是公式

由原子公式和运算符组成

元组关系演算 原子公式

s∈R s是关系 R 中的一个元组

s[x] u[y] s[x] 与 u[y] 为元组分量,他们之间满足比较关系

s[x] c 分量 s[x] 与常量 c之间满足比较关系

元组关系演算 公式的递归定义

原子公式是公式 如果 P是公式,那么┑ P也是公式 如果 P1 , P2 是公式,则 P1 P2 , P1 P2 , P1 P2

也是公式 如果 P(t) 是公式, R 是关系,则 tR (P(t)) 和 tR (P(t)) 也是公式

元组关系演算 公式的等价性

P1 P2 ┑(┑P1 ┑P2) tR (P(t)) ┑t R (┑P(t)) P1 P2 ┑P1 P2

p q ┑ p p q ┑ p qT T F T T

T F F F F

F T T T T

F F T T T

元组关系演算

A B C

1 2 34 5 67 8 9

A B C

1 2 33 4 65 6 9

R S

A B C

3 4 65 6 9

{ t | t S t[A] >2}

A B C

4 5 67 8 9

{ t | t R ┑tS }

元组关系演算

A B C

1 2 33 4 6

{ t | tS uR(t[C] < u[B])}

A B C

4 5 67 8 9

{ t | tR uS(t[C] > u[A])}

R.B S.C R.A

5 3 48 3 78 6 78 9 7

{ t | vS uR(u[A]>v[B] t[A]=u[B] t[B]=v[C] t[C]=u[A]))}

元组关系演算 表达式的安全性

元组关系演算有可能会产生无限关系,这样的表达式是不安全的

如 {t | ┑(t R)} ,求所有不在 R 中的元组 引入公式 P的域概念,用 dom(P) 表示 dom(P) = 显式出现在 P 中的值 + 在 P 中出现的

关系的元组中出现的值(不必是最小集) 如 dom ( t | ┑(t R) ) 是 R 中出现的所有值的集合 如果出现在表达式 {t | P ( t ) } 结果中的所有值均来自 dom(P) ,则称 {t | P ( t ) } 是安全的

元组关系演算

A B

A1 B1

A1 B2

A2 B3

dom(┑(t R)) = {A1 , A2, B1 , B2 , B3}

A B

A1 B3

A2 B1

A2 B4

R { t |┑(t R) }

元组关系演算 示例

找出工资在 800 元以上的老师

{t | tPROF t[SAL] > 800} 找出工资在 800 元以上的老师的姓名

{t | sPROF ( t[PNAME] s[PNAME] s[SAL] >

800 )}

给出计算机系老师的姓名{t | uDEPT ( u[DNAME] = “ 计算机系” sPROF

( s[DNO] = u[DNO] t[PNAME] s[PNAME] ))}

元组关系演算 求选修了全部课程的学生号{t | uC ( sSC ( s[CNO] = u[CNO] t[SNO]

s[SNO] ))} 求选修了张军同学所选修的全部课程的学生姓名

课程,张军选之 所求同学选之{t | uC ( sSC wS ( s[CNO] = u[CNO]

w[SNO] s[SNO] w[SNAME] = “张军” ))

s¹SC w¹S ( s¹[CNO] = u[CNO] w¹[SNO] s¹[SNO] w¹[SNAME] = t[SNAME] )}

元组关系演算 元组关系演算与关系代数的等价性

投影∏ A( R ) = { t | sR ( s[A] = t[A] ) }

选择F(A)(R) = { t | tR F(t[A]) }

广义笛卡儿积R(A) S(B) = { t | uRsS( t[A] = u[A]

t[B] = s[B])} 并

RS={ t | tR tS} 交

RS={ t | tR ┑tS}

元组关系演算R(A, B) 是二元关系{ t | t∈R u∈R (t[A] ≠u[A] t[B]≠u[B])}

求 R 中的那些元组,其中在 R 中存在与之不同的元组,因此当 R 中元组个数为 0 或 1 时,结果为空;当 R 中元组个数大于 1 时,表达式的结果是 R 本身

{ t | t∈R u∈R (t[A] ≠u[A] ∧ t[B]≠u[B])}

all or noneall or none

域关系演算 形式化定义

{ < x1 , x2 , … , xn > | P ( x1 , x2 , … , xn ) }

xi 代表域变量, P为由原子构成的公式 原子公式

< x1 , x2 , … , xn > R xi 是域变量或域常量

x y 域变量 x 与 y之间满足比较关系

x c 域变量 x 与常量 c之间满足比较关系

域关系演算

A B C

1 2 34 5 67 8 9

A B C

1 2 33 4 65 6 9

R SA B C

4 5 6

R1={< x, y, z> | < x, y, z>R x<5 y>3}

A B C

1 2 34 5 67 8 93 4 6

R2={< x, y, z> | < x, y, z>R (< x, y, z>S y=4)}

D E

7 54 8

W

B D A

5 7 48 7 78 4 7

R2={< x, y, z> | (u) (v)

( < z, x, u>R <y, v>W u>v)}

域关系演算 示例

找出工资在 800 元以上的老师{< a , b , c , d , e > | < a , b , c , d , e > PROF e >

800}

找出工资在 800 元以上的老师的姓名

{< b > | a , c , d , e ( < a , b , c , d , e > PROF

e > 800 )} 给出计算机系老师的姓名{< b > | l, m, n, s ( < l, m, n, s > DEPT m =“计算机系” a , c , d , e ( < a , b , c , d , e >

PROF l = d ) ) }

域关系演算

{ t | t∈R u∈R (t[A] = u[B] ∧ t[B] = u[A])}

R(A, B) 是二元关系求 R 中的那些元组,其属性列交换后组成的元组仍在 R 中

{<a, b>| <a, b>∈R <b, a>∈R}

∏R.A, R.B(R.A=S.BR.B=S.A(R S(R))

总结考虑以下关系数据库。对于下述查询中的每一个,给出一个关系代数表达式、一个元祖关系演算表达式和一个域关系演算表达式:Employee(employee_name,street,city)Works(employee_name,company_name,salary)Company(company_name,city)Manages(employee_name,manager_name)

1 、找出 First Bank Corporation 的所有员工姓名

2 、找出 First Bank Corporation 的所有年收入在 $10000以上的员工姓名和居住的街道、城市。

总结3 、找出与其经理居住在同一城市同一街道的所有员工姓名。

4 、找出比 Small Bank Corporation 的所有员工收入都高的员工姓名。

5 、用关系代数表达式写出如下应用: a、为数据库中所有工资不高于 $100000 的经理提工资10% ,而高于 $100000 的经理提工资 3% 。 b、 Small Bank Corporation 的员工的所有元组。

总结给定如下关系模式:

R=(A,B,C)S=(D,E,F)

设 r(R) 和 s(S)已知。给出与下面表达式等价的元祖关系演算表达式:

))((, srDCFA

总结设 R= ( A,B,C ), r1 和 r2 都是模式 R 上的关系。给出与下述表达式等价的域关系演算表达式:

)( 1, rBA ⋈ )( 2, rCB

总结设 R= ( A,B )且 S= ( A,C ), r(R) 和 s(S) 是关系。给出与下述域关系演算表达式等价的关系代数表达式:

))}212,1,(2,1,(|{ bbrbcrbabbscaca

总结用银行的例子,以如下方式书写关系代数查询以找出两个以上客户共有的账户:a、用聚集函数b、不用任何聚集函数