软件技术基础 教 案
课程类型:必修课(40+20学时) 授课对象:化工05级7-9班
授课教师:王保三
所在单位:计算机与通信工程学院软件工程系1
中国石油大学计通学院 软件技术基础教案
授课教师:王保三
课程名称 软件技术基础 授课日期 11.1 课时数 2
教学内容: 1.关系模型 2.关系运算
教学目的、要求:
掌握关系模型的概念,了解关系运算的规则。
教学重点:
关系模型的概念、基本术语。
教学难点:
笛卡尔积、连接。
教学设计(教学过程中主要环节、教学教法及作业布置): 一、关于教材(讲授)
本课程教材中没有此部分内容,需要参考《软件技术基础(数据库技术)》。
二、教材结构、课时分配(讲授)
2个学时。
三、关系模型(讲授)
1.关系
关系是一张二维表,每个关系有一个关系名,表的列称为属性,表的行称为元组。
2.关系模式
关系的名称与关系的属性集称为关系模式,用关系名(属性名1,属性名2,…,属性名n)来表示。
例:学生(学号,姓名,性别,生日,籍贯)
3.关系模型
在数据库设计中包含1~n个关系模式,这些关系模式的集合称为关系模型。
4.关系数据库
关系数据库是基于关系数据模型的数据库系统,它是应用数学方法来处理数据库中的数据。
关系数据模型是1970年由美国IBM公司的E.F.Codd提出,直到1976年以后才相继出现了实验性及商品化的关系数据库产品。70年代末以后所问世的数据库产品90%以上为关
2
系数据模型的,它逐渐替代层次、网状模型数据库系统而成为主流数据库系统。
30多年来,关系数据库系统的研究取得了辉煌的成就,推出了许多性能良好的商品化关系数据库管理系统(简称RDBMS)。如著名的DB2、Oracle、Ingress、Sybase、Informix、SQL Server等,同时数据库的应用领域也迅速扩大。关系数据库系统的崛起并迅速占领市场成为主流数据库系统。
关系数据库系统的特点:
(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)的方式。
目前有很多数学理论可以表示关系操作,其中最为著名的有两种:关系代数(Relational Algebra)和关系演算(Relational Calculus)。关系代数是用对关系的运算来表达查询要求的方式;关系演算是用谓词来表达查询要求的方式。关系演算又可按谓词变元的基本对象是元组变量还是域变量分为元组关系演算和域关系演算。关系代数、元组关系演算和域关系演算3种语言在表达能力上是完全等价的。因此,本章仅对关系代数进行阐述。
关系操作通过关系语言实现。关系代数、元组关系演算和域关系演算均是抽象的查询语言,这些抽象的语言与具体的DBMS中实现的关系数据语言并不完全一样,但它们能用作评估实际系统中查询语言能力的标准或基础。实际的查询语言除了提供关系代数或关系演算的功能外,还提供了许多附加功能,例如集函数、关系赋值、算术运算等。
另外还有一种介于关系代数和关系演算之间的语言SQL(Structured Query Language)。SQL不仅具有丰富的查询功能,而且具有数据定义和数据控制功能,是集数据查询、数据
3
定义(DDL)、数据操纵(DML)和数据控制(DCL)于一体的关系数据语言。它充分体现了关系数据语言的特点和优点,现已成为关系数据库的标准语言。
因此,关系数据语言可以分为如图5.1所示的三类。它们的共同特点是:语言具有完备的表达能力,是非过程化的集合操作语言,功能强,能够嵌入高级语言中使用。
关系代数语言:例如 ISBL 元组关系演算语言:例如 APLHA、QUEL 关系数据语言 关系演算语言 域关系演算语言:例如 QBE 具有关系代数和关系演算双重特点的语言:例如 SQL 图5.1 关系数据语言分类
(3)关系的完整性约束
数据库的数据完整性是指数据库中数据的正确性和相容性,是一种语义概念,包括两个方面:
(A)与现实世界中应用需求的数据的相容性和正确性。
(B)数据库内数据之间的相容性和正确性。
例如,学生的学号必须唯一,性别只能是男或女,学生所选修的课程必须是已开设的课程,等等。可见,数据库中数据是否具备完整性,它关系到数据库系统能否真实地反映现实世界,因此,数据库数据的完整性是十分重要的。
数据完整性由完整性规则来定义,它是对关系的某种约束条件。关系模型中可以有三类完整性约束:域完整性、实体完整性和参照完整性。其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件,应该由关系系统(如DBMS)自动支持;而域完整性是应用领域需要遵循的约束条件,体现了具体领域中的语义约束。一般由关系系统(如DBMS或工具)提供编写手段,由用户自行定义,由DBMS的完整性检查机制负责检查。
6.基本术语
(1)关系(Relation):一个关系对应一个二维表,二维表名就是关系名。
学生
学号 0201001 0203010 „ 0210010 姓名 张军 王小丽 „ 李力 性别 男 女 „ 男 年龄 18 17 „ 17 系名 IS CS „ IS 籍贯 江苏 山东 „ 北京 院系
系名 CS IS „ MA SP 系地址 振兴楼 鲁迅楼 „ 培育楼 飞跃楼 主任 高祥 岳越 „ 李力欣 郑亦星 电话 6610 6602 „ 6802 6810 图5.2 关系数据模型的数据结构示例
图5.2包含两个表,也即两个关系:“学生”关系和“院系”关系。
4
(2)属性(Attribute)和值域(Domain):在二维表中的列(字段),称为属性。属性的个数称为关系的元数(或称为目、度)。例如图5.2中“学生”中有6个属性,即表示该关系的目为6,各属性名分别为:学号、姓名、性别、年龄、系名、籍贯。每一个属性对应一个值的集合,作为其可以取值的范围,称为该属性的值域(简称域)。例如,姓名的域是所有合法姓名的集合;学号的域是7位十进制数字所组成的字符串的集合;年龄的域为[15,50]的整数;性别的域为{男,女}。
在数学中,有些域可能是无限集合,但在计算机中,所有数据都是离散化了的数据,并且表示的长度都是有限的。因而,所有的域都可以看成是有限的集合。
要指出的是,在数据库中,某些属性值可能是未知的或某些场合下是不适用的。如职工的手机号码这个属性,对没有手机的职工就不适用;对有手机但不愿公开号码的职工或正在购买手机的职工,这个属性虽是适用的,但却是未知的。在此情况下,关系数据模型允许有条件的使用空缺符NULL。NULL虽然有时也称为空值(Null Value),但严格地说,它不是值,而是一个标记,说明该属性值是空缺的或未知的。
(3)关系模式(Relation Schema):在二维表中的行定义(记录的型),即对关系的描述称为关系模式,一般表示为:
关系名(属性名1,属性名2,„,属性名n) 例:图5.2中的两个关系模式分别为:
学生(学号,姓名,性别,年龄,系名,籍贯)
院系(系名,系地址,主任,电话)
(4)元组(Tuple):在二维表中的一行(记录的值),称为一个元组。 例:(0203010,王小丽,女,17,CS,山东)是“学生”关系中的一个元组。
一个关系包含若干元组,这些元组的集合称为关系所取的值。一般说来,关系模式是相对稳定的,而关系的值是相对变化的。以“学生”关系为例,它的属性和域可多年不变,而学生则因入学、毕业、退学等原因而不断地变动。借用逻辑中的概念,称关系模式为关系的内涵(Intension),关系的值为关系的外延(Extension)。因此,严格地讲,关系是关系模式(型)和元组的集合(值)的统称。但在许多场合,我们不加区分地把元组的集合(即关系的值)称为关系。
(5)分量(Component):元组中的一个属性值。
例:在“学生”关系中元组(0203010,王小丽,女,17,CS,山东)的每一个属性值:0203010,王小丽,女,17,CS,山东都是它的分量。
(6)候选码/候选键(Candidate Key):如果在一个关系中,存在某一属性或属性组的值能用来唯一地决定其它属性的值,也就是唯一地决定一个元组,则这个属性或属性组称为该关系的候选码/候选键,简称为码(key)。一个关系中至少有一个候选码,也可能有多个候选码。
例:在“学生”关系中,如果姓名不允许重名时,学号和姓名都是候选码。
(7)主码/主键(Primary Key):在关系的若干个候选码中指定一个用来唯一标识该关系中的每一个元组,这个被指定的候选码称为该关系的主码或主键。
例:在“学生”关系中,存在两个候选码:学号和姓名,若选学号作为唯一标识,那么,
5
学号就是“学生”关系的主码。在“院系”关系中,系名是该关系的主码。
主码的值可用来识别和区分元组,它必须是唯一的。在有些关系中,主码由所有属性构成,称为全码(All Key)。如,关系SUPPLY(供应商,零件号,工程名)代表供应关系,即表示某供应商提供某种零件给某工程。从语义上可知,必须知道这三者才能确定一个供应关系。因此,SUPPLE的主码由三个属性组成,这是全码。
(8)主属性(Primary Attribute)和非主属性(Nonprimary Attribute):关系中包含在任何一个候选码中的属性称为主属性或码属性,不包含在任何一个候选码中的属性称为非主属性或非码属性。
例:在“学生”关系中,学号和姓名是主属性,其它属性是非主属性。
(9)外码/外键(Foreign Key):当关系中的某个属性(或属性组)虽然不是该关系的主码或只是主码的一部分,但却是另一个关系的主码时,称该属性(或属性组)为这个关系的外码。例如,图5.2中的“学生”关系中的系名,它不是主码,但它是外码,因为它是另一个关系“院系”的主码。
(10)参照关系(Referencing Relation)与被参照关系(Referenced Relation):参照关系也称从关系,被参照关系也称主关系,它们是指以外码相关联的两个关系。以外码作为主码的关系称为被参照关系;外码所在的关系称为参照关系。由此可见,被参照关系与参照关系是通过外码相联系的,这种联系通常是1:n的联系。例如,图5.2中的“院系”关系是被参照关系,而“学生”关系是参照关系,它们通过外码“系名”相联系。
在关系数据库中,用关系来描述现实世界的事物和事物之间的联系,这种表示联系的优点是表示形式简单、一致,用户易掌握。但是这种表示方法不能显式地表示事物间的联系,关系间的联系都是隐含在它们的公共属性中,特别是外码中。
7.关系的性质
并非任意一个二维表都能表示一个关系,在关系数据库中的关系应具有以下的性质: (1)每个分量是不可分的数据项。这是关系数据库对关系的最基本的一条限定,即不允许表中套表。
(2)每个关系仅有一种关系模式。关系模式中属性的数据类型以及属性个数是相对固定的,并且每个属性必须命名,在同一个关系模式中,属性名必须唯一。
(3)属性(列)是同质的(Homogeneous)。即每一属性中的分量是同一类型的数据,来自同一个域。不同的属性也可出自同一个域,但要给予不同的属性名。 例:有一个域:学生名单 = { 章小倩,刘平,吴依新,王冰 }
而“班级”关系中,班干部属性和班级学生属性都从学生名单域中取值。为避免混淆,必须给这两个属性取不同的属性名,而不能直接使用域名。
(4)属性(列)的顺序无关,即列的次序可任意交换。
(5)元组(行)的顺序无关,即行的次序可任意交换。
(6)同一个关系中不允许出现完全相同的元组。
6
四、关系运算(讲授、图例演示)
用计算机求解计算时,任何一种运算都是将一定的运算符作用于一定的运算对象上,得到预期的运算结果。所以运算对象、运算符、运算结果是运算的三大要素。关系代数的运算对象是关系,它将一定的关系代数运算符作用于一定的关系上,得到预期的运算结果亦为关系。
关系数据模型提供了一系列操作的定义,这些操作称为关系代数操作,简称关系操作。 关系操作的传统表示方式——关系代数。关系代数是以集合代数为基础发展起来的,它的运算对象和运算结果均为关系。关系代数也是一种抽象的查询语言,它通过对关系的运算来表达查询,因此关系代数是研究关系数据语言的数学工具。
表5.1 关系代数的运算符 运 算 符 集合运算符 ∪ ∩ ― × 专门的关系 运算符 σ Π ÷ 比较运算符 > ≥ < ≤ = ≠ 逻辑运算符 ┐ ∧ ∨ 含 义 并 交 差 广义笛卡尔积 选择 投影 连接 除 大于 大于等于 小于 小于等于 等于 不等于 非 与 或 关系代数用到的运算符可分为两类:
(1)传统的集合运算。这类运算是将关系看成元组的集合,其运算是从关系的“水平”方向,即行的角度来进行的。
(2)专门的关系运算。这类运算不仅涉及行,也涉及列。
关系代数用到的运算符如表5.1所示。其中比较运算符和逻辑运算符是用来辅助专门的关系运算符进行操作的。
在关系代数运算中,把基本的关系代数运算经过有限次复合的式子称为关系代数运算表达式,简称为代数表达式。这种表达式的运算结果仍是一个关系,可以用关系代数表达式表示所需要进行的各种数据库查询和更新处理的需求。
1.传统的集合运算
关系是元组的集合,因此集合运算在原则上可适用于关系。但在关系数据模型中,要求每个操作的结果仍为关系。为此,参与操作的两个关系必须同类型,即两个关系具有相同的目,且对应的属性的域相同。这种限制称为并相容(Union Compatibility)。
7
传统的集合运算是二目运算,包括并、交、差、广义笛卡尔积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∧tS}
集合差运算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)广义笛卡尔积(Extended Cartesian Product)
设关系R和关系S的目分别是r和s,定义R和S的笛卡尔积是一个(r+s)目的元组集合,每一个元组的前r个分量来自于R的一个元组,后s个分量来自于S的一个元组。若R有m个元组,S有n个元组,则关系R和关系S的广义笛卡尔积有m×n个元组,记做:
R×S={ t | t=
图5.4中(a)和(b)表示关系R和关系S,它们是并相容的。 图5.4中的(c)、(d)、(e)、(f)分别表示该两个关系的并、交、差和广义笛卡尔积。
8
A a1 a1 a2 B b1 b2 b2 C c1 c2 c1 A a1 a1 a2 B b2 b3 b2 C c2 c2 c1 (a) R A a1 a1 a2 a1 B b1 b2 b2 b3 C c1 c2 c1 c2 A a1 A a1 a2 (b) S B b2 b2 C c2 c1 (d) R∩S B b1 C c1 (c) R∪S R.A a1 a1 a1 a1 a1 a1 a2 a2 a2 R.B b1 b1 b1 b2 b2 b2 b2 b2 b2 R.C c1 c1 c1 c2 c2 c2 c1 c1 c1 S.A a1 a1 a2 a1 a1 a2 a1 a1 a2 (e) R-S S.B b2 b3 b2 b2 b3 b2 b2 b3 b2 S.C c2 c2 c1 c2 c2 c1 c2 c2 c1 (f) R×S 图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上诸分量的集合。
__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中的象集(Images Set)为:
Zx={ t[Z] | t∈R,t[X]=x }
9
它表示R中属性组X上值为x的诸元组在Z上分量的集合。
学生 学号 姓名 性别 年龄 系名 籍贯 02001 李一新 男 20 CS 江苏 02002 张敏锐 女 19 IS 山东 02003 刘红 女 18 MA 北京 02004 陈立 男 19 IS 山东 课程 选修 课程号 课程名 先行课 学分 学号 课程号 成绩 1 数据库 5 4 02001 1 92 2 数学 2 02001 2 85 3 信息系统 1 4 02001 3 88 4 操作系统 6 3 02002 2 90 5 数据结构 7 4 02005 4 80 6 数据处理 2 7 C语言 6 4 图5.5 学生-课程数据库 下面阐述专门的关系运算的定义。 (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=‘山东’ and 3=‘女’(学生) 运算结果如图5.6(c)所示。
10
例 查询IS系和CS系的学生,其关系代数表达式为: σ系名=‘IS’(学生)∪σ系名=‘CS’(学生) 运算结果如图5.6(d)所示。
学号 姓名 性别 年龄 系名 籍贯 02002 张敏锐 女 19 IS 山东 02004 陈立 男 19 IS 山东 (a) 学号 姓名 性别 年龄 系名 籍贯 02002 张敏锐 女 19 IS 山东 02003 刘红 女 18 MA 北京 02004 陈立 男 19 IS 山东 (b) 学号 姓名 性别 年龄 系名 籍贯 02002 张敏锐 女 19 IS 山东 (c) 学号 姓名 性别 年龄 系名 籍贯 02001 李一新 男 20 CS 江苏 02002 张敏锐 女 19 IS 山东 02004 陈立 男 19 IS 山东 (d) 图5.6 选择运算示例
(2)投影(Projection)
对关系R的投影操作,实际上是从R中选择出若干属性列组成新的关系,记做:
∏A(R)={ t[A] | t∈R } 其中A为R的属性列。
投影操作实际上是从关系中选取某些属性列,即从列的角度进行的运算。
例 查询学生的姓名和年龄,即求学生关系在学生姓名和年龄这两个属性上的投影。
∏姓名,年龄(学生) 或∏2,4(学生) 运算结果如图5.7(a)所示。
投影之后不仅消去了原关系中的某些列,而且还可能消去某些行,因为消去了某些属性列后,就可能出现重复行,应消去这些完全相同的行。
例 查询学生关系中有哪些省市的学生,即查询学生关系在籍贯属性上的投影。 ∏籍贯(学生)
运算结果如图5.7(b)所示。学生关系原来有4个元组,而投影结果取消了一个重复的“山东”元组,因此只有3个元组。
11
姓名 年龄 籍贯 课程号 姓名 系名 李一新 20 江苏 2 张敏锐 IS 张敏锐 19 山东 3 刘红 MA 刘红 18 北京 4 陈立 19 (a) (b) (c) (d) 图5.7 投影运算示例
例 查询不作为其它课程的先行课的课号。
∏课程号(课程)- ∏先行课(课程)
运算结果如图5.7(c)所示。
例 查询所有女生的姓名和所在的系。运算结果如图5.7(d)所示。
∏姓名,系名(σ性别=‘女’(学生))
(3)连接(Join) 连接也称为θ连接,它是二元关系操作。连接是从两个关系的笛卡尔积中选取它们的属性间满足一定条件的元组,记做:
RS={ trtsy | tr∈R ∧ ty∈S ∧ tr[A]θty[B] }
其中,A和B分别为R和S上度数相等且可比的属性。θ是比较运算符。连接运算从R和S的笛卡尔积R×S中选取在R关系上A属性组的值与在S关系上B属性组的值满足比较关系θ的元组。
连接与笛卡尔积的区别在于笛卡尔积包含两个关系的所有元组的组合,而连接只包含那些满足连接条件的元组的组合。如果没有连接条件,即无条件连接,则连接变成了笛卡尔积。在一般情况下,两个关系的笛卡尔积是没有实用意义的。
连接运算中有两种最为重要也最为常用的连接,一种是等值连接(Equi—Join),另一种是自然连接(Natural Join)。
1)等值连接:若θ为“=”的连接运算称为等值连接,它是从关系R与关系S的笛卡尔积中选取A,B属性值相等的那些元组,即等值连接为:
R
A=B AθB
S = { trty | tr∈R ∧ ty∈S ∧ tr[A]=ty[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的运算结果。
12
C ①计算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与S.C、R.D与S.D具有相同的域。从R表可看出,当R(A,B)的值为(a1,b1)或(a2,b2)时,对应的属性组R(C,D)的值包含了S(C,D)属性组的值,我们就称{(a1,b1),(a2,b2)}为R÷S的结果。因为(R÷S)×S是R表的一部分,R表的其余部分可以看成“余数”。这就是除操作名称的由来。下面给出除的定义。 给定关系R(X,Y)和S(Y,Z),其中X,Y,Z为属性组。R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域集。R与S的除运算得到一个新的关系P(X),P与R中满足下列条件的元组在X属性列上的投影:元组在X上分量值x的象集Yr包含S在Y上投影的集合,记做: R÷S = { tr[X] | tr∈R ∧ ∏y(S) Yx } 其中Yx为x在R中的象集,x=tr[X]。 R÷S可分解为若干个基本的关系代数操作,具体计算过程如下: 1)求出R中X的各个分量的象集Yx 2)求出S在Y上投影的集合∏y(S) 3)比较Yx与∏y(S),选取满足∏y(S)Yx的分量,记为X’ 13 4)R÷S={ X’} 在图5.11中,关系R(A,B)可以取3个属性值{ (a1,b1),(a2,b2),(a3,b2) },其中: (a1,b1)的象集为{ (c1,d1),(c2,d2),(c3,d3) } (a2,b2)的象集为{ (c1,d1),(c2,d2) } (a3,b2)的象集为{ (c1,d1) } S在(C,D)上的投影为:{ (c1,d1),(c2,d2) } 显然只有{ (a1,b1),(a2,b2) }的象集(C,D)包含S在(C,D)属性组上的投影,所以R÷S={ (a1,b1),(a2,b2) }。 除运算还能用另一个等价的式子表示: R÷S = ∏x(R)- ∏x(∏x(R)×S-R) A a1 a1 a1 a2 a2 a3 B b1 b1 b1 b2 b2 b2 R C c1 c2 c3 c1 c2 c1 D d1 d2 d3 d1 d2 d1 C c1 c2 D d1 d2 S E e1 e5 A a1 a2 B b1 b2 R÷S 图5.9 除运算示例 例 查询先修课程覆盖操作系统先修课程的课程名。 ∏课程名,先修课(课程)÷∏先修课(σ 课程名='操作系统' (课程))={ (C语言) } 下面再以图5.5中的关系数据库为例,给出几个综合应用关系代数运算进行查询的例子。 例 查询至少选修1号课程和2号课程的学生号码。 首先建立一个临时关系K: 课程号 1 2 然后求:∏学号,课程号(选修) ÷ K 结果为{(02001)}。 求解过程与图5.9示例类似,先对选修关系在(学号,课程号)属性上投影,然后对其中每个元组逐一求出每一学生的象集,并依次检查这些象集是否包含K。 例 查询选修了2号课程的学生的学号,写出其关系代数表达式。 ∏学号(σ 课程号=2 (课程))={ (02001,02002) } 例 写出查询至少选修了一门其直接先行课程为1号课程的学生姓名的关系代数表达式。 ∏姓名(σ 先修课= 1 (课程)选修∏学号,姓名(学生))={ (李一新) } 或:∏姓名(∏学号(σ先修课=1(课程选修)∏学号,姓名(学生)) 例 写出查询选修了全部课程的学号和姓名的关系代数表达式。 14 ∏学号,课程号(选修) ÷ ∏课程号(课程) ∏学号,姓名(学生) 本节介绍了8种关系代数运算,在8种关系代数运算中,并、差、笛卡尔积、投影和选择5种运算为基本的运算,其他3种运算,即交、连接和除,均可以用5种基本运算来表达。引进它们并不增加语言的能力,但可以简化表达。 关系代数语言中比较典型的例子是查询语言ISBL(Information System Base Language)。ISBL语言由IBM United Kingdom研究中心研制,用于PRTV(Peterlee Relation Test Vehicle)实验系统。 五、作业 无。 六、本周上机 实验四 线性表的应用。 实验五 栈的应用。 参考资料: 1.教材《数据结构与软件工程》; 2.实验教程《软件技术基础实验指导书》。 课后小结(教学效果、学生反馈、课堂纪律等情况): 15 因篇幅问题不能全部显示,请点此查看更多更全内容