Upload
lynn-vang
View
38
Download
7
Embed Size (px)
DESCRIPTION
第三章 关系模型. 提纲. 关系基本概念 关系模型 关系代数 元组关系演算 域关系演算 全 关系系统. 简单即是有力. ---- 燧人氏语录. Any intelligent fool can make things bigger and more complex... It takes a touch of genius and a lot of courage to move in the opposite direction. ----Albert Einstein. E=MC 2. TABLE - PowerPoint PPT Presentation
Citation preview
2
关系基本概念 关系模型 关系代数 元组关系演算 域关系演算 全关系系统
提纲
Any intelligent fool can make things
bigger and more complex...
It takes a touch of genius and a lot of
courage to move in the opposite direction
E=MC2
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
关系模型回顾 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)} 是错误
的 不同的列可来自同一域,每列必须有不同的属性名 行列的顺序无关紧要 任意两个元组不能完全相同(集合内不能有相同的
两个元素) 每一分量必须是不可再分的数据。满足这一条件的
关系称作满足第一范式( 1NF )的
关系的性质
T# S# C#
t1 s1 c1
t1 t2 c2
列同质E# ENAM
EMGR
e1 TOM e2
e2 jerry null
来自同一域的不同列
S# C#
s1 {c1,c2,c3}
分量不可再分
S# C#
s1 c1
s1 c2
s1 c3
嵌套关系1NF 关系
关系模型:数据结构
单一的数据结构——关系 实体集、联系都表示成关系
DEPT(D# , DN , DEAN)
S(S# , SN , SEX , AGE , D#)
C(C# , CN , PC# , CREDIT)
SC(S# , C# , SCORE)
PROF(P# , PN, D# , SAL)
学生
选修
属于
系
教师
工作 管理
课程 先修
关系模型:数据结构DEPT
D# DN DEAN
S
S# SN SEX AGE D#
C
C# CN CREDIT
PC#
PROF
P# PN SAL D#
SC
S# C# SCORE
关系模型:码
候选码( Candidate Key ) 关系中的一个属性组,其值能唯一标识一个元组。
若从属性组中去掉任何一个属性,它就不具有这一性质了,这样的属性组称作候选码
如 DEPT 中的 D# , DN 都可作为候选码 任何一个候选码中的属性称作主属性 如 SC 中的 S# , C#
关系模型:码
主码( PK: Primary Key ) 进行数据库设计时,从一个关系的多个候选码中
选定一个作为主码 如可选定 D# 作为 DEPT 的主码
外码( FK: 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# SNAME D#
s1 TOM d1
s2 JERRY null
s3 BOB d3
D# DNAME
d1 maths
d2 physics
关系模型:完整性
用户定义的完整性 用户针对具体应用环境定义的完整性约束条件 S# 要求是 8 位整数, SEX 要求取值为“男”或
“女” 系统支持
实体完整性和参照完整性由系统自动支持 系统提供定义和检验用户定义的完整性的机制
关系模型:完整性
供应商号 供应商名 所在城市B01 红星 北京
S10 宇宙 上海T20 黎明 天津
Z01 立新 重庆
零件号 颜色 供应商号010 红 B01
312 白 S10
201 蓝 T20
今要向关系 P 中插入新行,新行的值分别
列出如下。哪些行能够插入?
1.(null ,‘黄’,‘ T20’)
2.(‘201’ ,‘红’,‘ T20’)
3.(‘037’ ,‘绿’, null)
4.(‘105’ ,‘蓝’,‘ B01’)
5.(‘101’ ,‘黄’,‘ T11’)
零件关系 P
( 主码是“零件号”,外码是“供应商号” )
供应商关系 S
( 主码是“供应商号” )
关系数据语言概述 关系数据语言的特点
一体化 一般关系系统的数据语言都同时具有数据定义、数据操纵和数据控制语言,而不是分为几个语言。对象单一,都是关系,因此操作符也单一
非过程化 用户只需提出“做什么”,无须说明“怎么做”,存取路径的选择和操作过程由系统自动完成
面向集合的存取方式 操作对象是一个或多个关系,结果是一个新的关系(一
次一关系)。非关系系统是一次一记录的方式
关系数据语言概述 抽象的查询语言
关系代数 用对关系的运算来表达查询,需要指明所用操作
关系演算 用谓词来表达查询,只需描述所需信息的特性
元组关系演算 谓词变元的基本对象是元组变量
域关系演算 谓词变元的基本对象是域变量
关系数据语言概述 具体系统中的实际语言
SQL 介于关系代数和关系演算之间,由 IBM 公司在研制
System R 时提出 QUEL
基 于 Codd 提 出 的 元 组 关 系 演 算语言 ALPHA , 在INGRES 上实现
QBE 基于域关系演算,由 IBM公司研制
关系代数运算汇览 基本运算
一元运算 选择、投影、更名
多元运算 笛卡儿积、并、集合差
扩展运算 集合交、连接、自然连接、外连接
其它运算 赋值、广义投影、插入、删除、更新
选择运算 基本定义
在关系 R 中选择满足给定条件的元组(从行的角度)
F(R)={t | t R , F(t) = ‘ 真’ }
F 是选择的条件, t R , F(t) 要么为真,要么为假
F 的形式:由逻辑运算符连接算术表达式而成逻辑表达式:,,算术表达式: X Y
X , Y 是属性名、常量、或简单函数是比较算符, { , , , ,
, ≠}
选择运算
A B C
3 6 7
2 5 7
7 2 3
4 4 3
RA<5(R)
A B C
3 6 7
2 5 7
4 4 3
A<5 C=7(R)
A B C
3 6 7
2 5 7
选择运算 示例
找年龄不小于 20 的男学生
AGE≥20 ∧ SEX=‘M’(S)
投影 定义
从关系 R 中取若干列组成新的关系(从列的角度)
A(R) = { t[A] | tR } , AR 投影的结果中要去掉相同的行
cbc
fed
cba
CBA B C
b c
e f
R B , C(R)
投影 示例给出所有学生的姓名和年龄
SN, AGE(S)
找 001号学生所选修的课程号C#( S#=001 (SC) )
更名运算 定义
给一个关系表达式赋予名字x(E)
返回表达式 E 的结果,并把名字 x赋给 E
x(A1 , A2 , , An )(E)返回表达式 E 的结果,并把名字 x赋给 E ,同时将各属性更名为 A1 , A2 , , An
关系被看作一个最小的关系代数表达式,可以将更名运算施加到关系上,得到具有不同名字的同一关系。这在同一关系多次参与同一运算时很有帮助
并运算 定义
所有至少出现在两个关系中之一的元组集合RS ={ r | rR rS }
RS
关系 R 和 S 进行并运算的前提是它们必须是相容的:
关系 R 和 S 必须是同元的,即它们的属性数目必须相同
对 i , R 的第 i 个属性的域必须和 S 的第 i 个属性的域相同
并运算
A B C
3 6 7
2 5 7
7 2 3
4 4 3
R
A B C
3 4 5
7 2 3
S
A B C
3 6 7
2 5 7
7 2 3
4 4 3
3 4 5
R S ∪
并运算 示例
求选修了 001号或 002号课程的学生号方案 1 :
∏S#(C# = 001∨ C# = 002(SC))
方案 2 :∏S#(C# = 001 (SC))∪∏S#(C# = 002(SC))
差运算 定义
所有出现在一个关系而不在另一关系中的元组集合
RS ={ r | rR rS }
R 和 S 必须是相容的
RS
差运算
A B C
3 6 7
2 5 7
7 2 3
4 4 3
R
A B C
3 4 5
7 2 3
S
A B C
3 6 7
2 5 7
4 4 3
R - S
A B C
3 4 5
S - R
差运算 示例
求选修了 001号而没有选 002号课程的学生号
错误的写法:∏S#(C# = 001 C# ≠ 002(SC))
正确的写法:∏S#(C# = 001 (SC)) -∏ S#(C# = 002(SC))
交运算 定义
所有同时出现在两个关系中的元组集合
RS ={ r | rR rS }
交运算可以通过差运算来重写
RS = R (R S)
RS
交运算
A B C
3 6 7
2 5 7
7 2 3
4 4 3
R
A B C
3 4 5
7 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)
RS={ rs | rR sS }
笛卡尔积运算
A B
1
2
r
C D
10
10
20
10
E
a
a
b
b
s A B
1
1
1
1
2
2
2
2
C D
10
10
20
10
10
10
20
10
E
a
a
b
b
a
a
b
b
r x s
A B C D E
1
2
2
10
20
20
a
a
b
A=C(r x s)
笛卡尔积运算 求选修 c1 课程的学生姓名
S# SN …
s1 tom
s2 jerry
S# C# …
s1 c1
s2 c2
S.S# SN … SC.S#
C# …
s1 tom s1 c1
s1 tom s2 c2
s2 jerry s1 c1
s2 jerry s2 c2 SN cCSSCSS SCS ))(( 1##.#.
笛卡尔积运算 求数学成绩比王红同学高的学生
∏S. 姓名 ( R. 姓名 = 王红 R. 课程 = 数学 S. 课程 = 数学 R. 成绩 S. 成绩 (RS( R))
89数学张军
86数学王红
93物理张军
成绩课程姓名
R
86数学王红
86数学王红
86数学王红
R. 成绩R. 课程R. 姓名
89数学张军
86数学王红
93物理张军
S. 成绩S. 课程S. 姓名
R R
连接 定义
从两个关系的广义笛卡儿积中选取给定属性间满足一定条件的元组
A,B 为 R 和 S 上度数相等且可比的属性列 为算术比较符,为等号时称为等值连接
R S = r[A]S[B]( R×S)A B
A BR S = { rs | rR sS r[A]S[B] }
连接
求数学成绩比王红同学高的学生
987
654
321
CBA D E
3 1
6 2
A B C D E
1 2 3 3 1
1 2 3 6 2
4 5 6 6 2
R S B < D R S
∏S. 姓名 (( 课程 = 数学 姓名 = 王红 (R)) ( 课程 = 数学 S(R)))
R. 成绩 <S. 成绩
自然连接 定义
从两个关系的广义笛卡儿积中选取在相同属性列B 上取值相等的元组,并去掉重复的列
自然连接与等值连接的不同 自然连接中相等的分量必须是相同的属性组,并且要在
结果中去掉重复的属性,而等值连接则不必
R S = { rs[B] | rR sS r[B]=S[B] }
自然连接
A B
1
2
4
1
2
C D
a
a
b
a
b
r
B
1
3
1
2
3
D
a
a
a
b
b
E
s
1
1
1
1
2
a
a
a
a
b
A B C D E
r s
987
654
321
CBA C D
3 1
6 2
R S
A B C D
1 2 3 1
4 5 6 2
R S
自然连接
求 001号学生所在系的名称
∏DN(S# = 001(S) DEPT)
关系 R(A, B), S(A, C),R 与 S 中元组个数分别为 10 , 15 ,试填写下表
SR
A 是 R 的主码
无任何条件
最大元组数最小元组数表达式条件
SR
AASR )()(
AASR )()(
外连接 例:列出所有老师的有关信息,包括姓名、工资、
所教授的课程∏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
号 职 工 的 姓 名 和
工 资 信 息 没 有 显
示出来
外连接
教工号 教工名 年龄 工资 论文 教学 项目 服务S1 √ √ √ √ √
S2 √ √ √ √ √
S3 √ √ √ √ √
S4 √ √ √ √ √
S5 √ √ √ √ √ √
由表生成报表
外连接 外连接
为避免自然连接时因失配而发生的信息丢失,可以假定往参与连接的一方表中附加一个取值全为空值的行,它和参与连接的另一方表中的任何一个未匹配上的元组都能匹配,称之为外连接外连接 = 自然连接 + 未匹配元组 (悬挂元组 )
外连接的形式:左外连接、右外连接、全外连接 左外连接 = 自然连接 + 左侧表中未匹配元组右外连接 = 自然连接 + 右侧表中未匹配元组全外连接 = 自然连接 + 两侧表中未匹配元组
外连接
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
外连接的结合律成立否
外连接的结合律
R1 R2 R3
A B B C A C
1 2 2 3 4 5
(R1 R2) R3 R1 (R2 R3)
A B C A B C
1 2 3 1 2 null
4 null 5 null 2 3
4 null 5
外连接
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 null
null null null C03 化学
半连接
A B C
a b c
d b c
b b f
c a d
B C D
b c d
b c e
e b a
a d b
R S
R SA B C
a b c
d b c
c a d
S RB C D
b c d
b c e
a d b反半连接?
除运算 象集( Image Set )
关系 R(X , Z), X, Z 是属性组, x 是 X 上的取值,定义 x 在 R 中的象集为
Zx = { t[Z] | tR 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[SN] 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) Y(S) R)
除运算
物理
数学
课程
=
物理王红
数学张军
数学王红
物理张军
课程姓名
王红
张军
姓名
没有选修全部课
程的学生
所有学生选修
全部课程
=数学张军
数学王红
物理张军
课程姓名
物理王红
数学张军
数学王红
物理张军
课程姓名
姓名
王红
姓名
王红
张军
姓名
王红 =
姓名
张军
选修了全部课
程的学生
除运算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 dR S=
A B
a b
b c
e d
A B
b c- =
①
④
②
③
除运算 示例
求选修了所有课程的学生SC(S#, C#, G)
方案 1 :∏S# , C#(SC) ∏C#(C)
方案 2 :
∏S#(SC ∏C#(SC)) 哪一个正确?
除运算
课程数学物理
=
姓名 课程 成绩张军 物理 93
王红 数学 86
张军 数学 93
王红 物理 92
课程数学物理
姓名 课程张军 物理王红 数学张军 数学王红 物理
姓名张军王红
=姓名 成绩张军 93
选修了全部课程并且成绩
都相同的学生
选修了全部课程的学
生
关系代数查询实例 求没有选修 c1号课程的学生
所有学生 – 选修了 c1号课程学生
仅选 c1 号课程
之外的其他学生
# # 1# ))(()(S S cC SCSC
# 1# ))((S cC SC
S# C#
s1 c1
s1 c2
s2 c1
s3 c2
关系代数查询实例
求仅选修了 c1 号课程的学生号
选修 c1 号课程的学生-仅选 c1 号课程之外的学生
S# C#
s1 c1
s1 c2
s2 c1
s3 c2
S# C#
s1 c1
s2 c1
S# C#
s1 c2
s3 c2
# 1##
))(()(S cCS
SCSC
# 1## 1# ))(())((S cCS cC SCSCSC
关系代数查询实例 求选修 c1 课程比 s1 学生的该门课程成绩高
的学生
SC SC(s1, c1, g1, ?, c1, g2), g1 < g2
)))()((( ..1#.1#.1#.#.SCSC SRGSGRcCScCRsSRSS
S# C# G
s1 c1 g1
? c1 g2
关系代数查询实例 求每门课程的先修课的先修课
C C(c3, c2, c2, c1)
C# PC#
c1 null
c2 c1
c3 c2
)))((( #.#.#.,#.CC RCRPCCPCRCC
找到所有的
先修课?
关系代数查询实例 求选修了至少两门课的学生
SC SC(s1, c1, g1, s1, c2, g2), c1 c2
)))()((( #.#.#.#.#.SCSC SRCSCRSSSRSR
求选修了至少 N 门课的学生
求只选修了 1 门课的学生
S# C# G
s1 c1 g1
s1 c2 g2
关系代数查询实例 求最低的成绩
S# C# G
s1 c1 60
s1 c2 70
s2 c1 80
s3 c2 90
))()((.. SCSC SRGSGR
R.S#
R.C# R.G
S.S#
S.C# S.G
s1 c1 60 s1 c2 70
s1 c1 60 s2 c1 80
s1 c1 60 s3 c2 90
s1 c2 70 s2 c1 80
s1 c2 70 s3 c2 90
s2 c1 80 s3 c2 90
)))()((()( ...SCSCSC SRGSGRGSG
关系代数查询实例 求选修课程中包含了所有 S01号学生所
选修课程的学生号
))(( )( 01S#C#C# S#SCSC s
,
关系代数查询实例 stock(s#, date, price)找出一直上涨的股票上涨过的股票: if d1 > d2 then p1 > p2
找出下跌过的股票, d1 > d2 and p1 < p2
))()((( ....#.#.#.stockstock SRpriceSpriceRdateSdateRSSSRsR
))()((( ....#.#.#.stockstock SRpriceSpriceRdateSdateRSSSRsR
关系代数查询实例
source destination
p1 p2
p1 p3
p2 p1
source destination
p1 p2
p1 p3
guanxi(source, destination)
))()((( ...,.guanxiguanxiguanxi SRSSDRDSSS
互相认识的人,互不认识的人,认识所有人的人,被所有人认识的人具有间接传递性的认识
赋值运算 定义
为使查询表达简单、清晰,可以将一个复杂的关系代数表达式分成几个部分,每一部分都赋予一个临时关系变量,该变量可被看作关系而在后面的表达式中使用
临时关系变量关系代数表达式 赋值给临时关系变量只是一种结果的传递,而赋值给永久关系则意味着对数据库的修改
赋值运算 示例
RS = X(R) X(X(R) Y(S) R)
用赋值重写为:temp1 X(R)
temp2 X(temp1 Y(S) R)
result temp1 temp2
广义投影 定义
在投影列表中使用算术表达式来对投影进行扩展F1 , F2 , … , Fn (E)
F1 , F2 ,… , Fn 是算术表达式 示例
求教工应缴纳的所得税P# , SAL*5/100 (PROF)
p# , INCOME-TAX (P# , SAL*5/100 (PROF))
数据库修改 删除
将满足条件的元组从关系中删除r r E
是对永久关系的赋值运算 例:
删除 001号老师所担任的课程PC PC PC# = 001(PC)
删除没有选课的学生S S (∏S# (S) ∏S# (SC)) S
关系关系代数表达式
数据库修改 插入
插入一个指定的元组,或者插入一个查询结果r r E
示例:新加入一个老师PC PC {(P07 ,“周正” , 750 , D08)}
示例:加入计算机系学生选修“数学”的信息SC SC ∏S# (S DN = 计算机系 (DEPT))
∏C#(CN = 数学 (C))
数据库修改 更新
利用广义投影改变元组的某些属性上的值r F1 , F2 , … , Fn (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))
包 允许重复的集合称为包( bag ),或者多集
( multi-set ){1, 2, 2, 3, 3, 3}
引入包的原因 效率,不用去重 合理地计算聚集函数的值
A B
1 2
3 4
1 2
1 2
包的关系代数运算 包的选择、投影、笛卡尔积和集合上是一样
的,只是需要保留重复即可 包的并、交、差
假定一个元组 t 在包 R 中重复出现了 n 次,在包s 中重复出现了 m 次,则:
在 RS 中, t重复出现 n+m 次 在 R- S 中, t重复出现 n-m 次 在 RS 中, t重复出现 min(n, m) 次
包的关系代数运算 哪些对包成立,哪些不成立?
(R S) T = R (S T) (R S) T = R (S T) R (S T) = (R S) (R T)
A B(R) = A(R) B(R)
(R S) - T = R (S - T) R (S T) = (R S) (R T)
A B(R) = A(R) B(R)
作为约束语言的关系代数 关系代数表达约束的方式
R= R S
对各种约束的表达 参照完整性
R(A, B), S(B, C) , S 中的 B 是参照 R 的外码
R(A, B) ,要求在 A 上相等的在 B 上也相等
B BRS )()(
))((.... RR SBSBRASAR
如何表达唯一性?
元组关系演算 形式化定义
{ 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 3
4 5 6
7 8 9
A B C
1 2 3
3 4 6
5 6 9
R S
A B C
3 4 6
5 6 9
{ t | t S t[A] >2}
A B C
4 5 6
7 8 9
{ t | t R ┑tS }
元组关系演算
A B C
1 2 3
3 4 6
{ t | tS uR(t[C] < u[B])}
A B C
4 5 6
7 8 9
{ t | tR uS(t[C] > u[A])}
R.B S.C R.A
5 3 4
8 3 7
8 6 7
8 9 7
{ t | uR vS (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 B2
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[D#] = u[D#] t[PNAME]
s[PNAME] ))}
元组关系演算 求选修了全部课程的学生号
{t | uS vC ( wSC ( v[C#]=w[C#] u[S#]=w[S#] t[S#]u[S#] ))}
求选修了张军同学所选修的全部课程的学生姓名课程,张军选之 所求同学选之
{t | uC ( sSC wS ( s[C#] = u[C#] w[S#] s[S#] w[SNAME] = “张军” ))
s¹SC w¹S ( s¹[C#] = u[C#] w¹[S#] s¹[S#] 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 | uR sS( t[A] = u[A]
t[B] = s[B])} 并
RS={ t | tR tS} 交
RS={ t | tR ┑tS}
元组关系演算
求 R 中的那些元组,其中在 R 中存在与之不同的元组,因此当 R 中元组个数为 0 或 1 时,结果为空;当 R 中元组个数大于 1 时,表达式的结果是 R 本身
R(A, B) 是二元关系
{ t | t∈R u∈R (t[A] ≠u[A] t[B]≠u[B])}
域关系演算 形式化定义
{ < 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 3
4 5 6
7 8 9
A B C
1 2 3
3 4 6
5 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 3
4 5 6
7 8 9
3 4 6
R2={< x, y, z> | < x, y, z>R (< x, y, z>S y=4)}
D E
7 5
4 8
W
B D A
5 7 4
8 7 7
8 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))
蝜蝂 关系系统 全关系系统的十二条准则
关系系统 关系系统的定义
一个系统可定义为关系系统,当且仅当它: 支持关系数据库(关系数据结构) 支持选择、投影和连接运算,对这些运算不必定
义任何存取路径 关系系统的分类
表式系统 (最小 ) 关系系统 关系完备系统 全关系系统
关系系统 表式系统
仅支持关系 ( 即表 ) 数据结构,不支持集合级的操作。表式系统不能算关系系统
(最小 ) 关系系统 仅支持关系数据结构和三种关系搡作。许多微机
关系数据库系统如 FoxPro 等就属于这一类 关系上完备的系统
支持关系数据结构和所有的关系代数操作。 90 年代初的许多关系数据库管理系统属于这一类
全关系系统 这类系统支持关系模型的所有特征
关系系统
表式系统 最小关系系统 关系完备的系统 全关系系统
S M
I
S M
I
S M
I
S M
I
全关系系统的十二条准则 准则 0 :
一个关系型的 DBMS 必须能完全通过它的关系能力来管理数据库
准则 1 :信息准则 关系型 DBMS 的所有信息都应在逻辑一级上用一
种方法即表中的值显式地表示 准则 2 :保证访问准则
依靠表名、主码和列名的组合,保证能以逻辑方式访问关系数据库中的每个数据项(分量值)
以关联寻址代替面向机器的访问方式
全关系系统的十二条准则 准则 3 :空值的系统化处理
全关系型的 DBMS 应支持空值的概念,并用系统化的方式处理空值
准则 4 :基于关系模型的动态的联机数据字典 数据库的描述在逻辑级上应该和普通数据采用同
样的表示方式,使得授权用户可以使用查询一般数据所用的关系语言来查询数据库的描述信息
准则 5 :统一的数据子语言 一个关系系统可以有几种语言和多种终端使用方
式(如 QBE 、嵌入式 SQL ),但必须有一种语言,它的语句可以表示为具有严格语法规定的字符串
全关系系统的十二条准则 准则 6 :视图更新准则
所有理论上可更新的视图也应该由系统更新,即对视图的更新要求,存在一个与时间无关的算法,该算法可以无二义地把更新要求转换为对基本表的更新序列
准则 7 :高级的插入、删除和修改操作 关系系统的操作对象是单一的关系
准则 8 :数据物理独立性 无论数据库的数据在存储表示和存取方法上作任
何变化,应用程序和终端活动都保持逻辑上的不变性
全关系系统的十二条准则 准则 9 :数据逻辑独立性
当对基本关系进行理论上信息不受损害的任何改变时,应用程序和终端活动都保持逻辑上的不变性
准则 10 :数据完整性的独立性 关系数据库的完整性约束条件必须是用数据库语言定义并存储在数据字典中的,而不是由应用程序加以定义
全关系系统的十二条准则 准则 11 :分布独立性
分布独立性是指 DBMS 具有这样的数据库语言,使得应用程序和终端活动在下列情况下都保持逻辑上的不变性
在第一次引入分布式数据时,即如果原来的 DBMS只管理非分布式的数据,而现在引入了分布式数据
当数据重新分布时,即如果原来 DBMS 能管理分布式数据,现在要改变原来的数据分布
全关系系统的十二条准则 准则 12 :无破坏准则
如果一个关系系统具有一个低级 ( 一次一记录 )语言,则这个低级语言不能违背或绕过完整性准则
为获得完整性的独立性,需要让完整性约束条件和数据的逻辑结构相独立
其他数据模型 序列
基因、股价 图
社会网络 树
XML 数组
科学计算 矩阵
信息检索
其他代数 事件代数
Negative Databases
关系模型总结
笛卡尔积:关联世界一切存在的天罗
关系模型:降身于普罗大众的 oracle
关系代数:数据操作的奥斯卡最佳范型奖
遥远天际:关系,关系,关系