Download as pdf or txt
Download as pdf or txt
You are on page 1of 73

第5章 关系数据模型

刘红岩
清华大学 管理科学与工程系
liuhy@sem.tsinghua.edu.cn
简介
关系模型是目前商品化数据库产品的主流数据模型:
IBM DB2、Oracle、SAP Sybase、Microsoft SQL Server、
MySQL、Microsoft Access、…
 关系模型有着坚实的理论基础(集合论,数理逻辑),
可以保证关系模型的合理设计和有效实现。
 关系模型简洁易用,关系数据库是由一系列的关系组
成,而关系是以人们最熟悉的表格的形式组织和展现
给用户的。
 表格中的数据可以使用简单易懂的语言进行复杂地查
询。

Hongyan Liu @ Tsinghua University 2


主要内容
 关系模型的数据结构
 关系模型的约束
 关系操作语言:关系代数

Hongyan Liu @ Tsinghua University 3


5.1 关系模型的数据结构
 关系(relation):关系模型的基本组成单元
a named, two-dimensional table of data,
consisting of a set of named columns and an
arbitrary number of unnamed rows.
描述产品的关系 return to page 16
pCode pType pName cost price
101 足球类 足球 85 110
102 足球类 手套 90 122
201 羽毛球类 羽球鞋 28 38
202 羽毛球类 球拍 200 250
301 游泳类 泳镜 85 102
302 游泳类 泳帽 50 63
401 健美类 拉力器 40.5 54.5
402 健美类 十磅哑铃 70 92
403 健美类 跳绳 20
关系
 列(column):属性(attribute),字段(field)
 第一行各列的值,其余各行对应列的标题
pCode pType pName cost price
101 足球类 足球 85 110
102 足球类 手套 90 122
201 羽毛球类 羽球鞋 28 38
202 羽毛球类 球拍 200 250
301 游泳类 泳镜 85 102
302 游泳类 泳帽 50 63
401 健美类 拉力器 40.5 54.5
402 健美类 十磅哑铃 70 92
403 健美类 跳绳 20

Hongyan Liu @ Tsinghua University 5


关系
 行(row):元组(tuple),记录(record)
 除属性所在行之外的每一行
pCode pType pName cost price
101 足球类 足球 85 110
102 足球类 手套 90 122
201 羽毛球类 羽球鞋 28 38
202 羽毛球类 球拍 200 250
301 游泳类 泳镜 85 102
302 游泳类 泳帽 50 63
401 健美类 拉力器 40.5 54.5
402 健美类 十磅哑铃 70 92
403 健美类 跳绳 20

Hongyan Liu @ Tsinghua University 6


关系
 属性的域(domain)
 每一个属性在各行中的取值类型都是相同的,都有一个取值
范围
pCode pType pName cost price
101 足球类 足球 85 110
102 足球类 手套 90 122
201 羽毛球类 羽球鞋 28 38
202 羽毛球类 球拍 200 250
301 游泳类 泳镜 85 102
302 游泳类 泳帽 50 63
401 健美类 拉力器 40.5 54.5
402 健美类 十磅哑铃 70 92
403 健美类 跳绳 20

Hongyan Liu @ Tsinghua University 7


关系
 分量(item):每个属性对应每一行的值
 原子性,即分量不可以再细分

sNo sName year sex address telNo

山东省 62783456,
2004012345 张珊 2004 f
烟台市 13317509346

2005125463 李思 2005 m 北京市 62445678

 关系模型的基本要求:分量不可分,1NF
Hongyan Liu @ Tsinghua University 8
关系

 解决方法:横向和纵向分解 return to page 16

sNo sName year sex province city telNo

2004012345 张珊 2004 f 山东省 烟台市 62783456

2004012345 张珊 2004 f 山东省 烟台市 82345679

2005125463 李思 2005 m 北京市 62445678

Hongyan Liu @ Tsinghua University 9


关系

 分量
 分量可以是空值(null),即什么值都没有,这意
味着两种可能:
 一种是其值未知,即目前尚不知道它的取值,如编号为
403的产品的成本,
 另一种是不存在,例如,北京市的学生其所属省这个属性
的取值就不存在。
 对空值进行判断时,采用特殊的方法,不论属于何
种数据类型,一般都采用“is null” 或者“is
not null”来判断。

Hongyan Liu @ Tsinghua University 10


关系
 关系的度或目(degree):属性的个数
 关系的基数(cardinality):元组个数
 总结关系的特点为:each relation has a
unique name
 分量不可分(single-valued)
 行相异(each row is unique, sequence is
insignificant)
 列同质(each attribute has a unique name,
sequence of columns is insignificant)
Hongyan Liu @ Tsinghua University 11
关系模式

 关系:关系的实例:
 一个关系的内容是随时间而变化的,因此准确地说,
关系实际上是关系的实例(instance)的简称,
 关系模式:关系的型
 关系模式是关系的型的描述,它一般包括关系的名
