? 1970年 E.F.Codd
“A Relational Model of Data
for Shared Data Banks”
1975年 Tymsharce公司 MAGNUM
1978年 IBM公司 QUERY BY EXAMPLE
1979年 IBM公司 SYSTEM R
1979年 ORACLE公司 ORACLE RDBMS
INFOMIX公司 INFOMIX
SYBASE公司 SYBASE
MicroSoft公司 SQL-SERVER
DBASE Ⅲ→FoxPro
● 关系数据库系统研究进展 第 2章
关系数据结构关系定义关系性质关系模式
关系的完整性实体完整性参照完整性用户定义完整性
关系代数
关系演算
关系数据库管理系统关系数据库第 2章 第 2章
2.1 关系数据结构
2.1.1 关系的数学定义
⒈ 域( Domain)
定义 2.1 域是一组具有相同数据类型的值的集合。 (值域 )
例,D1={A,2,3,…,Q,k } M1= 13
M2= 4
在关系中用域来表示属性的取值范围
域中所包含的值的个数称域的基数 (用 m表示 )
D2={,,,}
D3={数据库原理,面向对象数据库技术 } M3=2
2.1.1 关系的数学定义若 Di( i= 1,2,…,n)为有限集,其 基数 ( Cardinal number)
为 mi( i= 1,2,…,n),则 D1× D2× … × Dn的基数为:
其中每一个元素 (d1,d2,…,dn)叫作一个 n元组 (n-Tuple),
或简称为元组。元素中的每一个值 di叫作一个分量( Component)。
m= ∏ mi i=1 n
定义 2.2 给定一组域 D1,D2,…,Dn,(允许部分或全部相同)。
D1,D2,…,Dn的笛卡尔积为:
D1× D2× … × Dn={( d1,d2,…,dn)| di∈ Dj,j= 1,2,…,n }
⒉ 笛卡尔积( Cartesian Product)
● 笛卡儿积也是一个集合设有域 D2={,,,},则笛卡 尔 积
D1× D2={( A,),( A,),( A,),( A,)
.,,,
.,,,
.,,,
( k,),( k,),( k,),( k,) }
D1={ A,2,3,…,Q,k },
2.1.1 关系的数学定义
PC
K
....
A
A
花色牌值分量元组基数,13× 4 = 52
笛卡尔积可表示为一个二维表,
表中的每行对应一个元组,表中的每列对应一个域。

