Upload
prescott-west
View
163
Download
6
Embed Size (px)
DESCRIPTION
第 5 章 关系数据模型. 刘红岩 清华大学 管理科学与工程系 [email protected]. 简介. 关系模型是目前商品化数据库产品的主流数据模型: IBM DB2 、 Oracle 、 Sybase 、 Microsoft SQL Server 和 Microsoft Access 、 … 关系模型有着坚实的理论基础(集合论,数理逻辑),可以保证关系模型的合理设计和有效实现。 关系模型简洁易用,关系数据库是由一系列的关系组成,而关系是以人们最熟悉的表格的形式组织和展现给用户的。 表格中的数据可以使用简单易懂的语言进行复杂地查询。. 主要内容. - PowerPoint PPT Presentation
Citation preview
第 5 章 关系数据模型刘红岩清华大学 管理科学与工程系[email protected]
Hongyan Liu @ Tsinghua University
2
简介关系模型是目前商品化数据库产品的主流数据模型:
IBM DB2 、 Oracle 、 Sybase 、 Microsoft SQL Server 和Microsoft Access …、
关系模型有着坚实的理论基础(集合论,数理逻辑),可以保证关系模型的合理设计和有效实现。 关系模型简洁易用,关系数据库是由一系列的关系组成,而关系是以人们最熟悉的表格的形式组织和展现给用户的。 表格中的数据可以使用简单易懂的语言进行复杂地查询。
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 16pCode pType pName cost price
101 足球类 足球 85 110102 足球类 手套 90 122201 羽毛球类 羽球鞋 28 38202 羽毛球类 球拍 200 250301 游泳类 泳镜 85 102302 游泳类 泳帽 50 63401 健美类 拉力器 40.5 54.5402 健美类 十磅哑铃 70 92403 健美类 跳绳 20
Hongyan Liu @ Tsinghua University
5
关系 列( column ):属性( attribute ),字段
( field ) 第一行各列的值,其余各行对应列的标题 pCode pType pName cost price
101 足球类 足球 85 110102 足球类 手套 90 122201 羽毛球类 羽球鞋 28 38202 羽毛球类 球拍 200 250301 游泳类 泳镜 85 102302 游泳类 泳帽 50 63401 健美类 拉力器 40.5 54.5402 健美类 十磅哑铃 70 92403 健美类 跳绳 20
Hongyan Liu @ Tsinghua University
6
关系 行( row ):元组( tuple ),记录
( record ) 除属性所在行之外的每一行pCode pType pName cost price
101 足球类 足球 85 110102 足球类 手套 90 122201 羽毛球类 羽球鞋 28 38202 羽毛球类 球拍 200 250301 游泳类 泳镜 85 102302 游泳类 泳帽 50 63401 健美类 拉力器 40.5 54.5402 健美类 十磅哑铃 70 92403 健美类 跳绳 20
Hongyan Liu @ Tsinghua University
7
关系 属性的域( domain )
每一个属性在各行中的取值类型都是相同的,都有一个取值范围 pCode pType pName cost price
101 足球类 足球 85 110102 足球类 手套 90 122201 羽毛球类 羽球鞋 28 38202 羽毛球类 球拍 200 250301 游泳类 泳镜 85 102302 游泳类 泳帽 50 63401 健美类 拉力器 40.5 54.5402 健美类 十磅哑铃 70 92403 健美类 跳绳 20
Hongyan Liu @ Tsinghua University
8
关系 分量( item ) : 每个属性对应每一行的值
原子性,即分量不可以再细分
关系模型的基本要求 : 分量不可分, 1NF
sNo sName sex address telNo
945599 张珊 f 山东省烟台市 62783456,82345679
945598 李思 m 北京市 62445678
Hongyan Liu @ Tsinghua University
9
关系 解决方法:横向和纵向分解 return to page 16
sNo sName sex province city telNo
945599 张珊 f 山东省 烟台市 62783456
945599 张珊 f 山东省 烟台市 82345679
945598 李思 m 北京市 62445678
sNo sName sex province city
945599 张珊 f 山东省 烟台市945598 李思 m 北京市
telNo
62783456
82345679
62445678
sNo
945599
945599
945598
Hongyan Liu @ Tsinghua University
11
关系 分量
分量可以是空值( null ),即什么值都没有,这意味着两种可能: 一种是其值未知,即目前尚不知道它的取值,如编号为 4
03 的产品的成本, 另一种是不存在,例如,北京市的学生其所属省这个属性的取值就不存在。
对空值进行判断时,采用特殊的方法,不论属于何种数据类型,一般都采用“ is null” 或者“ is not null” 来判断。
Hongyan Liu @ Tsinghua University
12
关系 关系的度或目( 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
13
关系模式 关系:关系的实例:
一个关系的内容是随时间而变化的,因此准确地说,关系实际上是关系的实例 (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
14
关系数据库 关系数据库是若干互不相同的关系组成的,而关系数据库模式是由若干个与某应用背景相关的关系模式构成的。
例如,与某公司销售系统有关的另两个关系模式为:Order(orderNo, custNo, orderDate, delivDate)
orderNo custNo orderDate delivDate21 10001 2002-1-5 2002-1-522 10002 2002-1-5 2002-1-6
23 10003 2002-2-10 2002-2-20
24 10002 2002-3-4 2002-3-5return to page 16
Hongyan Liu @ Tsinghua University
15
关系数据库OrderDetail(orderNo, pCode, qty, discount)
return to page 16orderNo pCode qty discount
21 101 100 021 102 60 0.0521 202 200 0.122 301 1000 0.2522 302 1000 023 202 20 024 401 800 0.1524 402 500 0.224 403 500 024 101 200 0
Hongyan Liu @ Tsinghua University
16
键( 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
17
键 主键( primary key )
任意一个候选键都可以定义为主键 每一个表都应该定义一个主键
定义主键之后, DBMS 可以识别行的重复,在其他关系模式中可以通过主键属性来引用该关系模式中的元组。 例如: Customer(custNo, custName, custTel1, custTel2)
Order(orderNo, custNo, orderDate, delivDate)
Hongyan Liu @ Tsinghua University
18
键外键( foreign key )
是一个关系中的一个属性或属性组,它不是本关系的候选键,但它的值引用的是本关系的键的取值,或是其他关系的键的取值。 例 1 : Customer(custNo, custName, custTel)
Order(orderNo, custNo, orderDate, delivDate) 例 2 :
Part(partNo, partName, weight, color, itemNo)
Hongyan Liu @ Tsinghua University
19
键Customer
orderNo custNo orderDate delivDate21 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
Order
custNo custName Address custTel110001 BC 北京市海淀区中关村大街 25号 (010)62789000
10002 ADE … (0749)85349210003 CFM … …
Hongyan Liu @ Tsinghua University
20
键 例 2 :
Part(partNo, partName, weight, color, itemNo)
partNo partName color weight ItemNop1 screw blue 10p2 bolt green 15 P1p3 nut red 22 p2p4 screw red 25 p3
Hongyan Liu @ Tsinghua University
21
键 超键( super key )是包含任一个候选键的属性或属性组,
例如, pCode 和( pCode, pType )都可以称作关系模式Product 的超键。 orderN
opCode qty discount
21 101 100 021 102 60 0.0521 202 200 0.123 202 20 024 401 800 0.15
pCode pType pName cost price101 足球类 足球 85 110102 足球类 手套 90 122201 羽毛球类 羽球鞋 28 38202 羽毛球类 球拍 200 250
OrderDetail(orderNo, pCode, qty, discount)的超键有哪些?
Hongyan Liu @ Tsinghua University
22
键 主属性、非主属性
包含在任一个候选键中的属性称为主属性( prime attribute ),
没有包含在任一个候选键中的属性称为非主属性( non-prime attribute ) 例: Product(pCode, pType, pName, cost,
price) 的主属性和非主属性各有哪些? 假设产品没有重名时,情况又怎样?
Hongyan Liu @ Tsinghua University
23
5.2 关系模型的约束 约束的类型
域完整性约束( domain integrity constraint ) 实体完整性约束( entity integrity constraint ) 参照完整性约束( referential integrity constraint ) 其他一般性约束
约束的作用 可以检查数据库中数据取值的正确性,最大限度地符合数据的语义
Hongyan Liu @ Tsinghua University
24
域完整性约束 一个关系中某列的所有取值必须来自该属性的域
例如,产品的编号 pCode 属性的域为包含 3 个数字的字符串,如果某一个元组在该属性上的取值为“ a01” 就违反了该属性的域约束。 DBMS 应该提供为每个属性定义域的方法,并且为定义的域进行合法性检查,具体定义方法在介绍 SQL 语句和 Access 中表的创建时再详细介绍。
Hongyan Liu @ Tsinghua University
25
实体完整性 约束主键属性的取值
要求每个关系都要定义一个主键,而且主键的取值不能为空,如果主键是复合键(属性组),则该属性组中的任一个属性的取值都不能为空。 一般来说,如果一个关系定义了主键,则系统会自动检查它的每一个取值是否为空,是否重复,如果为空,或者重复,则系统会给出提示,并且不允许相应操作的执行。 例: Order(orderNo, custNo, orderDate, delivDate) OrderDetail(orderNo, pCode, qty, discount) 哪些属性的取值不能为空?
Hongyan Liu @ Tsinghua University
26
参照完整性参照完整性约束又称为外键约束( foreign
key constraint ) 约束的是外键属性的取值:一个表的外键的取值只能有两种情况:
或者取所参照的表的主键的某个取值, 或者为空,如果属性的域定义或其他约束没有限定相应属性的取值不可以为空。
Order(orderNo, custNo, orderDate, delivDate)
OrderDetail(orderNo, pCode, qty, discount)
Product(pCode, pType, pName, cost, price)
参照完整性OrderorderNo custNo orderDate
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
delivDate
orderNo pCode qty discount21 101 100 021 102 60 0.0521 202 200 0.122 301 1000 0.2522 302 1000 023 202 20 024 401 800 0.1524 402 500 0.224 403 500 024 101 200 0
OrderDetail
此时, orderNo 可以取空值吗?
Hongyan Liu @ Tsinghua University
28
一般性约束 还有一些约束不是所有关系模式所共同拥有的,而是依赖于具体的应用背景而具有的一些约束,例如 :
Product 表中属性 price 的取值应该大于属性cost 的取值等。
这些约束应该能够由数据库系统提供的方法来定义和实施。
Hongyan Liu @ Tsinghua University
29
5.3 关系数据模型的操纵语言 关系数据模型的操纵语言分为两类:
关系代数 关系演算
关系代数包括一系列操作符,描述如何一步步地得到查询结果, 关系演算用谓词表达关系的操作,根据变量的不同分为 :
元组关系演算 域关系演算
Hongyan Liu @ Tsinghua University
30
关系代数( relational algebra)
关系代数的基本操作包括 5个: 选择( selection ) 投影( projection ) 并( union ) 笛卡儿积( cross-product ) 集合差( set-difference )
Hongyan Liu @ Tsinghua University
31
关系代数 除此之外,还有一些可以由基本运算推导出的其他运算,如:
交( intersection ) 连接( join ) 重命名( renaming) 除( division )等。
Hongyan Liu @ Tsinghua University
32
选择 σ 选择条件(〈关系〉)
小括号里的关系 ,即表名,是该操作的参数。 “ 选择条件”是个布尔表达式,
由逻辑运算符“与”(“”)和“或”(“”)连接算术比较表达式构成的,每个算术比较表达式的构成为:属性名 θ 常数或属性名
属性名(操作符左边)可由属性在关系中的顺序号代替 θ代表算术比较运算符,包括、、、、、。
选择操作的结果仍然是一个关系
选择 σprice>100 ( Product )
pCode pType pName cost price101 足球类 足球 85 110102 足球类 手套 90 122201 羽毛球类 羽球鞋 28 38202 羽毛球类 球拍 200 250301 游泳类 泳镜 85 102302 游泳类 泳帽 50 63401 健美类 拉力器 40.5 54.5402 健美类 十磅哑铃 70 92403 健美类 跳绳 20
pCode pType pName cost price
101 足球类 足球 85 110
102 足球类 手套 90 122
202 羽毛球类 球拍 200 250
301 游泳类 泳镜 85 102
pCode pType pName cost price
202 羽毛球类 球拍 200 250
301 游泳类 泳镜 85 102
σ2“足球类” 5>100 ( Product )
= σ2“足球类” ( σ 5>100 ( Product ))
选择 σpType “= 足球类” pType “= 游泳类”( Product )
pCode pType pName cost price101 足球类 足球 85 110102 足球类 手套 90 122201 羽毛球类 羽球鞋 28 38202 羽毛球类 球拍 200 250301 游泳类 泳镜 85 102302 游泳类 泳帽 50 63401 健美类 拉力器 40.5 54.5402 健美类 十磅哑铃 70 92403 健美类 跳绳 20
pCode
pType pName cost price101 足球类 足球 85 110102 足球类 手套 90 122301 游泳类 泳镜 85 102302 游泳类 泳帽 50 63
Hongyan Liu @ Tsinghua University
35
投影 π 属性表 ( <关系 > )
pType足球类羽毛球类游泳类健美类
pType pName足球类 足球足球类 手套羽毛球类 球拍游泳类 泳镜
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
πpType,pName(σprice>100(Product))
πpType ( Product)
Hongyan Liu @ Tsinghua University
36
并 <关系 1> ∪ <关系 2>
关系 1 和关系 2 必须符合并兼容( union-compatible )特性:
( 1 )有相同的属性个数( 2)对应的属性有相同的域
r s
Hongyan Liu @ Tsinghua University
37
并πpName, price ( σprice>100 ( Product ))
∪πpName, price ( σ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
pName price足球 110手套 122
球拍 250泳镜 102
pName price
泳镜 102泳帽 63
pName price足球 110手套 122球拍 250泳镜 102泳帽 63
差 < 关系 1> - < 关系 2>
πpCode ( Product ) -πpCode ( OrderDetail ) 得到的什么?
sr
orderNo pCode qty discount21 101 100 021 102 60 0.0521 202 200 0.122 301 1000 0.2522 302 1000 023 202 20 024 401 800 0.1524 402 500 0.224 403 500 024 101 200 0
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
交 <关系 1> ∩ <关系 2> r∩s=r-(r-s)
pCode101202301
pCode101202301302202
401402
pCode101102202301
∩
r s
r-s
例: πpCode( σprice>100( Product ∩)) πpCode ( σqty>=100
(OrderDetail) )
Hongyan Liu @ Tsinghua University
40
笛卡儿积 <关系 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 )。
Order orderDetail orderNo pCode qty discount
21 101 100 021 102 60 0.0521 202 200 0.122 301 1000 0.2522 302 1000 023 202 20 024 401 800 0.1524 402 500 0.224 403 500 024 101 200 0
orderNo custNo orderDate delivDate21 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
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, pName(σprice>120(Product))(σorderno=21(OrderDetail))
Product. pCode
pName orderNo
OrderDetail. pCode
qty discount102 手套 21 101 100 0
102 手套 21 102 60 0.05102 手套 23 202 200 0.1202 球拍 21 101 100 0202 球拍 21 102 60 0.05202 球拍 23 202 200 0.1
orderNo pCode
qty discount
21 101 100 021 102 60 0.0521 202 200 0.1
pCode pName102 手套202 球拍
σ product.pcode=orderdetatil.pcode (πpCode,pName(σprice>120(Product))(σ
orderno=21(OrderDetail)))
Hongyan Liu @ Tsinghua University
43
笛卡儿积 πorderNo (OrderDetail) πpCode(σpType=”足球类” (Product))
orderNo pCode21 10121 10222 10122 10223 10123 10224 10124 102
orderNo21222324
pCode101102
×
Hongyan Liu @ Tsinghua University
44
连接 <关系 1> c < 关系 2> r c s =σc( r s)
c “代表连接条件,是由逻辑运算符 ” “或 ”连接算术比较表达式构成的,每个算术比较表达式的组成为:AiθBj
θ代表算术比较运算符:、、、、、, Ai和Bj是分别来自两个关系的属性,或属性和常数组成的算术表达式。
Productproduct.pcode=orderdetail.pcodeOrderDetail
orderDetail
orderNo pCode qty discount21 101 100 021 102 60 0.0521 202 200 0.1
22 301 1000 0.2522 302 1000 023 202 20 024 401 800 0.1524 402 500 0.224 403 500 024 101 200 0
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
Hongyan Liu @ Tsinghua University
46
连接 查找足球类产品的销售情况,包括产品名称、订单编号,产品原价,折扣πpName,orderno,price,discount(σpType=” 足球类” (Product)
C OrderDetail)) C: product.pcode=orderdetail.pcode πpCode,pName (Product(price*(1-discount)<cost)
(product.pcode=orderdetail.pcode)OrderDetail) 连接条件为属性名相同的属性的取值相等,结果关系将属性名相同的列只保留一个的连接称为自然连接
( natural join ) r s
Hongyan Liu @ Tsinghua University
47
连接例: πpCode,pName(σpType=” 足球类” (Product) )
OrderDetailπorderNo, orderDate(Order)
pCode pName orderNo orderDate qty discount
101 足球 21 2002-1-5 100 0
102 手套 21 2002-1-5 60 0.05
101 足球 24 2002-3-4 200 0
Hongyan Liu @ Tsinghua University
48
连接 外连接:
左外连接 (left outer join) :r * c s
右外连接( right outer join ):r * c s
全外连接( full outer join ):r ** c s
例: (σpType=”羽毛球类” (Product) ) * OrderDetail
pCode pType pName cost price orderNo
qty discount
201 羽毛球类 羽球鞋 28 38202 羽毛球类 球拍 200 250 21 200 0.1202 羽毛球类 球拍 200 250 23 20 0
pCode pType pName cost price201 羽毛球类 羽球鞋 28 38202 羽毛球类 球拍 200 250
orderNo pCode qty discount21 101 100 021 102 60 0.0521 202 200 0.122 301 1000 0.2522 302 1000 023 202 20 024 401 800 0.1524 402 500 0.224 403 500 024 101 200 0
Hongyan Liu @ Tsinghua University
50
重命名 ρs(A1,A2, …, An)( r )
r 重命名为 s ,并将 r 的 n 个属性重新命名为对应的( A1 , A2 …, , An ),如果属性不需要改名,则( A1 , A2 …, , An )可省。 例: Part(pno, pname, weight, subpno)
查找每个零件的编号、名称、重量以及构成它的子零件的名称和重量pno pname weight subpno1 p1 102 p2 20 13 p3 30 2
pno pname weight subpno1 p1 102 p2 20 13 p3 30 2
Hongyan Liu @ Tsinghua University
51
重命名查找每个零件的编号、名称、重量以及构成它的子零件的名称和重量
π part.pno, part.pname,part.weight,sp.pname,sp.weight
( part * part.subpno=sp.pno ρsp(Part) )
pno pname weight pname weight
2 p2 20 p1 10
3 p3 30 p2 20
pno pname weight subpno1 p1 102 p2 20 13 p3 30 2
pno pname weight subpno1 p1 102 p2 20 13 p3 30 2
Hongyan Liu @ Tsinghua University
52
除<关系 1> <关系 2>
r s =πx (r)- πx((πx (r) s) - r) x 代表 r中不包含于 s中的属性集,即 x=attr.(r)-
attr.(s) ,例如:查找购买了所有足球类产品的订单号码:πorderNo, pCode (OrderDetail) πpCode(σpType=”足球类”
(Product))
除 πorderNo, pCode (OrderDetail)
π pCode(σpType=”足球类” (Product))
π orderNo, pCode (OrderDetail) π pCode(σpType=”足球类” (Product))
orderNo pCode21 10121 10221 20222 30122 30223 20224 40124 40224 40324 101
pCode101102
orderNo21