字,属性的名字,属性的域等信息
Product(pCode: char(3), pType: char(50), pName: char(50), cost:
real, price: real)
也可暂时忽略域的信息变为:
Product(pCode, pType, pName, cost, price)

Hongyan Liu @ Tsinghua University 12


关系数据库

 关系数据库是若干互不相同的关系组成的,而关系数
据库模式是由若干个与某应用背景相关的关系模式构
成的。
例如,与某公司销售系统有关的另两个关系模式为:
Order(orderNo, custNo, orderDate, delivDate)
orderNo custNo orderDate delivDate
21 10001 2002-1-5 2002-1-5
22 10002 2002-1-5 2002-1-6

23 10003 2002-2-10 2002-2-20

24 10002 2002-3-4 2002-3-5


return to page 16
Hongyan Liu @ Tsinghua University 13
关系数据库

OrderDetail(orderNo, pCode, qty, discount) return to page 16


orderNo pCode qty discount
21 101 100 0
21 102 60 0.05
21 202 200 0.1
22 301 1000 0.25
22 302 1000 0
23 202 20 0
24 401 800 0.15
24 402 500 0.2
24 403 500 0
24 101 200 0

Hongyan Liu @ Tsinghua University 14


键(key)

 候选键(candidate key) :简称为键(key)


 那些能够唯一标识关系里每一行的属性或属性组,如
果是属性组(复合键,composite key),该属性组的任
一个真子集不具有此特性 :一个取值只对应一行元组
 例如:如下表的候选键各有哪些?

Order(orderNo, custNo, orderDate, delivDate) page 14


OrderDetail(orderNo, pCode, qty, discount) page 15
Product(pCode, pType, pName, cost, price) page 4
Student(sNo, sName, sex, province, city, telNo) page 9

Hongyan Liu @ Tsinghua University 15


 主键(primary key)
 任意一个候选键都可以定义为主键
 每一个表都应该定义一个主键
 定义主键之后,DBMS可以识别行的重复,在其他
关系模式中可以通过主键属性来引用该关系模式
中的元组。
 例如:

Customer(custNo, custName, custTel1, custTel2)


Order(orderNo, custNo, orderDate, delivDate)

Hongyan Liu @ Tsinghua University 16


外键(foreign key)
 是一个关系中的一个属性或属性组,它不是
本关系的候选键,但它的值引用的是其他关
系的键的取值,或是本关系的键的取值。
 例1:
Customer(custNo, custName, custTel)
Order(orderNo, custNo, orderDate, delivDate)
 例2:

Part(partNo, partName, weight, color, itemNo)

Hongyan Liu @ Tsinghua University 17



Customer
custNo custName Address custTel1
10001 BC 北京市海淀区中关村大街25号 (010)62789000
10002 ADE … (0749)853492
10003 CFM … …

orderNo custNo orderDate delivDate


Order 21 10001 2002-1-5 2002-1-5
22 10002 2002-1-15 2002-1-16
23 10003 2002-2-10 2002-2-20
24 10002 2002-3-4 2002-3-5

Hongyan Liu @ Tsinghua University 18


 例2:
Part(partNo, partName, weight, color, itemNo)

partNo partName color weight ItemNo


p1 screw blue 10
p2 bolt green 15 p1
p3 nut red 22 p2
p4 screw red 25 p2

Hongyan Liu @ Tsinghua University 19



pCode pType pName cost price
 超键(super key)是 101 足球类 足球 85 110
包含任一个候选键的 102 足球类 手套 90 122
属性或属性组, 201 羽毛球类 羽球鞋 28 38
202 羽毛球类 球拍 200 250
 例如,pCode和
( pCode, pType)都 orderNo pCode qty discount
可以称作关系模式 21 101 100 0
Product的超键。
21 102 60 0.05
OrderDetail(orderNo, 21 202 200 0.1
pCode, qty, discount) 23 202 20 0
的超键有哪些? 24 401 800 0.15

Hongyan Liu @ Tsinghua University 20


 主属性、非主属性
 包含在任一个候选键中的属性称为主属性
(prime attribute),
 没有包含在任一个候选键中的属性称为非主
属性(non-prime attribute)
 例:Product(pCode, pType, pName, cost, price)
的主属性和非主属性各有哪些?
 假设产品没有重名时,情况又怎样?

Hongyan Liu @ Tsinghua University 21


5.2 关系模型的约束

 约束的类型
 域完整性约束(domain integrity constraint)
 实体完整性约束(entity integrity constraint)
 参照完整性约束(referential integrity constraint)
 其他一般性约束
 约束的作用
 可以检查数据库中数据取值的正确性,最大限度地
符合数据的语义

Hongyan Liu @ Tsinghua University 22


域完整性约束

 一个关系中某列的所有取值必须来自该
属性的域
 例如,产品的编号pCode属性的域为包含3个
数字的字符串,如果某一个元组在该属性上
的取值为“a01”就违反了该属性的域约束。
 DBMS应该提供为每个属性定义域的方法,
