null第2章 关系数据库 第2章 关系数据库 null本章主要按数据模型的三个要素讲述关系数据库的一些基本理论(关系模型的数据结构、关系的定义和性质、关系的完整性、关系代数、关系数据库等 )
掌握关系的定义及性质、关系键、外部键等基本概念以及关系演算语言的使用方法
重点掌握实体完整性和参照完整性的内容和意义、常用的几种关系代数的基本运算等null2.1 关系模型的数据结构及其形式化定义
2.2 关系的键与关系的完整性
2.3 关系代数
2.4 关系演算 2.1 关系模型的数据结构及其形式化定义 2.1 关系模型的数据结构及其形式化定义 2.1.1 关系的形式化定义及其有关概念
域(Domain)
域是一组具有相同数据类型的值的集合,又称为值域
域中所包含的值的个数称为域的基数(用m表示)。例如 :
D1={李力,王平,刘伟},m1=3;
D2={男,女};m2=2;
D3={18,20,18};m3=3。
整数、实数和字符串的集合都是域 域名 null笛卡尔积(Cartesian Product)
给定一组域D1,D2,…,Dn(它们可以包含相同的元素,即可以完全不同,也可以部分或全部相同)。D1,D2,…,Dn的笛卡尔积为
D1×D2×……×Dn={(d1,d2,…,dn)|di∈Di,i=1,2,…,n}
每一个元素(d1,d2,…,dn)中的每一个值di叫做一个分量(Component) ,di∈Di
每一个元素(d1,d2,…,dn)叫做一个n元组(n-Tuple),简称元组(Tuple)
null 笛卡尔积D1×D2×…×Dn的基数M(即元素(d1,d2,…,dn)的个数)为所有域的基数的累乘之
积,即M= 。
例如,上述表示教师关系中姓名、性别两个域的笛卡尔积为:
D1×D2={(李力,男),(李力,女),(王平,男),(王平,女),(刘伟,男),(刘伟,女)}
分量:李力、王平、刘伟、男、女
元组 :(李力,男),(李力,女) ,M=m1×m2=3×2=6 null笛卡尔积可用二维表的形式表示:
笛卡尔积实际是一个二维表
元组同一域null关系(Relation)
笛卡尔积D1×D2×…×Dn的任一子集称为定义在域D1,D2,…,Dn上的n元关系(Relation)
R(D1,D2…,Dn)关系的名字n是关系的目或度如,上例D1×D2笛卡尔积的某个子集可以构成教师关系T1,如表2.2所示 D1×D2笛卡尔积的子集(关系T1)null在关系R中,当n=1时,称为单元关系。当n=2时,称为二元关系,以此类推 。
关系中的每个元素是关系中的元组,通常用t表示,关系中元组个数是关系的基数
由于关系是笛卡尔积的子集,因此,也可以把关系看成一个二维表 。
具有相同关系框架的关系称为同类关系 。元组域属性属性的名字惟一 null不符合实际意义的关系在关系模型中,关系可进一步定义为:
关系头(Heading)+关系体(Body) 由属性名的集合组成关系结构中的内容或者数据 不变
可变
2.1.2 关系的性质2.1.2 关系的性质2.1.2 关系的性质
关系是一种
规范
编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载
化了的二维表中行的集合
每一列中的分量必须来自同一个域,必须是同一类型的数据。
不同的列可来自同一个域,每一列称为属性,不同的属性必须有不同的名字 。
列的顺序可以任意交换。
关系中元组的顺序(即行序)可任意。
关系中每一分量必须是不可分的数据项。 null非规范化的关系 表2.8 规范化的关系 表2.9在表2.8中,籍贯含有省、市/县两项,出现了“表中有表”的现象,则为非
规范化关系,而应把籍贯分成省、市/县两列,将其规范化,如表2.9所示 2.1.3 关系模式2.1.3 关系模式2.1.3 关系模式
关系的描述称为关系模式(Relation Schema)
R(U,D,DOM,F)
R--关系名
U--属性名集合
D--属性所来自的域
DOM--属性向域的映像集合
F--属性间数据的依赖关系集合
简记为:R(U)或R(A1,A2,…,An)
属性名 null关系模型关系关系头关系体静态、稳定,固定不变随数据更新不断变化 null例如,在第1章的图1-22所示的教学数据库中,共有五个关系,其关系模式可分别表示为:
学生(学号,姓名,性别,年龄,系别)
教师(教师号,姓名,性别,年龄,职称,工资,岗位津贴,系别)
课程(课程号,课程名,课时)
选课(学号,课程号,成绩)
授课(教师号,课程号)null与学生关系模式对应的数据库中的实例有如下6个元组,如图2-1所示。 图2-1 与学生关系模式对应的实例 2.1.4 关系数据库与关系数据库模式2.1.4 关系数据库与关系数据库模式2.1.4 关系数据库与关系数据库模式 关系数据库模型关系数据库型值静态、稳定,固定不变随数据更新不断变化 2.2 关系的键与关系的完整性 2.2 关系的键与关系的完整性 2.2.1 候选键与主关系键
候选键(Candidate Key)
“学生关系”中的学号能惟一标识每一个学生
“选课关系”中,只有属性的组合“学号+课程号”才能惟一地区分每一条选课
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
能惟一标识关系中元组的一个属性或属性集,称为候选键(Candidate Key) 候选键 候选键 惟一性 最小性 null主关系键(Primary Key)
从多个候选键中选择一个作为查询、插入或删除元组的操作变量,被选用的候选键称为 主关系键。
每个关系必定有且仅有一个主关系键 学号 姓名 以学号作为数据操作的依据 以姓名作为数据操作的依据 主键
主码
关系键
关键字null主属性(Prime Attribute)与非码属性(Non-Prime Attribute)
主属性:包含在主关系键中的各个属性称为主属性
非码属性:不包含在任何候选键中的属性称为非码属性(或非主属性)
全码 :所有属性的组合是关系的候选键 教师T 课程C 1:nn:1学生S课程C 1:nn:1教师T 学生S 课程C n:nn:nn:n候选码为
(T,C,S)全码 2.2.2 外部关系键 2.2.2 外部关系键 2.2.2 外部关系键关系R1关系R2属性X属性Y…属性X属性Z…主码 主码 外部关系键或外码 参照关系 被参照关系 被参照关系的主码和参照关系的外码必须定义在同一个域上 2.2.3 关系的完整性 2.2.3 关系的完整性 2.2.3 关系的完整性 完整性约束 实体完整性 参照完整性 用户自定义完整性 必须满足体现具体领域中的语义约束 null实体完整性(Entity Integrity)
主关系键的值不能为空或部分为空
学生关系中的主关系键“学号”不能为空
选课关系中的主关系键“学号+课程号”不能部分为空,
即“学号”和“课程号”两个属性都不能为空
参照完整性(Referential integrity)
如果关系R2的外部关系键X与关系R1的主关系键相符,则X的每个值或者等于R1中主关系键的某一个值,或者取空值null未分配系别null用户定义完整性(User-defined Integrity)
针对某一具体关系数据库的约束条件
反映某一具体应用所涉及的数据必须满足的语义要求
如:成绩属性的取值范围在0-100之间
2.3 关系代数 2.3 关系代数 关系数据结构 关系操作 关系完整性约束 查询 更新 插入 删除修改 关系模型 2.3.1 关系代数的分类及其运算符 2.3.1 关系代数的分类及其运算符 2.3.1 关系代数的分类及其运算符
关系代数是一种抽象的查询语言
关系代数的运算对象与运算结果都是关系
关系代数运算符∪
-
∩
×
∏
∞
*
÷ >,≥
<,≤
=,≠∧
∨
┐ 集合运算符 关系运算符 比较运算符 逻辑运算符 null关系代数的运算按运算符的不同主要分为两类:
传统的集合运算:
把关系看成元组的集合,以元组作为集合中元素来进行运算,其运算是从关系的“水平”方向即行的角度进行的。
包括并、差、交和笛卡尔积等运算。
专门的关系运算:
不仅涉及行运算,也涉及列运算,这种运算是为数据库的应用而引进的特殊运算。
包括选取、投影、连接和除法等运算。2.3.2 传统的集合运算 2.3.2 传统的集合运算 设给定两个关系R、S,若满足:
(1) 具有相同的度n;
(2) R中第i个属性和S中第i个属性必须来自同一个域。
则说关系R、S是相容的。
除笛卡尔积外,其他的集合运算要求参加运算的关系必须满足上述的相容性定义。null并(Union) :R∪S={t | t∈R∨t∈S}
差(Difference) :R-S = {t | t∈R∧┐t∈S}
交(Intersection) :R∩S = {t | t∈R∧t∈S}
广义笛卡尔积(Extended Cartesian Product) :
R×S = {tr⌒ts| tr∈R∧ts∈S} R∩S = R-(R-S) null【例2-4】 如图2-3(a)、(b)所示的两个关系R与S为相容关系,(c)为R与S 的并,(d)为R与S的交,(e)为R与S的差,(f)为R与S的广义笛卡尔积。 nullnull2.3.3 专门的关系运算 2.3.3 专门的关系运算 由于传统的集合运算,只是从行的角度进行,而要灵活地实现关系数据库多样的查询操作,必须引入专门的关系运算。
在讲专门的关系运算之前,为叙述上的方便先引入几个概念。
(1)设关系模式为R(A1,A2,……An),它的一个关系为R,t∈R表示t是R的一个元组,t[Ai]则表示元组t中相应于属性Ai的一个分量。null(2)若A={Ai1,Ai2,……,Aik},其中Ai1,Ai2,……,Aik是A1,A2,……,An中的一部分,则A称为属性列或域列,Ã则表示{A1,A2,……,An}中去掉{Ai1,Ai2,……,Aik}后剩余的属性组。t[A]={t[Ai1],t[Ai2],……,t[Aik]}表示元组t在属性列A上诸分量的集合。
(3)R为n目关系,S为m目关系,tr∈R, ts∈S,tr ⌒ ts称为元组的连接(concatenation),它是一个n+m列的元组,前n个分量为R的一个n元组,后m个分量为S中的一个m元组。
(4)给定一个关系R(X,Z),X和Z为属性组,定义当t[X]=x时,x在R中的象集(image set),为Zx={t[Z]|t∈R,t[X]=x},它表示R中的属性组X上值为x的诸元组在Z上分量的集合。 象集举例象集举例x1 在R中的象集
Zx1={Z1,Z2,Z3}
x2 在R中的象集
Zx2={Z2,Z3}
x3 在R中的象集
Zx3={Z1,Z3}null选择(Selection)
F(R)={t | t∈R∧F(t)='真'}
[例2-5] 查询计算机系的全体学生。
Dept='计算机' (S)或
5=‘计算机’ (S)(其中5为属性Dept的序号)
运算结果如图 从行的角度进行的运算 F为选取的条件 null[例2-6] 查询工资高于1000元的男教师。
(Sal>1000) ∧(Sex= '男')(T)
运算结果如图null投影(Projection)
ΠA(R)={t[A] | t∈R}
[例2-7] 查询教师的姓名、教师号及其职称。
ΠTN,TNo,Prof(T) 或
Π2,1,5(T)(其中2,1,5分别为属性TN、TNo和Prof的序号)
运算结果如图 A为R中的属性列 从列的角度进行的运算 null[例2-8] 查询教师关系中有哪些系。
ΠDept(T)
运算结果如图null[例2-9] 查询讲授C5课程的教师号。
ΠTNo(σ CNo='C5' (TC))
运算结果如图null连接(Join)
= {t r⌒ts |tr∈R∧ts∈S∧tr [X]ts[Y ]为真}
为算术比较运算符
自然连接: 在等值连接的情况下,当连接属性X与Y具有相同属性组时,把在连接结果中重复的属性列去掉,记为:R*S null [例2-10] 设有如图2-9(a)、(b)所示的两个关系R与S,(c)为R和S的大于连接(C>D),(d)为R和S的等值连接(C=D),(e)为R和S的等值连接(R.B=S.B),(f)为R和S的自然连接。 (a) (b) null (c) (d) (f) (e) null等值连接与自然连接的区别
自然连接要求相等属性值的属性名相同,而等值连接不要求
自然连接是去掉重复列的等值连接
[例2-11] 查询讲授“数据库”课程的教师姓名。
ΠTN(CN='数据库' (C)*TC*ΠTNo,TN(T)) 或
ΠTN(ΠTNo(CN='数据库' (C)*TC)*ΠTNo,TN(T))
运算结果如图null除法(Division)
R÷S = {tr[X] | tr∈R∧Πy(S)Yx}
除法运算同时从行和列的角度进行运算,适合于包含“全部”之类的短语的查询。Yx为x在R中的象集,x =tr[X] null[例2-13] 查询选修了全部课程的学生学号和姓名。
ΠSNo,CNo(SC)÷ΠCNo(C)*ΠSNo,SN(S)
[例2-14] 查询至少选修了C1课程和C3课程的学生学号。
ΠSNo,CNo(SC)÷ΠCNo(CNo='C1'∨CNo='C3' (C))
只有S4同学的象集至少包含了C1课程和C3课程,因此,查询结果为S4 。null【例2-12】 已知关系R和S,如图2-11(a),(b)所示,则R÷S如图(c)所示。null与除法的定义相对应,本题中
X={A,B}={(a1,b2),(a2,b4),(a3,b5)},Y={C,D}={(c3,d5),(c4,d6)}
Z={F}={f3,f4}
其中,元组在X上各个分量值的象集分别为:
(a1,b2)的象集为{(c3,d5),(c4,d6)}
(a2,b4)的象集为{(c1,d3)}
(a3,b5)的象集为{(c2,d8)}
S在Y上的投影为{(c3,d5),(c4,d6)}
显然只有(a1,b2)的象集包含S在Y上的投影,所以R÷S={(a1,b2)} 除举例除举例设关系R,S,如图 (a),(b)所示 ,则R÷S如图(c)所示。null关系R中,A可以取4个值{a1,a2,a3,a4}。其中:
a1 的象集为{(b1,c2),(b2,c3),(b2,c1)}
a2 的象集为{(b3,c7),(b2,c3)}
a3 的象集为{(b4,c6)}
a4 的象集为{(b6,c6)}
S在(B,C)上的投影为{(b1,c2),(b2,c1),(b2,c3)}
显然,只有a1的象集(B,C)a1包含了S在(B,C)属性组上的投影,所以
R ÷S={a1}2.4 关系演算2.4 关系演算关系代数关系演算 过程化语言,怎样做非过程化语言,做什么 null2.4.1 元组关系演算语言
ALPHA语言
QUEL语言 关系演算 元组关系演算 域关系演算 ALPHA,
QUEL QBE 2.4.1 元组关系演算语言 2.4.1 元组关系演算语言 ALPHA语言
基本格式:
<操作符> <工作空间名> (<目标表>)[:<操作条件>]内存空间 (W)GET
PUT
HOLD
UPDATE
DELETE
DROP null数据查询
① 简单查询
② 条件查询
③ 排序查询
④ 定额查询
⑤ 带元组变量的查询
⑥ 带存在量词的查询
⑦ 库函数查询
数据更新
① 修改
② 插入
③ 删除DELETE PUT null① 简单查询
[例2-16] 查询所有被选修的课程号码。
GET W (SC.CNo)
② 条件查询
[例2-17] 查询计算机系工资高于1000元的教师的姓名和工资。
GET W (T.TN,T.Sal):T.Dept= '计算机'∧T.Sal>1000
③ 排序查询
[例2-18] 查询S3同学所选课程号及成绩,并按成绩降序排列。
GET W (SC.CNo,SC.Score):SC.SNo= 'S3' DOWN SC.Score
④ 定额查询
[例2-20] 查询一名男教师的教师号和姓名,并使他的年龄最小。
GET W (1) (T.TNo,T.TN):T.Sex= '男' UP T.Age null⑤ 带元组变量的查询
[例2-21] 查询S3同学所选课程号。
RANGE SC X
GET W (X.CNo):X.SNo= 'S3'
⑥ 带存在量词的查询
[例2-23] 查询至少选修一门其课时数为80的课程的学生的姓名。
RANGE C CX
SC SCX
GET W (S.SN):SCX(SCX.SNo=S.SNo∧CX(CX.CNo=SCX.CNo∧CX.CT=80))
使用RANGE来说明元组变量,X为关系SC上的元组变量 null⑦ 库函数查询
[例2-25] 求学号为S1学生的平均分。
GET W (AVG(SC.Score):S.SNo= 'S1'
[例2-26] 求学校共有多少个系。
GET W (COUNT(S.Dept))ALPHA常用的库函数及其功能 null(2)数据更新
① 修改
[例2-27] 把刘伟教师转到信息系。
HOLD W(T.Dept):T.TN= '刘伟'
MOVE '信息' TO W.Dept
UPDATE W
读数据 修改 送回null② 插入
[例2-28] 在SC表中插入一条选课记录(S6,C1,85)。
MOVE 'S6' TO W.SNo
MOVE 'C1' TO W.CNo
MOVE 85 TO W.Score
PUT W(SC)
建立新元组 写数据null③ 删除
[例2-29] 删除学号为S6的学生的信息。
HOLD W(S):S.SNo= 'S6'
DELETE W读数据 删除nullQUEL语言
数据更新 2.4.2 域关系演算语言QBE 2.4.2 域关系演算语言QBE QBE语言步骤
关系名 属性1…属性n操作命令属性值或查询条件属性值或查询条件…P.(打印或显示)
U.(修改)
I.(插入)
D.(删除) 注:棕色字体为用户操作
蓝色字体为系统操作小结小结关系运算关系代数关系演算传统的集合运算符专门的关系运算符算术比较运算符逻辑运算符元组关系演算域关系演算ALPHAQUELQBE抽象的
查询语言