1、周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系1第第2章章 关系数据库理论基础关系数据库理论基础 关系数据库应用数学方法来处理数据库中的数据。最早将这类方法用于数据处理的是1962年CODASYL发表的“信息代数”,之后有1968年David Child在7090机上实现的集合论数据结构,但系统地、严格地提出关系模型的是美国IBM公司的E.F.Codd. 30多年来,关系数据库系统的研究取得了辉煌的成就。关系方法从实验室走向了社会,涌现出许多性能良好的商品化关系数据库管理系统(RDBMS),如著名的DB2,Oracle,Ingres,Sybase,Informi
2、x等。数据库的应用领域迅速扩大。周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系2本书第2、3、4、5、6章将集中讨论关系数据库的有关问题。其中,第2章介绍关系模型的基本概念,即关系模型的数据结构、关系操作和关系的完整性;第3、4章介绍关系数据库的标准语言SQL;第5章介绍关系系统查询优化;第6章关系规范化。这是关系数据库的理论基础,也是关系数据库系统逻辑设计的工具。周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系32.1 关系模型概述关系数据库系统是支持关系模型的数据库系统。关系模型有关系数据结构、关系操作集合和关系完整性约束三部分
3、组成。周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系4一、单一的数据结构关系关系模型的数据结构非常单一。在关系模型中,现实世界的实体以及实体之间的各种联系均用关系来表示。在用户看来,关系模型中数据的逻辑结构是一张二维表。周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系5二、关系操作关系模型给出了关系操作的能力,但不对RDBMS语言给出具体的语法要求。关系模型中常用的关系操作包括:选择(Select)、投影(Project)、连接(Join)、除(Divide)、并(Union)、交(Intersection)、差(Differenc
4、e)等查询(Query)操作和增加(Insert)、删除(Delete)、修改(Update)等更新操作两大部分。查询的表达能力是其中最主要的部分。关系操作的特点是集合操作方式,即操作的对象和操作的结果都是集合。这种操作方式也称为一次一集合(set-at-a-time)的方式。相应地,非关系数据模型的数据操作方式则为一次一记录(record-at-a-time)的方式。周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系6 早期的关系操作能力通常用代数方式或逻辑方式来表达,分别称为关系代数和关系演算。关系代数是用对关系的运算来表达查询的方式。关系演算是用谓词来表达查询
5、要求的方式。关系演算又可按谓词变元的基本对象是元组变量还是域变量分为元组关系演算和域关系演算。关系代数、元组关系演算和域关系演算三种语言在表达能力上是完全等价的。 关系代数、元组关系演算和域关系演算均是抽象的查询语言,这些抽象的语言与具体的DBMS中实现的实际语言并不完全一样。单它们能用作评估实际系统中查询语言能力的标准或基础。实际的查询语言除了提供关系代数或关系演算的功能外,还提供了许多附加功能,例如集函数、关系赋值、算术运算等。周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系7 关系语言是一种高度非过程化的语言,用户不必请求DBA为其建立特殊的存取路径,存取路
6、径的选择由DBMS的优化机制来完成,此外,用户不必求助于循环结构就可以完成数据操作。 另外还有一种介于关系代数和关系演算之间的语言SQL (Structured Query Language)。SQL不仅具有丰富的查询功能,而且具有数据定义和数据控制功能,是集查询、 DDL、DML和DCL于一体的关系数据语言。它充分体现了关系数据语言的特点和优点,是关系数据库的标准语言。周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系8因此,关系数据语言可以分为三类:关系数据语言关系代数语言关系演算语言域关系演算语言元组关系演算语言具有关系代数和关系演算双重特点的语言 这些关系数
7、据语言的共同特点是,语言具有完备的表达能力,是非过程化的集合操作语言,功能强,能够嵌入高级语言中使用。周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系9三、关系的三类完整性约束 关系模型允许定义三类完整性约束:实体 完整性、参照完整性和用户定义的完整性。 其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件,应该由关系系统自动支持。用户定义的完整性是应用领域需要遵循的约束条件,体现了具体领域中的语义约束。下面将分别介绍关系模型的三个方面。周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系102.2 关系数据模型的数据结构关系数据
8、模型的数据结构2.2.1 关系的数学定义1域(Domain)域:是一组具有相同数据类型的值集合。例如:自然数,男,女,0,1等都可以是域。基数:域中数据的个数称为域的基数。域被命名后用如下方法表示:D1 = 白亚春,陈韬,王雪莲,表示姓名的集合,基数是3;D2 = 计算机系,电子系周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系112笛卡尔积(Cartesian Product)给定一组域D1,D2,Di,Dn(可以 有相同的域),则笛卡尔积定义为:D1D2 Di Dn = (d1,d2,di,dn) diDi,i = 1,2,nD1 D2 = (陈韬,计算机系)
9、,(陈韬,电子系),(王雪莲,计算机系),(王雪莲,电子系),(白亚春,计算机系),(白亚春,电子系)其中每个(d1,d2,di,dn)叫做元组,元组中的每一个值di叫做分量,di必须是Di中的一个值。显然,笛卡尔积的基数就是构成该积所有域的基数累乘积,若Di(i = 1,2,n)为有限集合,其基数为mi(i = 1,2,n),则D1 D2 Di Dn笛卡尔积的基数M为:周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系12该笛卡尔积的基数是M = m1m2 = 3*2 = 6,即该笛卡尔积共有6个元组,它可组成一张二维表姓名姓名系别系别陈韬陈韬计算机系计算机系陈韬
10、陈韬电子系电子系王雪莲王雪莲计算机系计算机系王雪莲王雪莲电子系电子系白亚春白亚春计算机系计算机系白亚春白亚春电子系电子系周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系133关系(Relation)关系:笛卡尔积D1 D2 Di Dn的子集R称作在域D1,D2,Dn上的关系,记作:R(D1,D2,Di,Dn)其中:R为关系名,n为关系的度或目(Degree),Di是域组中的第i个域名.当n = 1 时,称该关系为单元关系;当n = 2 时,称该关系为二元关系;以此类推,关系中有n个域,称该关系为n元关系。把列称为属性(Attribute)。一般来说,一个取自笛卡尔
11、积的子集才有意义。 周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系14关系可以分为三种类型:基本关系(又称基本表):是实际存在的表,它是实际存储数据的逻辑表示;查询表:是对基本表进行查询后得到的结果表;视图表:是由基本表或其它视图导出的表,是一个虚表,不对应实际存储的数据。 姓名姓名系别系别陈韬陈韬计算机系计算机系王雪莲王雪莲电子系电子系白亚春白亚春计算机系计算机系周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系152.2.2 关系的性质1列是同质的。 2关系中行的顺序、列的顺序可以任意互换,不会改变关系的意义。 学号学号姓名姓名性
12、别性别出生日期出生日期所在系所在系0022102王雪莲王雪莲女女1980-9-15电子系电子系计算机系计算机系白亚春白亚春男男1981-1-251981-1-250051309005130900522010052201陈韬陈韬男男计算机系计算机系1981-5-61981-5-60052217袁更旭袁更旭男男1980-12-8计算机系计算机系周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系163关系中的任意两个元组不能相同。 4、关系中的元组分量具有原子性,即每一个分量都必须是不可分的数据项。 学号学号姓名姓名性别性别出生日期出生日期所在系所在系0022102王雪莲
13、王雪莲女女1980-9-15电子系电子系0051309白亚春白亚春男男1981-1-25计算机系计算机系0051309白亚春白亚春男男1981-1-25计算机系计算机系0052217袁更旭袁更旭男男1980-12-8计算机系计算机系周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系172.3 关系的完整性2.3.1 键1候选键(Candidate key)若关系中的某一属性组的值能惟一地标识一个元组,则称该属性组为候选键。2主键(Primary key)若一个关系中有多个候选键,则选定一个为主键。周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算
14、机科学系183主属性和非主属性(Prime Attribute)and Non-prime Attribute) 包含在任何一个候选键中的属性称为主属性。而不包含在任何一个候选键中的属性称为非主属性4外键(Foreign key) 设F是基本关系R的一个或一组属性,但不是R的键(主键或候选键),如果F与基本关系S的主键K相对应,则称F是R的外键,并称R为参照关系,S为被参照关系。 周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系19学号学号姓名姓名性别性别出生日期出生日期所在系所在系0022102王雪莲王雪莲女女1980-9-15电子系电子系0051309白亚春白
15、亚春男男1981-1-25计算机系计算机系0052201陈韬陈韬男男1981-5-6计算机系计算机系0052217袁更旭袁更旭男男1980-12-8计算机系计算机系课程号课程号学号学号成绩成绩C201002210275C505005130995C508005220192C506005221780周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系202.3.2 实体完整性实体完整性规则:关系中的主键不能为空值(Null)。空值就是“不知道”或“无意义”2.3.3 参照完整性参照完整性规则:表的外键必须是另一个表主键的有效值,或者是空值。 周口师范学院计算机科学系02级
16、教育专业2022-6-9周口师范学院计算机科学系21学号学号姓名姓名性别性别出生日期出生日期所在系所在系0022102王雪莲王雪莲女女1980-9-15电子系电子系0051309白亚春白亚春男男1981-1-25计算机系计算机系0052201陈韬陈韬男男1981-5-6计算机系计算机系0052217袁更旭袁更旭男男1980-12-8计算机系计算机系课程号课程号学号学号成绩成绩C201002210275C505005130995C508A10286992C506005221780周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系222.3.4 用户定义完整性用户按照实
17、际的数据库运行环境要求,对关系中的数据所定义的约束条件,它反映的是某一具体应用所涉及的数据必须要满足的条件。 周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系232.4 关系代数关系代数是一种抽象的查询语言,是关系数据操纵语言的一种传统表达方式,它是用对关系的运算来表达查询的。关系代数的运算对象是关系,运算结果亦为关系。关系运算用到的运算符包括四类:集合运算符、专门的关系运算符、算术比较符和逻辑运算符周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系24关系代数的运算按运算符的不同可分为传统的集合运算和专门的关系运算两类。其中传统的集合
18、运算将关系看作元组的集合,其运算是从关系的“水平”方向即行的角度来进行。而专门的关系运算不仅涉及行而且涉及列。比较运算符和逻辑运算符是用来辅助专门的关系运算符进行操作的周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系252.4.1 传统的集合运算传统的集合运算是二目运算,包括并、交、差、广义笛卡儿积四种运算。当集合运算并、交、差用于关系时,要求参与运算的两个关系必须是相容的,即两个关系的度数一致,并且关系相应属性的性质必须一致。周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系26 设关系R和关系S具有相同的目 n (即两个关系都有n个
19、属性),且相应的属性取自同一个域,则可以定义并交差运算如下:1并并:是将两个关系中的所有元组构成新的关系,并运算的结果中必须消除重复值。关系R与S的并运算记作:RS=t | t Rt S。 其结果仍为n目关系,有属于R或属于S的元组组成 .周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系272交交:将两个关系中的公共元组构成新的关系。关系R与S的交运算记作: RS= t | t Rt S 。 其结果仍为n目关系,有属于R且属于S的元组组成 。3差差:运算结果是由属于一个关系并且不属于另一个关系的元组构成的新关系,就是从一个关系中减去另一个关系。关系R与S的差运算记
20、作: RS = t | t Rt S 。 其结果仍为n目关系,有属于R而不属于S的所有元组组成 。周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系284.广义笛卡儿积(Extended Cartesian Product) 设有两个n,m目的关系R,S,则R和S的广义笛卡儿积RS是一个(m+n)目的元组的集合,每个元组的前n个分量是R的一个元组,后m个分量是S的一个元组。 关系R和关系S的广义笛卡儿积运算记作:RS= trts | tr Rts S 传统集合运算举例:P40、41周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系292.
21、4.2 专门的关系运算专门的关系运算包括选择、投影、连接、除等。为了叙述的方便,先引入几个记号: (1)设关系模式为R(A1,A2,An)。它的一个关系设为R。t R表示t是R的一个元组,tAi则表示元组t中相应于属性Ai的一个分量。 (2)若A=Ai1,Ai2,Aik,其中Ai1,Ai2,Aik 是A1,A2,An 中的一部分,则A称为属性列或域列。 tAi = (tAi1,tAi2,tAik)表示元组t在属性列A上诸分量的集合,A则表示A1,A2,An中去掉Ai1,Ai2,Aik后剩余的属性组。 (3)R为n目关系,S为m目关系。 tr R , ts S trts 称为元组的连接。它是一个
22、n+m列的元组,前n个分量为R中的一个n元组。后m个分量为S中的一个m元组。 周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系30(4)给定一个关系R(X,Z),X和Z为属性组,定义,当tX=x时,x在R中的象集为: Zx=tZ | t R, tX=x 它表示R中属性组X上值为x的诸元素在Z上分量的集合。下面给出这些关系运算的定义:周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系311选择(Selection)选择:是按照给定条件从指定的关系中挑选出满足条件的元组构成新的关系。或者说,选择运算的结果是一个表的行的子集。记作: F(R)
23、=t | t R F(t)=“真” 其中F是表示选择条件,它是一个逻辑表达式,取逻辑值“真”或“假”。 逻辑表达式F由逻辑运算符 , ,连接各算术表达式组成,算术表达式的基本形式为:X1 Y1 其中表示比较运算符,它可以是 , , = 或 。X1 ,Y1等是属性名,或为常量,或为简单函数;属性名也可以用它的序号来代替。 选择运算实际上是从关系R中选取使逻辑表达式F为真的元组,这是从行的角度进行的运算。 )(R条件表达式)(RA周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系322投影(Projection)投影:是从指定的关系中挑选出某些属性构成新的关系。或者说,
24、选择运算的结果是一个表的列的子集。记作: A(R)=tA | t R 其中A为R的属性列。 投影操作是从列的角度进行的运算,投影的结果将取消由于取消了某些列而产生的重复元组。 周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系333连接(Join)连接:连接运算是按照给定条件,把满足条件的各关系的所有元组,按照一切可能组合成新的关系。或者说,连接运算的结果是从两关系的广义笛卡尔积中选取属性间满足一定条件的元组。记作:R S= trts | trRtsS trA tsB A B( RS )其中A和B分别为R和S上度数相等且可比的属性组。 是比较运算符。连接运算从R和S
25、的广义笛卡尔积R S中选取(R关系)在A属性组上的值与(S关系)在B属性组上值满足比较关系的元组A B周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系34连接运算中有两种最为重要也最为常用的连接,一种是等值连接,另一种是自然连接。等值连接: 为“=”的连接运算称为等值连接。它从R与S的广义笛卡尔积中选取A,B属性值相等的那些元组,即等值连接为: R S = trts | trRtsS trA = tsB R S(r.A1=s.B1 r.A2=s.B2 r.An=s.Bn(R S)自然连接:当连接的两关系有相同的属性名时,称这种连接为自然连接,并在结果中去掉重复列。
26、它是等值连接的一个特例。即若R和S具有相同的属性组,则记作: R S = trts | trRtsS trB = tsBA = B周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系354.除(Division) 给定关系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上投影的集合。记作: RS=trX | trRy (S)包含于Yx其中Yx为x在R中的象集,x= trX .
27、 除操作是同时从行和列角度进行运算。周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系36例:设关系R,S分别为下图中的(a)和(b)所示,R S的结果为(c) 在关系R中,A可以取四个值 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)属性组上的投影,所以
28、RS=a1周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系37 ABCa1b1c2a2b3c7a3b4c6a1b2c3a4b6c6a2b2c3a1b2c1BCDb1c2d1b2c1d1b2c3d2 A a1RSR Scba周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系38学号Sno姓名Sname性别Ssex年龄Sage系别Sdept95001李勇男20CS95002刘晨女19IS95003王敏女18MA95004张立男19ISStudent(a)设有一个学生设有一个学生-课程数据库,包括学生关系课程数据库,包括学生关系Student
29、课程关系课程关系Course和选修关系和选修关系SC。如下图示。如下图示周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系39课程号Cno课程名Cname先行课Cpno学分Ccredit1数据库542数学23信息系统144操作系统635数据结构746数据处理27PASCAL语言64Course(b)周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系40学号Sno课程号Cno成绩Grade9500119295001285950013889500229095002380( c )SC周口师范学院计算机科学系02级教育专业2022-6-9周口师
30、范学院计算机科学系41例例1 查询信息系(查询信息系(IS系)全体学生系)全体学生 Sdept=“IS”(Student) 或 5=“IS”(Student) 例2查询年龄小于20岁的学生 sage 20(Student) 或 4 20(Student)例3 查询学生的姓名和所在系,即求Student关系在学生Student在系别属性上的投影Sname,Sdept(Student) 或 2,5(Student)姓名和系别两个属性上的投影例4 查询学生关系Student 中都有哪些系,即查询关系Sdept(Student) 或 5 (Student)周口师范学院计算机科学系02级教育专业2022
31、-6-9周口师范学院计算机科学系42然后求Sno,Cno(SC)先建立一个临时关系K:例7 查询至少选修了1号课和3号课的学生KCno13例8 查询选修了2号课的学生的学号 Sno ( Cno =2(SC))例9 查询至少选修了一门其直接先行课为5号课的 学生姓名Sname ( Cpno =5(Course) SC Sno ,Sname(Student)周口师范学院计算机科学系02级教育专业2022-6-9周口师范学院计算机科学系43Sname (Sno( Cpno =5(Course) SC ) Sno ,Sname(Student)例10 查询选修了全部课程的学生学号和姓名Sno ,Cno(SC) Cno (Course) Sno ,Sname(Student)