并且为定义的域进行合法性检查,具体定义
方法在介绍SQL语句和Access中表的创建时
再详细介绍。
Hongyan Liu @ Tsinghua University 23
实体完整性
 约束主键属性的取值
 要求每个关系都要定义一个主键,而且主键的取值
不能为空,如果主键是复合键(属性组),则该属
性组中的任一个属性的取值都不能为空。
 一般来说,如果一个关系定义了主键,则系统会自
动检查它的每一个取值是否为空,是否重复,如果
为空,或者重复,则系统会给出提示,并且不允许
相应操作的执行。
 例:Order(orderNo, custNo, orderDate, delivDate)
OrderDetail(orderNo, pCode, qty, discount)
哪些属性的取值不能为空?
Hongyan Liu @ Tsinghua University 24
参照完整性
 参照完整性约束又称为外键约束(foreign
key constraint)
 约束的是外键属性的取值:一个表的外键的
取值只能有两种情况:
 或者取所参照的表的主键的某个取值,
 或者为空,如果属性的域定义或其他约束没有限
定相应属性的取值不可以为空。
Order(orderNo, custNo, orderDate, delivDate)

OrderDetail(orderNo, pCode, qty, discount)

Product(pCode, pType, pName, cost, price)

Hongyan Liu @ Tsinghua University 25


参照完整性
orderNo custNo orderDate delivDate Order
21 10001 2002-1-5 2002-1-5

22 10002 2002-1-15 2002-1-16

23 10003 2002-2-10 2002-2-20

24 10002 2002-3-4 2002-3-5


OrderDetail
orderNo pCode qty discount
21 101 100 0
21 102 60 0.05 此时,
21 202 200 0.1 orderNo
22 301 1000 0.25 可以取空
22 302 1000 0 值吗?
23 202 20 0
24 401 800 0.15
24 402 500 0.2
24 403 500 0
24 101 200 0
一般性约束

 还有一些约束不是所有关系模式所共同拥有的,
而是依赖于具体的应用背景而具有的一些约束,
例如:
Product表中属性price的取值应该大于属性cost
的取值等。
这些约束应该能够由数据库系统提供的方法来
定义和实施。

Hongyan Liu @ Tsinghua University 27


5.3 关系数据模型的操纵语言

 关系数据模型的操纵语言分为两类:
 关系代数
 关系演算
 关系代数包括一系列操作符,描述如何一步步
地得到查询结果,
 关系演算用谓词表达关系的操作,根据变量的
不同分为:
 元组关系演算
 域关系演算

Hongyan Liu @ Tsinghua University 28


关系代数(relational algebra)

 关系代数的基本操作包括5个:
 选择(selection)
 投影(projection)
 并(union)
 笛卡儿积(cross-product)
 集合差(set-difference)

Hongyan Liu @ Tsinghua University 29


关系代数

 除此之外,还有一些可以由基本运算推
导出的其他运算,如:
 交(intersection)
 连接(join)
 重命名(renaming)
 除(division)等

Hongyan Liu @ Tsinghua University 30


选择
 σ 选择条件(〈关系〉)
 小括号里的关系,即表名,是该操作的参数。
 “选择条件”是个布尔表达式,
由逻辑运算符“与”(“”)和“或”(“”)
连接算术比较表达式构成的,每个算术比较表达式
的构成为:
属性名 θ 常数或属性名
 属性名(操作符左边)可由属性在关系中的顺序号代替
 θ 代表算术比较运算符,包括、、、、、
 常数为字符串和日期时用双引号
 选择操作的结果仍然是一个关系

Hongyan Liu @ Tsinghua University 31


选择 Product

pCode pType pName cost price


 σ price>100(Product)
101
102
足球类
足球类
足球
手套
85
90
110
122
201 羽毛球类 羽球鞋 28 38
pCode pType pName cost price 202 羽毛球类 球拍 200 250
101 足球类 足球 85 110 301 游泳类 泳镜 85 102
102 足球类 手套 90 122 302 游泳类 泳帽 50 63
401 健美类 拉力器 40.5 54.5
202 羽毛球类 球拍 200 250
402 健美类 十磅哑铃 70 92
301 游泳类 泳镜 85 102 403 健美类 跳绳 20

 σ 2“足球类” 5>100(Product)

= σ ptype“足球类” (σ price>100(Product))

pCode pType pName cost price


202 羽毛球类 球拍 200 250
301 游泳类 泳镜 85 102
选择
 σ pType=“足球类” pType=“游泳类”(Product)
pCode pType pName cost price
101 足球类 足球 85 110
102 足球类 手套 90 122
201 羽毛球类 羽球鞋 28 38
202 羽毛球类 球拍 200 250
301 游泳类 泳镜 85 102
302 游泳类 泳帽 50 63
401 健美类 拉力器 40.5 54.5
402 健美类 十磅哑铃 70 92
403 健美类 跳绳 20
pCode pType pName cost price
101 足球类 足球 85 110
102 足球类 手套 90 122
301 游泳类 泳镜 85 102
302 游泳类 泳帽 50 63
投影
pCode pType pName cost price
101 足球类 足球 85 110
102 足球类 手套 90 122
201 羽毛球类 羽球鞋 28 38

 属性表( <关系> ) 202