2.1.1 关系的数学定义
3.关 系 (relation)
定义 2.3 D1× D2× … × Dn的有意义的子集称为在域 D1,D2,…,Dn上的关系,
记为 R(D1,D2,…,D n) 。
其中,R为关系的名; n为关系的度(目); r∈ R 表示 r 是 R 中的元组。
子集元素是关系中的元组;
关系中的元组个数是关系的基数 ;
同样可以把关系看作是一个二维表:
每一行对应一个元组;
表的每一列对应一个域,每个域起一个名字 ——称为属性 ;
2.1.1 关系数学定义 例例:设 D1=男人集合 (MAN) = { 王强、李东、张兵 }
D2 =女人集合 (WOMAN) = { 赵 红、吴芳 }
D3=儿童集合 (CHILD) = { 王一、李一、李二 }
( 1)求上面三个集合的笛卡儿积
M W C
王强 赵 红 王一王强 赵 红 李一王强 赵 红 李二王强 吴芳 王一王强 吴芳 李一王强 吴芳 李二李东 赵 红 王一李东 赵 红 李一李东 赵 红 李二李东 吴芳 王一李东 吴芳 李一李东 吴芳 李二张兵 赵 红 王一张兵 赵 红 李一张兵 赵 红 李二张兵 吴芳 王一张兵 吴芳 李一张兵 吴芳 李二李二吴 芳李东李一吴 芳李东王一赵 红王 强
CHILDWOMANMAN
Family
( 2)构造一个家庭关系,可表示为:
FAMILY( MAN,WOMAN,CHILD)
2.1.1 关系的数学定义关系 R中构成 码 的属性称为主属性。
一个关系有多个候选码时,选定其中的一个作为主码。
关系 R的某一属性组 X不是 R的码,但是其他某一关系的码,称 X为 R的外部码。
5.主码 (primary key)
6.外部码 (foreign key)
7.主属性 (prime attribute)
值能唯一标识一个元组的属性组,且不含多余属性,称该属性组为候选码。
4.候选码 (candidate key)
例:
2.1.1 关系的数学定义学生,S(S#,SNAME,SA,SD)
课程,C(C#,CNAME,PC#)
选课,SC(S#,C#,GR)
S,候选码,S#,SNAME; 主码,S#
C,候选码,C#; 主码,C#
SC,候选码,(S#,C#); 主 码,(S#,C#);
外部码,S#,C#
关系中的每一个属性值都必须是不能再分的元素。(分量不可分)
列的次序可以任意交换,不影响关系的实际意义。(列可调)
每一列中的数值是同类型的数据,来自同一个域。(列同质)
不同的列可对应于同一个域,但给予不同的属性名。
同一关系中不允许有相同的记录。(无重复行)
行的次序可以任意交换,不影响关系的实际意义。(行可调)
关系性质
2.1.2 关系模式
8,关系模式定义 2.4 对关系的描述称为关系模式,记为 R(U,D,DOM,F) ;
其 中,R为关系名,U为属性集,
D为 U所对应的域的集合,
DOM为属性向域的映象集合,
F为属性间数据依赖关系的集合 。
● 关系模式是型,是静态的、稳定的;
● 关系是关系模式的值,是动态的、随时间而变化的。
S(S#,SNAME,SA,SD)关系模式通常简记为,R(U)
关系模式就是关系的框架(表框架)
它是对关系结构的描述
2.1.2
2.1.3 关系数据库在关系模型中,实体以及实体间的联系都是用关系来表示。在一个给定的现实世界领域中,相应于所有实体及实体之间的联系的关系的集合构成一个关系数据库。
关系模式学生关系模式 S( S#,SNAME,AGE,SEX)
学生课程关系模式 SC(S#,C#,GRADE)
课程关系模式 C(C#,CNAME,TEACHER)
S# SNAME AGE SEX
S# C# GRADE
C# CNAME TEACHER
SC
C
S
子模式
S# SNAME AGE SEX
G
S SC
成绩子模式 G(S#,SNAME,C#,GRADE)
S# C# GRADE
S# SNAME C# GRADE
实体完整性
2.2 关系的完整性
( Entity Integrity)
规则 2.1 若 A是关系 R( u) (A∈u) 上的主属性,则属性 A不能取空值。
例,选课 SC中的 S#,C#均不能取空值。
参照完整性 ( Referential Integrity)
规则 2.2 属性(属性组) X是关系 R的外部码,Ks是关系 S的主码,且 X与
Ks相对应(即 X,Ks是定义在同一个(组)域上,则 R中任一元组在 X上的值为,X=空值或 S中的某个元组的 Ks值
2.2 关系的完整性
( user-defined Integrity)用户定义的完整性用户自定义完整性是针对某一具体数据的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求,由应用环境决定。
例,属性的取值范围 属性的非空限制例,职工 EMP(EMP#,ENAME,JOB,DEPT#)
部门 DEPT(DEPT#,DNAME,LOC)
则,EMP中的 DEPT#为空或为 DEPT中的 DEPT#的 值关 系 数 据 库 语 言关系代数具有关系代数和关系演算双重特点关系演算域演算关系数据库标准语言 SQL
用关系运算来表达查询,以 ISBL为代表用谓词公式来表达查询元组演算 (以行为变量 ),以
ALPHA为代表域演算 (以列为变量 ),以 QBE为代表元组演算元组演算、域演算关系查询语言关系代数语言:查询操作是以 集合操作 作为基础的语言关系演算语言:查询操作是以 谓词演算 作为基础的语言
关系查询语言是一种比 Pascal,C等程序设计语言更高级的语言。
Pascal,C一类语言属于过程性语言,在编程时必须给出获得结果的操作步骤。
而关系查询语言属于非过程性语言,编程时只需要指出需要什么信息,不必给出具体的操作步骤。
干什么?
怎么干?
干什么?
关系查询语言和关系运算
2.3 关系代数相关表述记号
⒈ 设关系模式为 R(A1,A2,…,An) 。它的一个关系设为 R。
t∈ R表示 t是 R的一个 元组 。 t[Ai]则表示元组 t中相应于属性 Ai的一个 分量 。
⒉ 若 A={Ai1,Ai2,…,A ik},其中 Ai1,Ai2,…,A ik是 A1,A2,…,An 中的一部分,
则 A称为属性列或域列。 t[A]=(t[Ai1],t[Ai2],…,t[A ik])表示元组 t 在属性列 A上诸分量的集合。则 表示 {A1,A2,…,An} 中去掉
{Ai1,Ai2,…,A ik} 后剩余的属性组。
A
⒊ R为 n目关系,S为 m目关系。 tr∈ R,ts∈ S。 trts 称为元组的 连接 。
它是一个 (n+m)列的元组,前 n个分量为 R中的一个 n元组,后 m个分量为 S中的一个 m元组。

2.3 关系代数相关表述记号
⒋ 给定一个关系 R(X,Z),X和 Z为属性组。我们定义,当 t[X]=x时,x在 R中的 象集 ( Images Set)为,Zx={ t[Z]|t∈ R,t[X]=x }
它表示 R中属性组 X上值为 x的诸元组在 Z上分量的集合。
传统的集合运算
2.3 关系代数
并运算
c1b2a2
c2b2a1
c1b1a1
CBA
c1b2a2
c2b3a1
c2b2a1
CBAR1 R2
c1b1a1
c1b2a2
c2b3a1
c2b2a1
CBA
R1∪ R2
设关系 R和关系 S具有相同的目 n(即两个关系都有 n个属性),且相应的属性取自同一个域,则关系 R与关系 S的并由属于 R或属于 S的元组组成。
其结果关系仍为 n目关系。记作,R∪ S={ t | t∈ R∨ t∈ S }
传统的集合运算
2.3 关系代数
差运算
c1b2a2
c2b2a1
c1b1a1
CBA
c1b2a2
c2b3a1
c2b2a1
CBAR1 R2
c1b1a1
CBA
R1- R2
设关系 R和关系 S具有相同的目 n,且相应的属性取自同一个域,则关系 R与关系 S
的差由属于 R而不属于 S的所有元组组成。其结果关系仍为 n目关系。记作:
R- S={t|t∈R∧t S}∈
传统的集合运算
2.3 关系代数
交运算
c1b2a2
c2b2a1
c1b1a1
CBA
c1b2a2
c2b3a1
c2b2a1
CBAR1 R2 A B C
a1 b2 c2
a2 b2 c1
R1∩R2
设关系 R和关系 S具有相同的目 n,且相应的属性取自同一个域,
则关系 R与关系 S的交由既属于 R又属于 S的元组组成。其结果关系仍为 n目关系。记作,R∩S={t|t∈R∧t∈S}
2.3 关系代数两个分别为 n目和 m目的关系 R和 S的广义笛卡尔积是一个 (n+m)列的元组的集合。元组的前 n列是关系 R的一个元组,后 m列是关系 S的一个元组。若
R有 k1个元组,S有 k2个元组,则关系 R和关系 S的广义笛卡尔积有
k1× k2个元组。记作:
R1× R2
c1b1a1
c1b1a1
c1b1a1
CBA
c1b2a2
c2b3a1
c2b2a1
CBA
......
c2b3a1
c2b2a1
......
c2b2a1
c2b2a1c1b2a2
c2b2a1
c1b1a1
CBA
c1b2a2
c2b3a1
c2b2a1
CBAR1 R2
广义笛卡尔积专门的关系运算学号 学生姓名 所属系名 学生年龄
S# SN SD SA
S1 A CS 20
S2 B CS 21
S3 C MA 19
S4 D CI 19
S5 E MA 20
S6 F CS 22
(S)
选择运算是从关系中选取使公式为真的元组。这是从行的角度进行的运算。
在关系 R中选择满足给定条件的元组,记做:
σF (R) ={ t | t ∈ R Λ F(t)=?真 ’ }
F是一个公式,表示形式为由逻辑运算符 ( ∧,∨,?)连接各算术表达式组成 。
算术表达式的基本形式为,XθY,θ ={>,≥,<,≤,=,≠} 。
例 1 求计算机科学系 CS的学生
σ SD=?CS? (S)
学号 学生姓名 所属系名 学生年龄
S# SN SD SA
S1 A CS 20
S2 B CS 21
S3 C MA 19
S4 D CI 19
S5 E MA 20
S6 F CS 22
(a)
(S)
(S’)
S# SN SD SA
S1 A CS 20
S2 B CS 21
S6 F CS 22
σ SD=?CS? (S)
选择运算在关系 R中选择满足给定条件的元组,记做:
σF (R) ={ t | t ∈ R Λ F(t)=?真 ’ }
例 2 求计算机科学系 CS,年龄不超过 21岁的学生。
σ SD=?CS? ∧ SA≤21 (S)
(S’)
S# SN SD SA
S1 A CS 20
S2 B CS 21
选择运算
(S’)
S# SN SD SA
S1 A CS 20
S2 B CS 21
S6 F CS 22
σ SD=?CS? (S)学号 学生姓名 所属系名 学生年龄
S# SN SD SA
S1 A CS 20
S2 B CS 21
S3 C MA 19
S4 D CI 19
S5 E MA 20
S6 F CS 22
(S)
投影运算这是从列的角度进行的运算 。
例 3 πSN,SD (S) 即求得学生关系 S在学生姓名和所在系这两个属性上的投影结果。
πSN,SD (S)学号 学生姓名 所属系名 学生年龄
S# SN SD SA
S1 A CS 20
S2 B CS 21
S3 C MA 19
S4 D CI 19
S5 E MA 20
S6 F CS 22
(a)
(S)
关系 R上的投影是从 R中选择若干属性列组成新的关系。记做:
πA (R) ={ t[A] | t ∈ R}
投影之后不仅取消了某些列,还可能取消某些元组。
πSA (S)
SA
20
21
19
22
SN SD
A CS
B CS
C MA
D CI
E MA
F CS
连接运算连接运算是从两个关系的笛卡尔积中选取属性间满足一定条件的元组。
记做,R S,其中,F是条件表达式,它涉及到对两个关系中的属性的比较。∞ F
2b5
2b3
10b3
7b2
3b1
EBS
12b4a2
8b3a2
6b2a1
5b1a1
CBAR
R S∞
C<E
10b38b3a2
10b36b2a1
7b26b2a1
10b35b1a1
7b25b1a1
ES.BCR.BA
例 4 设关系 R,S如下图,R S∞
C<E
等值 连接例 5 设关系 R,S如下图:
2b5
2b3
10b3
7b2
3b1
EBS
12b4a2
8b3a2
6b2a1
5b1a1
CBAR
A R.B C S.B E
a1 b1 5 b1 3
a1 b2 6 b2 7
a2 b3 8 b3 10
a2 b3 8 b3 2
R S∞ R.
B=S.B
连接运算中有两种最为重要也最为常用的连接,
θ为,=,的连接运算称为等值连接,
自然连接
A B C E
a1 b1 5 3
a1 b2 6 7
a2 b3 8 10
a2 b3 8 2
R S∞
A R.B C S.B E
a1 b1 5 b1 3
a1 b2 6 b2 7
a2 b3 8 b3 10
a2 b3 8 b3 2
R S∞ R.
B=S.B
另一种是自然连接。自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且要在结果中把重复的属性去掉。
例 6 关系 R,S的自然连结,R S∞
S SC C∞ ∞
S C SC∞ ∞
SC S C∞ ∞
SC C S∞ ∞
C S SC∞ ∞
C SC S∞ ∞

×



×
半连接在 R,S自然连结后仅保留对 R的属性的投影,记为:
例 7 关系 R,S的半连结:
A B C E
a1 b1 5 3
a1 b2 6 7
a2 b3 8 10
a2 b3 8 2
R S∞
A B C
a1 b1 5
a1 b2 6
a2 b3 8
R S2b5
2b3
10b3
7b2
3b1
EBS
12b4a2
8b3a2
6b2a1
5b1a1
CBAR
左外连结,对 R中任意元组,若 S中找不到匹配的元组,
则 S用空元组与之对应。 R的信息在左外连结的结果中都得到保留。
左外连接在 R,S自然连结时对不匹配的元组用空值来匹配。有左外连结、右外连结和全外连结例 8 关系 EMP,SAL的左外连结:
SALEMP
上海邓平长春李宏大连王小北京张丽
CITYENAME
3000赵刚
5000王小
6000张丽
SALARYENAME
NULL
NULL
5000
6000
SALARY
上海邓平长春李宏大连王小北京张丽
CITYENAME
EMP SAL
右外连结,对 S中任意元组,若 R中找不到匹配的元组,
则 R用空元组与之对应。 S的信息在右外连结的结果中都得到保留。
右外连接例 9 关系 EMP,SAL的右外连结:
SALEMP
上海邓平长春李宏大连王小北京张丽
CITYENAME
3000赵刚
5000王小
6000张丽
SALARYENAME
ENAME CITY SALARY
张丽 北京 6000
王小 大连 5000
赵刚 NULL 3000
EMP SAL
全外连结,对 R或 S中所有不匹配的元组,均用空元组分别匹配。 R,S的信息在全外连结的结果中都得到保留。
全外连接例 10 关系 EMP,SAL的全外连结:
SALEMP
上海邓平长春李宏大连王小北京张丽
CITYENAME
3000赵刚
5000王小
6000张丽
SALARYENAME
ENAME CITY SALARY
张丽 北京 6000
王小 大连 5000
李宏 长春 NULL
邓平 上海 NULL
赵刚 NULL 3000
EMP SAL
c1b2a1
c3b2a2
c6b6a4
c3b2a1
c6b4a3
c7b3a2
c2b1a1
CBA
R
c3
c1
c2
C
d2
d1
d1
D
b2
b2
b1
B
S例 11
除运算给定关系 R(X,Y)和 S(Y,Z),其中 X,Y,Z为属性组。 R中的 Y与 S中的 Y
可以有不同的属性名,但必须出自相同的域集。 R与 S的除运算得到一个新的关系 P(X),P是 R中满足下列条件的元组在 X属性列上的投影:元组在 X上分量值 x的象集 Yx包含 S在 Y上投影的集合。记作:
R÷ S = { tr [X] | tr ∈ R ∧ Yx?ΠY(S) } 其中 Yx为 x在 R中的象集,x=tr [X]。
Z
X
Y
除运算
c1b2a1
c3b2a2
c6b6a4
c3b2a1
c6b4a3
c7b3a2
c2b1a1
CBA
c3
c1
c2
C
d2
d1
d1
D
b2
b2
b1
B
R S
a1的象集为:
a2的象集为:
a3的象集为:
a4的象集为:
{( b1,c2),( b2,c3),( b2,c1) }
{( b3,c7),( b2,c3) }
{( b4,c6) }
{( b6,c6) }
S在 B,C上的投影
{( b1,c2),( b2,c3),( b2,c1) }
R÷ S = { tr [X] | tr ∈ R ∧ Yx?ΠY(S) }
R÷ S= { a1}
除运算给定关系 R(X,Y)和 S(Y,Z),其中 X,Y,Z为属性组。 R
中的 Y与 S中的 Y可以有不同的属性名,但必须出自相同的域集。 R与 S的除运算得到一个新的关系 P(X),P是 R中满足下列条件的元组在 X属性列上的投影:元组在 X上分量值 x的象集 Yx包含 S在 Y上投影的集合。记作:
R÷ S = { tr [X] | tr ∈ R ∧ Yx?ΠY(S) }
其中 Yx为 x在 R中的象集,x=tr [X]。
关系代数五种基本运算并、差、笛卡儿积、选择、投影
R?S = R- (R- S) 或 R?S = S- (S- R)
R∩S={t|t∈R∧t∈S}1
2
3
σAθB (R× S)
R÷ S = { tr [X] | tr ∈ R ∧ Yx?ΠY(S) }
3 除运算给定关系 R(X,Y)和 S(Y,Z),其中 X,Y,Z为属性组。
R÷ S = { tr [X] | tr ∈ R ∧ Yx?ΠY(S) }
其中 Yx为 x在 R中的象集,x=tr [X]
① T= π x ( R )
② P= πy ( S )
③ Q= ( T× P)- R
④ W= π x ( Q )
⑤ R÷ S = T- W
R÷ S = π x ( R )- π x (( T× πy ( S ))- R )
S
c1b2a1
c3b2a2
c6b6a4
c3b2a1
c6b4a3
c7b3a2
c2b1a1
CBA
d2c3b2
d1c1b2
d1c2b1
DCB
R
除运算
① T= π x ( R )
② P= πy ( S )
③ Q= ( T× P)- R
④ W= π x ( Q )
⑤ R÷ S = T- W
A B C
a1 b1 c2
a2 b3 c7
a3 b4 c6
a1 b2 c3
a4 b6 c6
a2 b2 c3
a1 b2 c1
B C D
b1 c2 d1
b2 c1 d1
b2 c3 d2
R
S
A B C
a1 b1 c2
a1 b2 c1
a1 b2 c3
a2 b1 c2
a2 b2 c1
a2 b2 c3
a3 b1 c2
a3 b2 c1
a3 b2 c3
a4 b1 c2
a4 b2 c1
a4 b2 c3A
a1
a4
a3
a2
a1
AT
a4
a3
a2
AW
P
c3
c1
c2
C
b2
b2
b1
B
学号 课程号 学习成绩
S# C# GRADE
S1 C2 A
S2 C2 C
S3 C2 B
..,.,.
学号 课程号 学习成绩
S# C# GRADE
S1 C1 A
S1 C2 A
S1 C3 A
S1 C5 B
S2 C1 B
S2 C2 C
S2 C4 C
S3 C2 B
..,.,.
SC
关系代数表达式设教学数据库中有三个关系:
学生关系 S( S#,SNAME,SD,AGE )
课程关系 C( C#,CN,CP#)
学习关系 SC( S#,C#,GRADE)
例 1 检索学习课程号为 C2的学生学号与成绩
πS#,GRADE(σ C# =‘C2’ (SC))
σ C# =‘C2’ (SC)
学号 课程号 学习成绩S# C# GRADE
S1 C1 A S1 C2 A
S1 C3 A S1 C5 B
S2 C1 B S2 C2 C
..,.,.
SC
学号 学生姓名 所属系名 学生年龄S# SNAME SD SA
S1 A CS 20S2 B CS 21
S3 C MA 19S4 D CI 19
S5 E MA 20..,.,.,.
S
S SC∞
σ C# =‘C2’( )S SC∞
例 2 检索学习课程号为 C2的学生学号和姓名学号 学生姓名 所属系名 学生年龄 课程号 学习成绩
S# SNAME SD SA C# GRADES1 A CS 20 C1 A
S1 A CS 20 C2 A S1 A CS 20 C3 A
S1 A CS 20 C5 A S2 B CS 21 C1 B
S2 B CS 21 C2 C,.,.,.,.,.,.
S# SNAME
S1 A
S2 B
= πS#,SNAME(s σC# =‘C2’(sc))S SCπS#,SNAME(σ C# =‘C2’ ( ))
例 3 求选修,数据库原理,这门课程的学生名和所在系。 ( S,C,SC )
学号 课程号 学习成绩S# C# GRADE
S1 C1 A S1 C2 A
S1 C3 A S1 C5 B
S2 C1 B S2 C2 C
..,.,.
SC学号 学生姓名 所属系名 学生年龄
S# SNAME SD SAS1 A CS 20
S2 B CS 21S3 C MA 19
S4 D CI 19S5 E MA 20
..,.,.,.
S
例 4 检索学习课程号为 C2或 C3的学生学号和所在系
πSN,SD( (σCN=‘数据库原理 ’ (C)) )S SC
πS#,SD( πS# (σC# =‘C2’∨ C#=‘C3’(SC)) )S
例 5 求至少选修 C2和 C3这两门课程的学生名。
C#
C2
C3
K
πSN( (πS#,C# (SC) ÷ K))S
πSN( (πS#,C# (SC) ÷ πC# (σC# =‘C2’∨ C#=‘C3’(C)))S
πSN( (σ 1= 4 ∧ 2 =‘C2’ ∧ 5=‘C3’(SC× SC)))S
解法 2
解法 3
K = πC# (σS#=‘S2’(SC))
( S,C,SC )
例 7 求选修全部课程的学生名。
例 8 求至少选修了 S2 所选课程的学生名。
πS#(SC)- πS# (σC# =‘C2’(SC))
例 6 求不学 C2这门课程的学生名。
πS#(S)- πS# (σC# =‘C2’(SC))
×

πSN ( (πC#,S# (SC) ÷ C) )S
πSN ( (πC#,S# (SC) ÷ πC# (σS#=‘S2’(SC))))S
2.4 关系演算关系演算是以数理逻辑中的谓词演算为基础的。按谓词变元的不同,关系演算可分为元组关系演算和域关系演算。
元组关系演算元组变量作为谓词变元的基本对象。
ALPHA语言主要有,GET,PUT,HOLD,UPDATE,DELETE、
DROP六条语句
域关系演算以元组变量的分量作为谓词变元的基本对象。
QBE是 Query By Example(即通过例子进行查询)
2.4.1 ALPHA语言
元组关系演算语言 ALPHA
ALPHA语言是元组关系演算语言,谓词变元是元组变量。
元组变量的二个用途是:
(1) 简化关系名;
(2) 操作条件中使用量词时必须用元组变量。
例 查询计算机系学生的姓名元组 变量 X用来简化关系名 Student
RANGE Student X
GET W (X,Sname),X,Deptno =?CS?
操作语句 工作空间名 表达式 操作条件
( tuple relational calculus)
2.4.1 ALPHA语言一,检索操作 (1)简单检索(即不带条件的检索)
(2)限定的检索(即带条件的检索)
(3)带排序的检索
(4)带定额的检索
(5)用元组变量的检索
(6)用存在量词的检索
(7)带有多个关系的表达式的检索
(8)用全称量词的检索
(9)用两种量词的检索
(10)用蕴函( Implication)的检索
(11)集函数二,更新操作 (1) 修改操作 (2) 插入操作 (3) 删除检索操作
(1) 简单检索(即不带条件的检索)
例 1 查询所有被选修课程的课程号码
GET W (SC.Cno)
这里条件为空,表示没有限定条件。 W为工作空间名。
例 2 查询所有学生的数据
GET W (Student)
例 3 查询信息系 (IS)中年龄小于 20岁的学生的学号和年龄
GET W (Student.Sno,Student.Sage),Student.Sdept='IS' ∧ Student.Sage<20
检索操作
(2)限定的检索(即带条件的检索)
例 3 查询信息系 (IS)中年龄小于 20岁的学生的学号和年龄
GET W ( Student.Sno,Student.Sage ),
Student.Sdept='IS' ∧ Student.Sage<20
例 4 查询计算机科学系 (CS)学生的学号、年龄,并按年龄降序排序
GET W ( Student.Sno,Student.Sage ),
Student.Sdept='CS? DOWN Student.Sage
(3)带排序的检索检索操作
(4)带定额的检索例 5 取出一个信息系学生的学号
GET W (1) (Student.Sno),Student.Sdept='IS'
例 7 查询信息系学生的名字
RANGE Student X
GET W (X.Sname),X.Sdept='IS'
(5)用元组变量的检索检索操作
(6)用存在量词的检索例 8 查询选修 2号课程的学生名字
RANGE SC X
GET W (Student.Sname),? X(X.Sno=Student.Sno ∧ X.Cno='2')
例 9 查询选修了其直接先行课是 6号课程的课程的学生学号
RANGE Course CX
GET W (SC.Sno),? CX (CX.Cno=SC.Cno ∧ CX.Pcno='6')
检索操作
(6)用存在量词的检索例 10 查询至少选修一门其先行课为 6号课程的学生名字
RANGE Course CX
SC SCX
GET W (Student.Sname),? SCX (SCX.Sno=Student.Sno ∧
CX (CX.Cno=SC.Cno ∧ CX.Pcno='6'))
前束范式( Prenex normal form)的形式:
GET W (Student.Sname),? SCX? CX (SCX.Sno=Student.Sno ∧
CX.Cno=SCX.Cno ∧ CX.Pcno='6')
检索操作
(7)带有多个关系的表达式的检索例 11 查询成绩为 90分以上的学生名字与课程名字本查询所要求的结果学生名字和课程名字分别在 Student和 Course两个关系中。
RANGE SC SCX
GET W (Student.Sname,Course.Cname),?SCX (SCX.Grade≥90 ∧
SCX.Sno=Student.Sno ∧ Course.Cno=SCX.Cno)
检索操作
(8)用全称量词的检索例 12 查询不选 1号课程的学生名字
RANGE SC SCX
GET W (Student.Sname),? SCX (SCX.Sno≠Student.Sno ∨ SCX.Cno≠'1')
存在量词来表示:
RANGE SC SCX
GET W (Student.Sname):SCX (SCX.Sno=Student.Sno ∧ SCX.Cno='1')
检索操作
(9)用两种量词的检索例 13 查询选修了全部课程的学生姓名
RANGE Course CX
SC SCX
GET W (Student.Sname),?CX?SCX (SCX.Sno=Student.Sno ∧
SCX.Cno=CX.Cno)
检索操作
(10)用蕴函( Implication)的检索例 14 查询最少选修了 95002学生所选课程的学生学号
RANGE Couse CX
SC SCX
SC SCY
GET W (Student.Sno),? CX(?SCX (SCX.Sno='95002' ∧ SCX.Cno=CX.Cno)
= >?SCY (SCY.Sno=Student.Sno ∧ SCY.Cno=CX.Cno))
检索操作
(11)集函数 函 数 名 功 能
COUNT 对元组计数
TOTAL 求总和
MAX 求最大值
MIN 求最小值
AVG 求平均值例 15 查询学生所在系的数目
GET W (COUNT(Student.Sdept))
例 16 查询信息系学生的平均年龄
GET W (AVG(Student.Sage) ),Student.Sdept='IS'
更新操作
(1) 修改操作
首先用 HOLD语句将要修改的元组从数据库中读到工作空间中
然后用宿主语言修改工作空间中元组的属性
最后用 UPDATE语句将修改后的元组送回数据库中
UPDATE语句实现步骤是:
例 17 95007学生从计算机科学系转到信息系
HOLD W (Student.Sno,Student.Sdetp),Student.Sno='95007'
(从 Student关系中读出 95007学生的数据)
MOVE 'IS? TO W.Sdept
(用宿主语言进行修改)
UPDATE W (Student)
(把修改后的元组送回 Student关系)
更新操作
(2) 插入操作
首先用宿主语言在工作空间中建立新元组
然后用 PUT语句把该元组存入指定的关系中
PUT语句实现步骤:
例 18 学校新开设了一门 2学分的课程“计算机组织与结构”,其课程号为 8,
直接先行课为 6号课程。插入该课程元组。
MOVE '8? TO W.Cno
MOVE?计算机组织与结构’ TO W.Cname
MOVE '6' TO W.Cpno
MOVE '2' TO W.Ccredit
PUT W (Course)
更新操作
(3) 删 除
用 HOLD语句把要删除的元组从数据库中读到工作空间中
用 DELETE语句删除该元组
DELETE语句实现步骤:
例 19 95110学生因故退学,删除该学生元组 (学生名为“李耳” )
RANGE Student SX
HOLD W (SC),SC.Sno='95110?
{?SX( SC.Sno=SX.Sno ∧ SX.SN=,李耳” ) }
DELETE W (SC)
HOLD W (Student),Student.Sno='95110' {Student.SN=,李耳” }
DELETE W (Student)
HOLD W (Student)
DELETE W (Student) +
HOLD W (SC)
DELETE W (SC)
例 20 删除全部学生
HOLD W (SC)
DELETE W (SC)
+
HOLD W (Student)
DELETE W (Student)
例 21 将学号 95001改为 95102
HOLD W (Student),Student.Sno='95001'
DELETE W (Student)
MOVE '95102' TO W.Sno
MOVE?李勇’ TO W.Sname
MOVE?男’ TO W.Ssex
MOVE '20? TO W.Sage
MOVE 'CS' TO W.Sdept
PUT W (Student)
RANGE Student SX
GET W (SX),SX.Sno='95001'
MOVE '95102? TO W.Sno
PUT W (SX)
GET W (SC),SC.Sno='95001'
MOVE '95102? TO W.Sno
PUT W (SC)
HOLD W (SC),SC.Sno='95001'
DELETE W (SC)
HOLD W (SX),SX.Sno='95001'
DELETE W (SX)
2.4.2 域关系演算语言 QBE ( domain relational calculus)
域关系演算用 域变量代替元组变量的每一个分量,域变量的变化范围是某个值域而不是一个关系。
QBE是 Query By Example(即通过例子进行查询)
2.4.2 域关系演算语言 QBE
一,检索操作二,更新操作
(1) 简单查询
(2) 条件查询
(3) 集函数
(4)对查询结果排序
(1) 修改操作
(2) 插入操作
(3) 删除操作检索操作
(1) 简单查询例 1 求信息系全体学生的姓名
1) 用户提出要求 2) 屏幕显示空白表格
3) 用户在最左边一栏输入关系名
4) 屏幕显示该关系的栏名,即 Student关系的各个属性名
5) 用户在上面构造查询要求
6) 屏幕显示查询结果
Student Sno Sname Ssex Sage Sdept
P,T IS P,李勇 IS
IS李一王义赵洪
Student Sno Sname Ssex Sage Sdept
检索操作
(1) 简单查询例 2 查询全体学生的全部数据
Student Sno Sname Ssex Sage Sdept
P,95001 P.李勇 P.男 P.20 P.CS
Student Sno Sname Ssex Sage Sdept
P.
检索操作
(2) 条件查询例 4 求计算机科学系年龄大于 19岁的学生的学号
Student Sno Sname Ssex Sage Sdept
P,95001 > 19 CS
例 3 求年龄大于 19岁的学生的学号
Student Sno Sname Ssex Sage Sdept
P,95001 > 19
检索操作
(2) 条件查询例 4 求计算机科学系年龄大于 19岁的学生的学号
Student Sno Sname Ssex Sage Sdept
P,95001 CS
P,95001 > 19
例 5 查询计算机科学系或者年龄大于 19岁的学生的学号
Student Sno Sname Ssex Sage Sdept
P,95001 CS
P,95002 > 19
检索操作
(2) 条件查询例 6 查既选修了 1号课程又选修了 2号课程的学生的学号
SC Sno Cno Grade
P,95001 1
P,95001 2
检索操作
(2) 条件查询例 7 查询选修 1号课程的学生姓名
Student Sno Sname Ssex Sage Sdept
95001 P.李勇
SC Sno Cno Grade
95001 1
检索操作
(2) 条件查询例 8 查询未选修 1号课程的学生姓名
Student Sno Sname Ssex Sage Sdept
┓ 95001 P.李勇
SC Sno Cno Grade
95001 1
检索操作
(2) 条件查询例 9 查询有两个人以上选修的课程号
SC Sno Cno Grade
95001 P,1
┓ 95001 1
检索操作
(3) 集函数函数名 功能
CNT 对元组计数
SUM 求总和
AVG 求平均值
MAX 求最大值
MIN 求最小值例 10 查询信息系学生的平均年龄
Student Sno Sname Ssex Sage Sdept
P.AVG.ALL,IS
检索操作
(4) 对查询结果排序
Student Sno Sname Ssex Sage Sdept
例 11 查全体男生的姓名,要求查询结果按所在系升序排序,
对相同系的学生按年龄降序排序
P.李勇 男 DO( 2),AO( 1),
AO( i ),DO( i ).
i 为排序的优先级,i值越小,
优先级越高更新操作
(1) 修改操作例 12 把 95001学生的年龄改为 18岁
Student Sno Sname Ssex Sage Sdept
95001 U.18
Student Sno Sname Ssex Sage Sdept
U,95001 18
更新操作
(1) 修改操作例 13 把 95001学生的年龄增加 1岁
Student Sno Sname Ssex Sage Sdept
95001 17
U,95001 17 +1
例 14 将计算机科学系所有学生的年龄都增加 1岁
Student Sno Sname Ssex Sage Sdept
95001 17 CS
U,95001 17 +1
更新操作
(2) 插入操作例 15 把信息系女生 95701,姓名张三,年龄 17岁存入数据库中
Student Sno Sname Ssex Sage Sdept
I,95701 张三 女 17 IS
更新操作
Student Sno Sname Ssex Sage Sdept
D,95089
例 16 删除学生 95089
(3) 删除操作
+
SC Sno Cno Grade
D,95089
2.4.3 元组关系演算元组关系演算表达式(简称元组表达式)的一般形式:
{ t | P(t) }
t是元组变量,表示一个定长的元组;
P是公式,由原子公式组成。
R是关系名,t是元组变量,表示这样一个命题:,t是关系 R的一个元组”。原子公式有三种形式:
1,R(t)
2,t[i]? u[j]
3,t[i]? C 或 C? u[j]
t和 u是元组变量,?是比较运算符 ;
t[i]和 u[j]分别是 t的第 i个分量和 u的第 j个分量 ;
命题:“元组 t的第 i个分量和 u的第 j
个分量之间满足?运算”。
c是常量;
命题:“元组 t的第 i个分量和常量 c之间满足?运算”;
命题:“常量 c和元组 u的第 j个分量之间满足?运算”。
2.4.3 元组关系演算公式、元组变量的递归定义:
1) 每个原子是一个公式。
2) 如果 Φ1 和 Φ2 是公式,那么?Φ1,Φ1?Φ2,Φ1?Φ2,Φ1
Φ2 也是公式。
“Φ1 不是真”,Φ1 和 Φ2 都是真”“Φ1 或 Φ2 或两者都是真”“若 Φ1 为真则 Φ2 为真”
2.4.3 元组关系演算公式、元组变量的递归定义:
1) 每个原子是一个公式。
2) 如果 Φ1 和 Φ2 是公式,那么?Φ1,Φ1?Φ2,Φ1?Φ2,Φ1
Φ2 也是公式。
3) 如果 Φ1 是公式,那?t(Φ1 ) 也是公式。
“存在一个元组 t使得公式 Φ1 为真”
2.4.3 元组关系演算公式、元组变量的递归定义:
1) 每个原子是一个公式。
2) 如果 Φ1 和 Φ2 是公式,那么?Φ1,Φ1?Φ2,Φ1?Φ2,Φ1
Φ2 也是公式。
3) 如果 Φ1 是公式,那么 (?t)(Φ1 ) 也是公式。
4) 如果 Φ1 是公式,那么 (?t)(Φ1 ) 也是公式。
“对于所有元组 t都使得公式 Φ1 为真”
2.4.3 元组关系演算公式、元组变量的递归定义:
1) 每个原子是一个公式。
2) 如果 Φ1 和 Φ2 是公式,那么?Φ1,Φ1?Φ2,Φ1?Φ2,Φ1
Φ2 也是公式。
3) 如果 Φ1 是公式,那么 (?t)(Φ1 ) 也是公式。
4) 如果 Φ1 是公式,那么 (?t)(Φ1 ) 也是公式。
5) 运算符优先顺序(从高到低),?,?和?,?,?和?,?。
加括号可以改变优先顺序。
6) 公式只能由上述五种形式构成,除此之外构成的都不是公式。
2.4.3 元组关系演算关系演算表达式 关系代数表达式
● 用关系演算表达式表达五种基本运算:
R∪ S={ t | R(t)∨ S(t) } R- S={ t | R(t) ∧ ┓ S(t) }
R× S ={ t(n+m) | (? u(n) ) (? v(m) ) ( R(u) ∧ S(v) ∧
t[1]=u[1] ∧ … ∧ t[n]=u[n] ∧
t[n+1]=v[1] ∧ … ∧ t[n+m]=v[m] ) }
σF (R) ={ t | R (t) ∧ F }
πi1,i2,…,ik (R) ={ t(k) | (? u) (R(u) ∧ t[1]=u[i1] ∧ … ∧ t[k]=u[ik] )}
2.4.3 元组关系演算关系演算表达式 关系代数表达式例 1 查询信息系( IS)全体学生 σF (R) ={ t | R (t) ∧ F }
SIS={ t | Student(t) ∧ t[5]=?IS? }
例 2 查询年龄小于 20岁的学生
S20={ t | Student(t) ∧ t[4]< 20 }
2.4.3 元组关系演算关系演算表达式 关系代数表达式例 3 查询学生的姓名和所在系
S1={ t(2) | (? u) (Student(u) ∧ t[1]=u[2] ∧ t[2]=u[5] )}
πi1,i2,…,ik (R) ={ t(k) | (? u) (R(u) ∧ t[1]=u[i1] ∧ … ∧ t[k]=u[ik] )}
2.4.4 域关系演算域关系演算的谓词变元是域变量域关系演算 表达式的一般形式:
{ t1t2…t k | Φ(t1,t2,…,t k ) }
t1,t2,…,t k是域变量;
Φ是域演算公式,由原子公式和运算符组成。
R是 k元关系,ti是域变量或常量。 R可表示为,{ t1t2…t k | R(t1,t2,…,t k ) }原子公式有三种形式:
1,R(t1,t2,…,t k)
2,ti? uj
3,ti? C 或 C? uj
ti和 uj是域变量,?是算术比较符 ;
表示,ti和 uj满足比较关系?”。t
i是域变量,c是常量常量,?
是算术比较符,ti 和 c满足比较关系?”。
2.4.4 域关系演算公式,域 变量的递归定义:
1) 每个原子是一个公式。
2) 如果 Φ1 和 Φ2 是域关系演算公式,那么?Φ1,Φ1?Φ2,
Φ1?Φ2 也是域关系演算公式。
3) 如果 Φ 是域关系演算公式,那么 (?ti)(Φ)(i=1,2,…,k) 也是域关系演算公式。
4) 如果 Φ 是域关系演算公式,那么 (?ti)(Φ) 也是域关系演算公式。
5) 运算符优先顺序(从高到低),?,?和?,?,?和?,?。
加括号可以改变优先顺序。
6) 域关系演算公式是由有限次应用上述规则得到的公式,其他公式不是域关系演算公式。
2.4.4 域关系演算
2.5 关系数据库管理系统 (RDBMS)的讨论关系系统支持关系模型的关系数据库管理系统简称关系系统。
1.下述关系的 DBMS不能称为关系系统
1)不支持关系数据结构的系统
2)支持关系数据结构,但无 δ,π,运算功能的系统
3)支持关系数据结构,有 δ,π,运算,但要求定义物理存取路径的系统可称为关系系统的 DBMS,当且仅当
1)支持关系数据结构(关系数据库)
2)支持 δ,π,运算,且不要求用户定义任何物理存取路径
2.4 关系数据库管理系统 (RDBMS)的讨论关系系统分类
4.全关系系统:
支持关系模型的所有特征。在关系完备系统的基础上,进一步支持实体完整性和参照完整性等。
DBⅡ,ORACLE,SYBASE,… 已接近这个目标。目前尚无全关系系统。
1.表式系统:
仅支持关系数据结构,不支持关系操作。
2.(最小)关系系统:
支持关系数据结构,支持 δ,π,∞ 运算,且不定义物理路径。
3.关系完备系统:
支持关系数据结构和所有关系代数操作(或功能上与关系代数等价)。
DBⅡ,ORACLE,SYBASE,… 属于这一类小 结
关系数据结构关系定义关系性质关系模式
关系的完整性实体完整性参照完整性用户定义完整性
关系代数
关系演算
关系数据库管理系统
1 求供应工程 J1零件的供应商号 SNO,( S,P,J,SPJ )
2 求供应工程 J1零件 P1 的供应商号 SNO ;
πSNO(σJNO=‘J1’(SPJ))
πSNO(σJNO=‘J1’ ∧ PNO=‘SPJ’ (SPJ))
3 求供应工程 J1红色零件的供应商号 SNO ;
πSNO(σCOLOR=‘红色 ’ ∧ JNO=‘J1’ (P SPJ))
πSNO (πPNO (σ COLOR =‘红色 ’ (P)) πPNO,SNO (σ JNO =‘J1’ (SPJ)))
4 求没有使用天津供应商生产的红色零件的工程号 JNO,( S,P,J,SPJ )
πJNO(J) - πJNO(σCOLOR=‘红色 ’ ∧ CITY=‘天津’ (P SPJ
S) )
5 求至少用了 S1供应商所供应的全部零件的工程号 JNO ;
πPNO,JNO(σSNO =‘S1’ (SPJ)) ÷ πPNO (σSNO =‘S1’ (SPJ))
πPNO (σCOLOR =‘红色 ’ (P))
πJNO,SNO,PNO (SPJ) πSNO (σCITY =‘天津 ’ (S))