软件技术基础教案.docx
《软件技术基础教案.docx》由会员分享,可在线阅读,更多相关《软件技术基础教案.docx(22页珍藏版)》请在冰点文库上搜索。
软件技术基础教案
软件技术基础教案
课程类型:
必修课(40+20学时)
授课对象:
化工05级7-9班
授课教师:
王保三
所在单位:
计算机与通信工程学院软件工程系
中国石油大学计通学院软件技术基础教案
授课教师:
王保三
课程名称软件技术基础授课日期11.1课时数2
教学内容:
1.关系模型
2.关系运算
教学目的、要求:
掌握关系模型的概念,了解关系运算的规则。
教学重点:
关系模型的概念、基本术语。
教学难点:
笛卡尔积、连接。
教学设计(教学过程中主要环节、教学教法及作业布置):
一、关于教材(讲授)
本课程教材中没有此部分内容,需要参考《软件技术基础(数据库技术)》。
二、教材结构、课时分配(讲授)
2个学时。
三、关系模型(讲授)
1.关系
关系是一张二维表,每个关系有一个关系名,表的列称为属性,表的行称为元组。
2.关系模式
关系的名称与关系的属性集称为关系模式,用关系名(属性名1,属性名2,…,属性名n)来表示。
例:
学生(学号,姓名,性别,生日,籍贯)
3.关系模型
在数据库设计中包含1~n个关系模式,这些关系模式的集合称为关系模型。
4.关系数据库
关系数据库是基于关系数据模型的数据库系统,它是应用数学方法来处理数据库中的数据。
关系数据模型是1970年由美国IBM公司的E.F.Codd提出,直到1976年以后才相继出现了实验性及商品化的关系数据库产品。
70年代末以后所问世的数据库产品90%以上为关系数据模型的,它逐渐替代层次、网状模型数据库系统而成为主流数据库系统。
30多年来,关系数据库系统的研究取得了辉煌的成就,推出了许多性能良好的商品化关系数据库管理系统(简称RDBMS)。
如著名的DB2、Oracle、Ingress、Sybase、Informix、SQLServer等,同时数据库的应用领域也迅速扩大。
关系数据库系统的崛起并迅速占领市场成为主流数据库系统。
关系数据库系统的特点:
(1)关系模型以二维表的形式表示,它既能表示实体,又能表示实体间的联系,数据结构简单清晰,概念单一,易学易懂。
(2)可直接处理实体间1:
1、1:
m、m:
n等关系。
(3)一条查询命令可以同时获取满足该条件的多个记录,查询效率较高。
(4)数据独立性高,用户只需要按命令要求查询数据,不必关心数据的物理存储。
(5)有较坚实的理论基础,保证设计质量。
关系模型也有一些不足之处。
如查询效率不如非关系数据模型,对非事务性应用在功能上尚显不足等。
5.关系数据模型概述
关系数据模型由关系数据结构、关系操作集合和关系完整性约束这三部分组成。
(1)关系数据结构
关系模型的数据结构单一。
在关系模型中,现实世界中的实体以及实体间的各种联系均用关系来表示。
在用户看来,关系模型中数据的逻辑结构是一张二维表。
(2)关系操作
关系模型中常用的关系操作包括两大部分,一部分是选择(Select)、投影(Project)、连接(Join)、除(Divide)、并(Union)、交(Intersection)、差(Difference)等查询操作,另一部分是增加(Insert)、删除(Delete)、修改(Update)操作。
查询操作的表达能力是关系操作中最主要的部分。
关系操作的特点是集合操作方式,即操作的对象和结果都是集合。
这种操作方式也称为一次一个集合(Set-at-a-time)的方式。
相应地,非关系数据模型的数据操作方式则为一次一个记录(Record-at-a-time)的方式。
目前有很多数学理论可以表示关系操作,其中最为著名的有两种:
关系代数(RelationalAlgebra)和关系演算(RelationalCalculus)。
关系代数是用对关系的运算来表达查询要求的方式;关系演算是用谓词来表达查询要求的方式。
关系演算又可按谓词变元的基本对象是元组变量还是域变量分为元组关系演算和域关系演算。
关系代数、元组关系演算和域关系演算3种语言在表达能力上是完全等价的。
因此,本章仅对关系代数进行阐述。
关系操作通过关系语言实现。
关系代数、元组关系演算和域关系演算均是抽象的查询语言,这些抽象的语言与具体的DBMS中实现的关系数据语言并不完全一样,但它们能用作评估实际系统中查询语言能力的标准或基础。
实际的查询语言除了提供关系代数或关系演算的功能外,还提供了许多附加功能,例如集函数、关系赋值、算术运算等。
另外还有一种介于关系代数和关系演算之间的语言SQL(StructuredQueryLanguage)。
SQL不仅具有丰富的查询功能,而且具有数据定义和数据控制功能,是集数据查询、数据定义(DDL)、数据操纵(DML)和数据控制(DCL)于一体的关系数据语言。
它充分体现了关系数据语言的特点和优点,现已成为关系数据库的标准语言。
因此,关系数据语言可以分为如图5.1所示的三类。
它们的共同特点是:
语言具有完备的表达能力,是非过程化的集合操作语言,功能强,能够嵌入高级语言中使用。
图5.1关系数据语言分类
(3)关系的完整性约束
数据库的数据完整性是指数据库中数据的正确性和相容性,是一种语义概念,包括两个方面:
(A)与现实世界中应用需求的数据的相容性和正确性。
(B)数据库内数据之间的相容性和正确性。
例如,学生的学号必须唯一,性别只能是男或女,学生所选修的课程必须是已开设的课程,等等。
可见,数据库中数据是否具备完整性,它关系到数据库系统能否真实地反映现实世界,因此,数据库数据的完整性是十分重要的。
数据完整性由完整性规则来定义,它是对关系的某种约束条件。
关系模型中可以有三类完整性约束:
域完整性、实体完整性和参照完整性。
其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件,应该由关系系统(如DBMS)自动支持;而域完整性是应用领域需要遵循的约束条件,体现了具体领域中的语义约束。
一般由关系系统(如DBMS或工具)提供编写手段,由用户自行定义,由DBMS的完整性检查机制负责检查。
6.基本术语
(1)关系(Relation):
一个关系对应一个二维表,二维表名就是关系名。
学生
学号
姓名
性别
年龄
系名
籍贯
0201001
张军
男
18
IS
江苏
0203010
王小丽
女
17
CS
山东
…
…
…
…
…
…
0210010
李力
男
17
IS
北京
院系
系名
系地址
主任
电话
CS
振兴楼
高祥
6610
IS
鲁迅楼
岳越
6602
…
…
…
…
MA
培育楼
李力欣
6802
SP
飞跃楼
郑亦星
6810
图5.2关系数据模型的数据结构示例
图5.2包含两个表,也即两个关系:
“学生”关系和“院系”关系。
(2)属性(Attribute)和值域(Domain):
在二维表中的列(字段),称为属性。
属性的个数称为关系的元数(或称为目、度)。
例如图5.2中“学生”中有6个属性,即表示该关系的目为6,各属性名分别为:
学号、姓名、性别、年龄、系名、籍贯。
每一个属性对应一个值的集合,作为其可以取值的范围,称为该属性的值域(简称域)。
例如,姓名的域是所有合法姓名的集合;学号的域是7位十进制数字所组成的字符串的集合;年龄的域为[15,50]的整数;性别的域为{男,女}。
在数学中,有些域可能是无限集合,但在计算机中,所有数据都是离散化了的数据,并且表示的长度都是有限的。
因而,所有的域都可以看成是有限的集合。
要指出的是,在数据库中,某些属性值可能是未知的或某些场合下是不适用的。
如职工的手机号码这个属性,对没有手机的职工就不适用;对有手机但不愿公开号码的职工或正在购买手机的职工,这个属性虽是适用的,但却是未知的。
在此情况下,关系数据模型允许有条件的使用空缺符NULL。
NULL虽然有时也称为空值(NullValue),但严格地说,它不是值,而是一个标记,说明该属性值是空缺的或未知的。
(3)关系模式(RelationSchema):
在二维表中的行定义(记录的型),即对关系的描述称为关系模式,一般表示为:
关系名(属性名1,属性名2,…,属性名n)
例:
图5.2中的两个关系模式分别为:
学生(学号,姓名,性别,年龄,系名,籍贯)
院系(系名,系地址,主任,电话)
(4)元组(Tuple):
在二维表中的一行(记录的值),称为一个元组。
例:
(0203010,王小丽,女,17,CS,山东)是“学生”关系中的一个元组。
一个关系包含若干元组,这些元组的集合称为关系所取的值。
一般说来,关系模式是相对稳定的,而关系的值是相对变化的。
以“学生”关系为例,它的属性和域可多年不变,而学生则因入学、毕业、退学等原因而不断地变动。
借用逻辑中的概念,称关系模式为关系的内涵(Intension),关系的值为关系的外延(Extension)。
因此,严格地讲,关系是关系模式(型)和元组的集合(值)的统称。
但在许多场合,我们不加区分地把元组的集合(即关系的值)称为关系。
(5)分量(Component):
元组中的一个属性值。
例:
在“学生”关系中元组(0203010,王小丽,女,17,CS,山东)的每一个属性值:
0203010,王小丽,女,17,CS,山东都是它的分量。
(6)候选码/候选键(CandidateKey):
如果在一个关系中,存在某一属性或属性组的值能用来唯一地决定其它属性的值,也就是唯一地决定一个元组,则这个属性或属性组称为该关系的候选码/候选键,简称为码(key)。
一个关系中至少有一个候选码,也可能有多个候选码。
例:
在“学生”关系中,如果姓名不允许重名时,学号和姓名都是候选码。
(7)主码/主键(PrimaryKey):
在关系的若干个候选码中指定一个用来唯一标识该关系中的每一个元组,这个被指定的候选码称为该关系的主码或主键。
例:
在“学生”关系中,存在两个候选码:
学号和姓名,若选学号作为唯一标识,那么,学号就是“学生”关系的主码。
在“院系”关系中,系名是该关系的主码。
主码的值可用来识别和区分元组,它必须是唯一的。
在有些关系中,主码由所有属性构成,称为全码(AllKey)。
如,关系SUPPLY(供应商,零件号,工程名)代表供应关系,即表示某供应商提供某种零件给某工程。
从语义上可知,必须知道这三者才能确定一个供应关系。
因此,SUPPLE的主码由三个属性组成,这是全码。
(8)主属性(PrimaryAttribute)和非主属性(NonprimaryAttribute):
关系中包含在任何一个候选码中的属性称为主属性或码属性,不包含在任何一个候选码中的属性称为非主属性或非码属性。
例:
在“学生”关系中,学号和姓名是主属性,其它属性是非主属性。
(9)外码/外键(ForeignKey):
当关系中的某个属性(或属性组)虽然不是该关系的主码或只是主码的一部分,但却是另一个关系的主码时,称该属性(或属性组)为这个关系的外码。
例如,图5.2中的“学生”关系中的系名,它不是主码,但它是外码,因为它是另一个关系“院系”的主码。
(10)参照关系(ReferencingRelation)与被参照关系(ReferencedRelation):
参照关系也称从关系,被参照关系也称主关系,它们是指以外码相关联的两个关系。
以外码作为主码的关系称为被参照关系;外码所在的关系称为参照关系。
由此可见,被参照关系与参照关系是通过外码相联系的,这种联系通常是1:
n的联系。
例如,图5.2中的“院系”关系是被参照关系,而“学生”关系是参照关系,它们通过外码“系名”相联系。
在关系数据库中,用关系来描述现实世界的事物和事物之间的联系,这种表示联系的优点是表示形式简单、一致,用户易掌握。
但是这种表示方法不能显式地表示事物间的联系,关系间的联系都是隐含在它们的公共属性中,特别是外码中。
7.关系的性质
并非任意一个二维表都能表示一个关系,在关系数据库中的关系应具有以下的性质:
(1)每个分量是不可分的数据项。
这是关系数据库对关系的最基本的一条限定,即不允许表中套表。
(2)每个关系仅有一种关系模式。
关系模式中属性的数据类型以及属性个数是相对固定的,并且每个属性必须命名,在同一个关系模式中,属性名必须唯一。
(3)属性(列)是同质的(Homogeneous)。
即每一属性中的分量是同一类型的数据,来自同一个域。
不同的属性也可出自同一个域,但要给予不同的属性名。
例:
有一个域:
学生名单={章小倩,刘平,吴依新,王冰}
而“班级”关系中,班干部属性和班级学生属性都从学生名单域中取值。
为避免混淆,必须给这两个属性取不同的属性名,而不能直接使用域名。
(4)属性(列)的顺序无关,即列的次序可任意交换。
(5)元组(行)的顺序无关,即行的次序可任意交换。
(6)同一个关系中不允许出现完全相同的元组。
四、关系运算(讲授、图例演示)
用计算机求解计算时,任何一种运算都是将一定的运算符作用于一定的运算对象上,得到预期的运算结果。
所以运算对象、运算符、运算结果是运算的三大要素。
关系代数的运算对象是关系,它将一定的关系代数运算符作用于一定的关系上,得到预期的运算结果亦为关系。
关系数据模型提供了一系列操作的定义,这些操作称为关系代数操作,简称关系操作。
关系操作的传统表示方式——关系代数。
关系代数是以集合代数为基础发展起来的,它的运算对象和运算结果均为关系。
关系代数也是一种抽象的查询语言,它通过对关系的运算来表达查询,因此关系代数是研究关系数据语言的数学工具。
关系代数用到的运算符可分为两类:
(1)传统的集合运算。
这类运算是将关系看成元组的集合,其运算是从关系的“水平”方向,即行的角度来进行的。
(2)专门的关系运算。
这类运算不仅涉及行,也涉及列。
关系代数用到的运算符如表5.1所示。
其中比较运算符和逻辑运算符是用来辅助专门的关系运算符进行操作的。
在关系代数运算中,把基本的关系代数运算经过有限次复合的式子称为关系代数运算表达式,简称为代数表达式。
这种表达式的运算结果仍是一个关系,可以用关系代数表达式表示所需要进行的各种数据库查询和更新处理的需求。
1.传统的集合运算
关系是元组的集合,因此集合运算在原则上可适用于关系。
但在关系数据模型中,要求每个操作的结果仍为关系。
为此,参与操作的两个关系必须同类型,即两个关系具有相同的目,且对应的属性的域相同。
这种限制称为并相容(UnionCompatibility)。
传统的集合运算是二目运算,包括并、交、差、广义笛卡尔积4种运算。
(1)并(Union)
设关系R和关系S具有相同的目n(即两个关系都有n个属性),且相应的属性取自同一个域,则关系R及与关系S的并由属于R或属于S的元组组成。
其结果关系仍为n目关系,记做:
R∪S={t|t∈R∨t∈S}t是元组变量
集合并运算R∪S就是把两个关系中所有的元组集中起来,形成一个新的关系(相同的元组不重复出现)。
关系R与关系S的并运算的结果可以用图5.3(a)的灰色部分表示。
(2)差(Difference)
设关系R和关系S具有相同的目n,且相应的属性取自同一个域,则关系R与关系S的差由属于R而不属于S的所有元组组成。
其结果关系仍为n目关系,记做:
R-S={t|t∈R∧t
S}
集合差运算R-S的结果是包含在R中而不包含在S中的元组。
要注意的是,R-S与S-R是不相同的,后者表示在S中而不在R中的元组。
关系R与关系S的差运算的结果可以用图5.3(b)的灰色部分表示。
(3)交(Intersection)
设关系R和关系S具有相同的目n,且相应的属性取自同一个域,则关系R与关系S的交由既属于R又属于S的元组组成,其结果关系仍为n目关系,记做:
R∩S={t|t∈R∧t∈S}
显然,R∩S=R-(R-S)。
(a)R∪S(b)R-S(c)R∩S
图5.3集合R和S的并、差和交运算结果示意图
集合交运算R∩S的结果是两个关系中公共的元组。
关系R与关系S的交运算的结果可以用图5.3(c)的灰色部分表示。
(设大圆为关系R,小圆为关系S)
(4)广义笛卡尔积(ExtendedCartesianProduct)
设关系R和关系S的目分别是r和s,定义R和S的笛卡尔积是一个(r+s)目的元组集合,每一个元组的前r个分量来自于R的一个元组,后s个分量来自于S的一个元组。
若R有m个元组,S有n个元组,则关系R和关系S的广义笛卡尔积有m×n个元组,记做:
R×S={t|t=
∧tr∈R∧ty∈S}图5.4中(a)和(b)表示关系R和关系S,它们是并相容的。
图5.4中的(c)、(d)、(e)、(f)分别表示该两个关系的并、交、差和广义笛卡尔积。
图5.4传统的集合运算示例
2.专门的关系运算
专门的关系运算主要包括:
对单个关系进行垂直分解(投影操作)或水平分解(选择操作)和对多个关系的结合(连接操作)等。
为了叙述方便,引入一些记号。
•设关系模式为R(A1,A2,…,An),它的一个关系设为R。
t∈R表示t是R的一个元组。
t[Ai]则表示元组t中相应于属性Ai的一个分量。
•若A={Ail,Ai2,…,Aik},其中Ail,Ai2,…,Aik是Al,A2,…,An中的一部分,则A称为属性列或是域列。
t[A]=(t[Ail],t[Ai2],…,t[Aik])表示元组t在属性A上诸分量的集合。
则表示{Al,A2,…,An}中去掉{Ail,Ai2,…,Aik}后剩余的属性组。
•设R为n目关系,S为m目关系。
tr∈R,ts∈S。
trts称为元组的连接(Connection)。
它是一个(n+m)目的元组,前n个分量为R中的一个元组,后m个分量为S中的一个元组。
•给定一个关系R(X,Z),X和Z为属性组。
我们定义,当t[X]=x时,x在R中的象集(ImagesSet)为:
Zx={t[Z]|t∈R,t[X]=x}
它表示R中属性组X上值为x的诸元组在Z上分量的集合。
下面阐述专门的关系运算的定义。
(1)选择(Selection)
选择又称为限制(Restriction),它是在关系R中选择满足给定条件的诸元组,记做:
σF(R)={t|t∈R∧F(t)=“真”}
其中F表示选择条件,它是一个逻辑表达式,取逻辑值“真”或“假”。
逻辑表达式F的基本形式为:
X1θY1[ΦX2θY2]…
θ表示比较运算符,它可以是>、≥、<、≤、=、或≠。
X1、Y1等是属性名或常量或简单函数。
属性名也可以用它的序号来代替。
Φ表示逻辑运算符,它可以┐、∧或∨。
[]表示任选项,即[]中的部分可以要也可以不要,…表示前面的格式可以重复下去。
选择运算实际上是从关系R中选取使逻辑表达式F为真的元组,这是从行的角度进行的运算。
设有一个“学生一课程”关系数据库,其中有“学生”关系、“课程”关系和“选修”关系。
如图5.5所示。
下面的例子均是对这3个关系进行运算。
例查询信息系(IS系)全体学生,其关系代数表达式为:
σ系名='IS'(学生)或σ5=‘IS’(学生)
其中下角标'5'为系名的属性序号,运算结果如图5.6(a)所示。
例查询年龄小于20岁的学生,其关系代数表达式为:
σ年龄<20(学生)或σ4<20(学生)
运算结果如图5.6(b)所示。
例查询山东籍的女学生,其关系代数表达式为:
σ籍贯=‘山东’and性别=‘女’(学生)或σ6=‘山东’and3=‘女’(学生)
运算结果如图5.6(c)所示。
例查询IS系和CS系的学生,其关系代数表达式为:
σ系名=‘IS’(学生)∪σ系名=‘CS’(学生)
运算结果如图5.6(d)所示。
(2)投影(Projection)
对关系R的投影操作,实际上是从R中选择出若干属性列组成新的关系,记做:
∏A(R)={t[A]|t∈R}
其中A为R的属性列。
投影操作实际上是从关系中选取某些属性列,即从列的角度进行的运算。
例查询学生的姓名和年龄,即求学生关系在学生姓名和年龄这两个属性上的投影。
∏姓名,年龄(学生)或∏2,4(学生)
运算结果如图5.7(a)所示。
投影之后不仅消去了原关系中的某些列,而且还可能消去某些行,因为消去了某些属性列后,就可能出现重复行,应消去这些完全相同的行。
例查询学生关系中有哪些省市的学生,即查询学生关系在籍贯属性上的投影。
∏籍贯(学生)
运算结果如图5.7(b)所示。
学生关系原来有4个元组,而投影结果取消了一个重复的“山东”元组,因此只有3个元组。
例查询不作为其它课程的先行课的课号。
∏课程号(课程)-∏先行课(课程)
运算结果如图5.7(c)所示。
例查询所有女生的姓名和所在的系。
运算结果如图5.7(d)所示。
∏姓名,系名(σ性别=‘女’(学生))
(3)连接(Join)
连接也称为θ连接,它是二元关系操作。
连接是从两个关系的笛卡尔积中选取它们的属性间满足一定条件的元组,记做:
R
S={trtsy|tr∈R∧ty∈S∧tr[A]θty[B]}
AθB
其中,A和B分别为R和S上度数相等且可比的属性。
θ是比较运算符。
连接运算从R和S的笛卡尔积R×S中选取在R关系上A属性组的值与在S关系上B属性组的值满足比较关系θ的元组。
连接与笛卡尔积的区别在于笛卡尔积包含两个关系的所有元组的组合,而连接只包含那些满足连接条件的元组的组合。
如果没有连接条件,即无条件连接,则连接变成了笛卡尔积。
在一般情况下,两个关系的笛卡尔积是没有实用意义的。
连接运算中有两种最为重要也最为常用的连接,一种是等值连接(Equi—Join),另一种是自然连接(NaturalJoin)。
1)等值连接:
若θ为“=”的连接运算称为等值连接,它是从关系R与关系S的笛卡尔积中选取A,B属性值相等的那些元组,即等值连接为:
R
S={trty|tr∈R∧ty∈S∧tr[A]=ty[B]}
A=B
2)自然连接:
是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且要在结果中把重复的属性去掉,即若R和S具有相同的属性组B,则自然连接可记做:
R
S={trty|tr∈R∧ty∈S∧tr[B]=ty[B]}
一般的连接操作是从行的角度进行运算,但自然连接还需要取消重复列,所以是同时从行和列的角度进行运算。
例设关系R、S分别为图5.8中的(a)和(b),图5.8(c)(d)(e)分别为
R
S、R
S、R
S的运算结果。
C两个关系R和S的自然连接计算过程如下:
①计算R×S;
②设A1,A2,…,Ak是R和S的公共属性,挑选R×S中满足R.A1=S.A1∧…∧R.Ak=S.Ak的那些元组;
③去掉S.A1∧…∧S.Ak这些列。
自然连接是构造新关系的有效方法,投影和选择是分解关系的有效方法。
利用投影、选择和自然连接操作可以任意地分解和构造新关系。
一般,自然连接使用在R和S有公共属性的情况中。
如果两个关系没有公共属性,那么它们的自然连接就变成为笛卡尔积。
(4)除(Division)
除操作也是二元关系操作。
为了便于理解除操作的含义,先举个例子。
图5.9表示两个关系R和S,R中的属性组(C,D)与S中的属性组(C,D)对应,R.C与
展开阅读全文
相关搜索
资源标签