301
羽毛球类
游泳类
球拍
泳镜
200
85
250
102
 π pType(Product) 302 游泳类 泳帽 50 63
401 健美类 拉力器 40.5 54.5
402 健美类 十磅哑铃 70 92
pType
403 健美类 跳绳 20
足球类
羽毛球类
pType pName
游泳类 足球类 足球
健美类 足球类 手套
羽毛球类 球拍
 π pType,pName(σ price>100(Product))
游泳类 泳镜

Hongyan Liu @ Tsinghua University 34


 orderdetail
orderNo pCode qty discount
21 101 100 0
21 102 60 0.05
21 202 200 0.1
22 301 1000 0.25
22 302 1000 0
23 202 20 0
24 401 800 0.15
24 402 500 0.2
24 403 500 0
24 101 200 0

Hongyan Liu @ Tsinghua University 35



 <关系1> ∪ <关系2>
关 系 1 和 关 系 2 必 须 符 合 并 兼 容 ( union-
compatible)特性:
(1)有相同的属性个数
(2)对应的属性有相同的域

r s

Hongyan Liu @ Tsinghua University 36



 π pName, price(σ price>100(Product))

∪π pName, price(σ pType=”游泳类”(Product))

pCode pType pName cost price pName price


pName price
101 足球类 足球 85 110 足球 110
足球 110
102 足球类 手套 90 122 手套 122
201 羽毛球类 羽球鞋 28 38 手套 122
球拍 250
202 羽毛球类 球拍 200 250 球拍 250
泳镜 102
301 游泳类 泳镜 85 102 泳镜 102
302 游泳类 泳帽 50 63
pName price 泳帽 63
401 健美类 拉力器 40.5 54.5
泳镜 102
402 健美类 十磅哑铃 70 92
403 健美类 跳绳 20
泳帽 63

Hongyan Liu @ Tsinghua University 37


pCode pType pName cost price

差 101
102
足球类
足球类
足球
手套
85
90
110
122
201 羽毛球类 羽球鞋 28 38
 <关系1> - <关系2> 202 羽毛球类 球拍 200 250
301 游泳类 泳镜 85 102
302 游泳类 泳帽 50 63

r s 401 健美类 拉力器 40.5 54.5


402 健美类 十磅哑铃 70 92
403 健美类 跳绳 20

π pCode(Product)-π pCode(OrderDetail)
得到的什么? orderNo pCode qty discount
21 101 100 0
21 102 60 0.05
21 202 200 0.1
22 301 1000 0.25
22 302 1000 0
23 202 20 0
24 401 800 0.15
24 402 500 0.2
24 403 500 0
24 101 200 0

r-s
 <关系1> ∩ <关系2>
 r∩s=r-(r-s) r s
例:
 π pCode(σ ptype=“羽毛球类”(Product))∩π pCode(OrderDetail)

pCode
101
pCode pCode
102
201 ∩ 202 202
202 301
302
202
401
402
403
笛卡儿积

 <关系1>  <关系2>
 设两个关系分别为r和s,分别含有m1和m2个属性,
以及n1和n2行元组,
 r和s的笛卡儿积结果关系包含的属性依次是r的m1个
属性和s的m2个属性
 r和s的笛卡儿积结果将包含(n1 n2)行元组
 对于r和每一行元组tr和s的每一行元组ts,在结
果中都有一行<tr, ts>存在
 符号< tr, ts >代表两行元组的串接
(concatenation)

Hongyan Liu @ Tsinghua University 40


Order orderDetail
orderNo custNo orderDate delivDate orderNo pCode qty discount
21 10001 2002-1-5 2002-1-5 21 101 100 0
21 102 60 0.05
22 10002 2002-1-15 2002-1-16 21 202 200 0.1
22 301 1000 0.25
23 10003 2002-2-10 2002-2-20 22 302 1000 0
24 10002 2002-3-4 2002-3-5 23 202 20 0
24 401 800 0.15
24 402 500 0.2
pCode pType pName cost price 24 403 500 0
24 101 200 0
101 足球类 足球 85 110
102 足球类 手套 90 122
201 羽毛球类 羽球鞋 28 38
202 羽毛球类 球拍 200 250 Product
301 游泳类 泳镜 85 102
302 游泳类 泳帽 50 63
401 健美类 拉力器 40.5 54.5
402 健美类 十磅哑铃 70 92
403 健美类 跳绳 20
笛卡儿积
σ ptype=“羽毛球类” (Product)σ orderno=21(OrderDetail)

pCode pType pName cost price orderNo pCode qty discount


21 101 100 0
201 羽毛球类 羽球鞋 28 38
21 102 60 0.05
202 羽毛球类 球拍 200 250 21 202 200 0.1

pCode pType pName cost price orderNo pCode qty discount


201 羽毛球类 羽球鞋 28 38 21 101 100 0
201 羽毛球类 羽球鞋 28 38 21 102 60 0.05
201 羽毛球类 羽球鞋 28 38 21 202 200 0.1
202 羽毛球类 球拍 200 250 21 101 100 0
202 羽毛球类 球拍 200 250 21 102 60 0.05
202 羽毛球类 球拍 200 250 21 202 200 0.1

σ (σ
product.pcode=orderdetatil.pcode ptype=“羽毛球类”( Product)
σ orderno=21(OrderDetail))
连接
 <关系1> ⋈c <关系2>
 r ⋈c s =σ c( r s)
 c代表连接条件,是由逻辑运算符“”或“”连接算术
比较表达式构成的,每个算术比较表达式的组成为:
Ai θ Bj
 θ 代表算术比较运算符:、、、、、,Ai和Bj是分
别来自两个关系的属性,或属性和常数组成的算术表
达式。
 OrderDetail⋈orderdetail.pcode=product.pcodeProduct

Hongyan Liu @ Tsinghua University 43


pCode pType pName cost price
orderNo pCode qty discount
21 101 100 0 101 足球类 足球 85 110

21 102 60 0.05 102 足球类 手套 90 122


21 202 200 0.1 201 羽毛球类 羽球鞋 28 38
22 301 1000 0.25 202 羽毛球类 球拍 200 250
22 302 1000 0 301 游泳类 泳镜 85 102
23 202 20 0
302 游泳类 泳帽 50 63
24 401 800 0.15
401 健美类 拉力器 40.5 54.5
24 402 500 0.2
402 健美类 十磅哑铃 70 92
24 101 200 0
403 健美类 跳绳 20

orderdetail. Product.
orderNo
orderNo pCode qty discount
discount pCode pType pName cost price
pCode pCode
21 101 100 0 101 足球类 足球 85 110
21 101 100 0 101 足球类 足球 85 110
21 102 60 0.05 102 足球类 手套 90 122
21 102 60 0.05 102 足球类 手套 90 122
21 202 200 0.1 202 羽毛球类 球拍 200 250
21 202 200 0.1 202 羽毛球类 球拍 200 250
22 301 1000 0.25 301 游泳类 泳镜 85 102
22 301 1000 0.25 301 游泳类 泳镜 85 102
22 302 1000 0 302 游泳类 泳帽 50 63
22 302 1000 0 302 游泳类 泳帽 50 63
23 202 20 0 202 羽毛球类 球拍 200 250
23 202 20 0 202 羽毛球类 球拍 200 250
24 401 800 0.15 401 健美类 拉力器 40.5 54.5
24 401 800 0.15 401 健美类 拉力器 40.5 54.5
24 402 500 0.2 402 健美类 十磅哑铃 70 92
24 402 500 0.2 402 健美类 十磅哑铃 70 92
连接
 查找足球类产品的销售情况,包括产品编号、名称、
订单编号,产品原价,折扣,数量
π pCode,pName,orderno,price,discount,qty(σ pType=”足球类” (Product)
⋈ product.pcode=orderdetail.pcode OrderDetail)
pCode pType pName cost price orderNo pCode qty discount
21 101 100 0
101 足球类 足球 85 110
21 102 60 0.05
102 足球类 手套 90 122 21 202 200 0.1
22 301 1000 0.25
22 302 1000 0
pCode pName orderNo price discount qty 23 202 20 0
24 401 800 0.15
101 足球 21 110 0 100
24 402 500 0.2
102 手套 21 122 0.05 60 24 403 500 0
101 足球 24 110 0 200 24 101 200 0

45
连接
 π pCode,pName (Product⋈(price*(1-discount)<cost) 
(product.pcode=orderdetail.pcode)OrderDetail)

pCode pType pName cost price


orderNo pCode qty discount
101 足球类 足球 85 110 21 101 100 0
102 足球类 手套 90 122 21 102 60 0.05
201 羽毛球类 羽球鞋 28 38 21 202 200 0.1

202 羽毛球类 球拍 200 250 22 301 1000 0.25


22 302 1000 0
301 游泳类 泳镜 85 102
23 202 20 0
302 游泳类 泳帽 50 63 24 401 800 0.15
401 健美类 拉力器 40.5 54.5 24 402 500 0.2
402 健美类 十磅哑铃 70 92 24 403 500 0
403 健美类 跳绳 20 24 101 200 0

Hongyan Liu @ Tsinghua University 46


pCode pType pName cost price
orderNo pCode qty discount
21 101 100 0 101 足球类 足球 85 110

21 102 60 0.05 102 足球类 手套 90 122


21 202 200 0.1 201 羽毛球类 羽球鞋 28 38
22 301 1000 0.25 202 羽毛球类 球拍 200 250
22 302 1000 0 301 游泳类 泳镜 85 102
23 202 20 0
302 游泳类 泳帽 50 63
24 401 800 0.15
401 健美类 拉力器 40.5 54.5
24 402 500 0.2
402 健美类 十磅哑铃 70 92
24 101 200 0
403 健美类 跳绳 20

orderdetail. Product.
orderNo
orderNo pCode qty discount
discount pCode pType pName cost price
pCode pCode
21 101 100 0 101 足球类 足球 85 110
21 101 100 0 101 足球类 足球 85 110
21 102 60 0.05 102 足球类 手套 90 122
21 102 60 0.05 102 足球类 手套 90 122
21 202 200 0.1 202 羽毛球类 球拍 200 250
21 202 200 0.1 202 羽毛球类 球拍 200 250
22 301 1000 0.25 301 游泳类 泳镜 85 102
22 301 1000 0.25 301 游泳类 泳镜 85 102
22 302 1000 0 302 游泳类 泳帽 50 63
22 302 1000 0 302 游泳类 泳帽 50 63
23 202 20 0 202 羽毛球类 球拍 200 250
23 202 20 0 202 羽毛球类 球拍 200 250
24 401 800 0.15 401 健美类 拉力器 40.5 54.5
24 401 800 0.15 401 健美类 拉力器 40.5 54.5
24 402 500 0.2 402 健美类 十磅哑铃 70 92
24 402 500 0.2 402 健美类 十磅哑铃 70 92
自然连接
 连接条件为属性名相同的属性的取值相等,
结果关系将属性名相同的列只保留一个的
连接称为自然连接(natural join):
 r ⋈ s

Hongyan Liu @ Tsinghua University 48


pCode pType pName cost price
orderNo pCode qty discount
21 101 100 0 101 足球类 足球 85 110

21 102 60 0.05 102 足球类 手套 90 122


21 202 200 0.1 201 羽毛球类 羽球鞋 28 38
22 301 1000 0.25 202 羽毛球类 球拍 200 250
22 302 1000 0 301 游泳类 泳镜 85 102
23 202 20 0
302 游泳类 泳帽 50 63
24 401 800 0.15
401 健美类 拉力器 40.5 54.5
24 402 500 0.2
402 健美类 十磅哑铃 70 92
24 101 200 0
403 健美类 跳绳 20

orderNo
orderNo pCode
pCode qtyqty discount
discount
pCode
pType
pType pName
pName cost
cost price
price
21
21 101
101 100100 0 0 101 足球类
足球类 足球
足球 8585 110
110
21
21 102
102 60 60 0.05 0.05 102 足球类
足球类 手套
手套 9090 122
122
21
21 202
202 200200 0.1 0.1 202 羽毛球类
羽毛球类球拍
球拍 200
200 250
250
22
22 301 1000 0.25 0.25 301 游泳类
301 1000 游泳类 泳镜
泳镜 8585 102
102
22
22 302
302 1000
1000 0 0 302 游泳类
游泳类 泳帽
泳帽 5050 63
63
23
23 202
202 20 20 0 0 202 羽毛球类
羽毛球类球拍
球拍 200
200 250
250
24
24 401
401 800800 0.15 0.15 401 健美类
健美类 拉力器
拉力器 40.5
40.5 54.5
54.5
24
24 402
402 500500 0.2 0.2 402 健美类
健美类 十磅哑铃
十磅哑铃 7070 92
92
24
24 101
101 200200 0 0 101 足球类
足球类 足球
足球 8585 110
110 49
自然连接
例: π pCode,pName,price(σ pType=”足球类”(Product) )
⋈ OrderDetail ⋈ π orderNo, orderDate(Order)

pCode pName price orderNo qty discount orderDate


101 足球 110 21 100 0 2002-1-5

102 手套 122 21 60 0.05 2002-1-5

101 足球 110 24 200 0 2002-3-4

Hongyan Liu @ Tsinghua University 50


连接

 外连接:
 左外连接(left outer join):
r *⋈ c s
 右外连接(right outer join):

r ⋈* c s
 全外连接(full outer join):

r *⋈* c s

Hongyan Liu @ Tsinghua University 51


例:(σ pType=”羽毛球类”(Product) ) *⋈ OrderDetail
orderNo pCode qty discount
21 101 100 0
21 102 60 0.05
21 202 200 0.1
pCode pType pName cost price 22 301 1000 0.25
201 羽毛球类 羽球鞋 28 38 22 302 1000 0
202 羽毛球类 球拍 200 250 23 202 20 0
24 401 800 0.15
24 402 500 0.2
24 403 500 0
24 101 200 0

pCode pType pName cost price orderNo qty discount


201 羽毛球类 羽球鞋 28 38
202 羽毛球类 球拍 200 250 21 200 0.1
202 羽毛球类 球拍 200 250 23 20 0
Part(pno, pname, weight, subpno)
查找每个零件的编号以及构成它的子零件的名称

pno pname weight subpno pno pname weight subpno


1 p1 10 1 p1 10
2 p2 20 1 2 p2 20 1
3 p3 30 2 3 p3 30 2

π pno,pno,pname( part ⋈subpno=pno(Part) )

pno pname weight subpno pno pname weight subpno


1 p1 10 1 p1 10
2 p2 20 1 2 p2 20 1
3 p3 30 2 3 p3 30 2

Hongyan Liu @ Tsinghua University 53


重命名,自连接
𝞺 s(a1,a2,…,an)(R)

查找每个零件的编号、名称以及构成它的子零件的编号和名称
π part.pno,part.pname,part.subpno,sp.pname(part⋈part.subpno=sp.pno ρ sp(Part))

pno pname weight subpno pno pname weight subpno


1 p1 10 1 p1 10
2 p2 20 1 2 p2 20 1
3 p3 30 2 3 p3 30 2

pno pname subpno pname


2 p2 1 p1
3 p3 2 p2
Hongyan Liu @ Tsinghua University 54
重命名
查找每个零件的编号、名称以及构成它的子零件的名称和编号

π part.pno,part.pname,part.subpno.pno,sp.pname
(part *⋈part.subpno=sp.pno ρ sp(Part) )
pno pname weight subpno pno pname weight subpno
1 p1 10 1 p1 10
2 p2 20 1 2 p2 20 1
3 p3 30 2 3 p3 30 2

pno pname subpno pname


2 p2 1 p1
3 p3 1 p2
1 p1
55

<关系1>  <关系2>
 r  s =π x (r)- π x((π x (r)  s) - r)

x代表r中不包含于s中的属性集,即x=attr.(r)-
attr.(s),
例:
π (OrderDetail) 
orderNo, pCode
π pCode(σ pType=”足球类” (Product))

Hongyan Liu @ Tsinghua University 56


 πorderNo (OrderDetail ) –
πorderNo ((πorderNo (OrderDetail)  πpCode(σpType=”足球类”
(Product))) – πorderNo,pcode (OrderDetail))
orderNo pCode orderNo pCode orderNo pCode
21 101 21 101 22 101
21 102 22 102
21 102
21 202 23 101
22 101 22 301
23 102 orderNo
22 102 22 302
24 102 21
23 101 23 202
24 401 orderNo
23 102
24 402
24 101 22
24 403
24 102 23
24 101
24 57
orderNo pCode
除 21 101
21 102

 π orderNo, pCode (OrderDetail)


21 202
22 301
22 302
 π pCode(σ pType=”足球类” (Product)) 23 202
24 401
pCode 24 402
101 24 403
102 24 101

 π (OrderDetail) 
orderNo, pCode orderNo
π pCode(σ pType=”足球类” (Product)) 21
orderNo qty pCode

除 21 100 101
21 60 102
21 200 202
 π orderNo, pCode,qty (OrderDetail) 22 1000 301
22 2000 302
23 20 202

 π pCode(σ pType=”足球类”(Product))
24
24
800
500
401
402
24 500 403
pCode 24 200 101

101
102

 π orderNo,pCode,qty(OrderDetail) 
π pCode(σ pType=”足球类” (Product))

order pCode pName
No
21 101 足球
21 102 手套
 π orderNo, pCode,pName(OrderDetail) 21 202 球拍
22 301 泳镜
22 302 泳帽
 π pCode,pName(σ pType=”足球类”(Product)) 23 202 球拍
24 401 拉力器
24 402 十磅哑铃
pCode pName
24 403 跳绳
101 足球 24 101 足球
102 手套

 π orderNo,pCode,pName(OrderDetail)
orderNo
π pCode,pName(σ pType=”足球类” (Product))
21
个人作业

 P76-77
 5.5: (1)(2)(3)
 5.6(仍以5.5中表为基础)关系代数

Hongyan Liu @ Tsinghua University 61


orderNo custNo orderDate delivDate
review 21
22
10001
10002
2002-1-5
2002-1-15
2002-1-5
2002-1-16
23 10003 2002-2-10 2002-2-20
 选择、投影、并、差 24 10002 2002-3-4 2002-3-5

 笛卡儿积,交 orderNo pCode qty discount


21 101 100 0
 连接 21 102 60 0.05
21 202 200 0.1
 内、外连接,自然连接 22 301 1000 0.25
22 302 1000 0
 重命名,自连接 23 202 20 0
24 401 800 0.15
 除 24 402 500 0.2
24 101 200 0

 包含101号产品的订单号
 不包含101号产品的订单号
 购买过101号产品的客户号
 没有购买过101号产品的客户号
orderNo pCode qty discount

review
orderNo
21
custNo
10001
orderDate
2002-1-5
delivDate
2002-1-5
21
21
101
102
100
60
0
0.05
22 10002 2002-1-15 2002-1-16 21 202 200 0.1
22 301 1000 0.25
23 10003 2002-2-10 2002-2-20 22 302 1000 0
24 10002 2002-3-4 2002-3-5 23 202 20 0
24 401 800 0.15
24 402 500 0.2
24 101 200 0

 包含101号产品的订单号
 πorderNo(σpCode=”101”(orderDetail))

 不包含101号产品的订单号
 πorderNo(σpCode≠”101”(orderDetail))
 πorderNo (Order) -πorderNo(σpCode=”101”(orderDetail))
orderNo pCode qty discount

review
orderNo
21
custNo
10001
orderDate
2002-1-5
delivDate
2002-1-5
21
21
101
102
100
60
0
0.05
22 10002 2002-1-15 2002-1-16 21 202 200 0.1
22 301 1000 0.25
23 10003 2002-2-10 2002-2-20 22 302 1000 0
24 10002 2002-3-4 2002-3-5 23 202 20 0
24 401 800 0.15
24 402 500 0.2
 购买过101号产品的客户号 24 101 200 0

 πcustNo(σpCode=”101”(orderDetail)⋈ Order)

 没有购买过101号产品的客户号
 πcustNo(σpCode≠”101”(orderDetail)⋈ Order)
 πcustNo(πorderNo (Order) -πorderNo(σpCode=”101”(orderDetail))⋈
Order)
 πcustNo(Order) –πcustNo(σpCode=”101”(orderDetail)⋈ Order)
笛卡儿积
 πorderNo (OrderDetail)  πpCode(σpType=”足球类” (Product))
orderNo orderNo pCode
21 21 101
22 21 102
23 22 101
24 22 102
× 23 101
pCode 23 102
24 101
101
24 102
102

Hongyan Liu @ Tsinghua University 65


 (πorderNo (OrderDetail)  πpCode(σpType=”足球类”
(Product))) –πorderNo,pcode (OrderDetail)

orderNo pCode
orderNo pCode 21 101

21 101 21 102
21 202 orderNo pCode
21 102
22 301 22 101
22 101
22 302
22 102 22 102
23 202
23 101 23 101
24 401
23 102 23 102
24 402
24 101 24 102
24 403
24 102 24 101
66
 πorderNo (OrderDetail)- πorderNo(πorderNo (OrderDetail) 
πpCode(σpType=”足球类” (Product)) –πorderNo,pcode
(OrderDetail))

 π orderNo,pCode(OrderDetail)π pCode(σ pType=”足球类”(Product))

 r  s =π x (r)- π x((π x (r)  s) - r)

orderNo pCode
22 101 orderNo
22 102 22
23 101 orderNo
23 102
23
24 21
24 102
67
思考题:

π pCode(Product) –
π product.pCode( Product ⋈ product.price<p.price ρ p(Product) )

Hongyan Liu @ Tsinghua University 68


Product Product ⋈ product.price<p.price ρ p(Product)
pCode … price
101 110 Produc Produc p.pcode … p.price
102 122 t.pcode t.price
π product.pCode(..)
201 38 101 … 110 102 … 122
202 250 .. pCode
301 102
302 63 102 … 122 202 .. 250 101
401 54.5 201 … 38 101 … 110 102
402 92 … 201
403 20
301 … 102 101 … 110 301
P … 302
pCode … price 302 … 63 101 … 110
401
101 110 402
102 122 …
403
201 38 401 … 54.5 101 … 110
202 250 …
301 102
302 63 402 … 92 101 … 110
401 54.5 …
402 92 403 … 20 101 … 110
403 20

重命名,自连接
查找每个零件的编号、名称以及构成它的子零件的编号和名称
π part.pno,part.pname,part.subpno,sp.pname(part⋈part.subpno=sp.pno ρ sp(Part))

pno pname weight subpno pno pname weight subpno


1 p1 10 1 p1 10
2 p2 20 1 2 p2 20 1
3 p3 30 2 3 p3 30 2

pno pname subpno pname


2 p2 1 p1
3 p3 2 p2

Hongyan Liu @ Tsinghua University 70


Part(pno, pname, weight, subpno)
查找每个零件的编号以及构成它的子零件的编号和名称

pno pname weight subpno pno pname weight subpno


1 p1 10 1 p1 10
2 p2 20 1 2 p2 20 1
3 p3 30 2 3 p3 30 2

π pno,subpno(part)⋈π subpno,pname(π subpno( part)


⋈subpno=pnoπ pno,pname (Part))

Hongyan Liu @ Tsinghua University 71


Additional Relational Operations
 Generalized projection

 π pCode,price-cost (σ pType=”足球类” (Product))

 Aggregate functions and grouping

 pCodeℑsum qty (OrderDetail)


Additional Relational Operations
 Aggregate functions and grouping

 pcode,totalQty(pCode ℑsum qty (OrderDetail))

ORDERNO PCODE QTY DISCOUNT pcode totalQty


21 101 100 0 101 100
21 102 60 0.05
102 510
24 102 50 0
23 102 400 0 202 220
21 202 200 0.1
23 202 20 0

You might also like