第 3章 关系数据库
?关系数据库系统概述
?关系数据模型
?关系模型的完整性约束
?关系代数
?关系数据库系统的三层模式结构
关系数据库系统概述
?关系数据库的发展
– CODASYL于 1962年发表的“信息代数”一文
– E.F.Codd从 1970年起发表了一系列的论文
– 20世纪 70年代末的实验系统 System R和 Ingres
– 从 20世纪 80年代逐步走向成熟
?关系数据模型概述
– 关系数据结构
– 关系操作集合
– 关系完整性约束
关系数据结构
关系数据结构非常简单,在关系数据模型
中,现实世界中的实体及实体与实体之间的联
系均用关系来表示。从逻辑或用户的观点来看,
关系就是二维表。
关系操作集合
? 传统的集合运算
– 并( Union)
– 交( Intersection)
– 差( Difference)
– 广义笛卡尔积( Extended Cartesian Product)
? 专门的关系运算
– 选择( Select)
– 投影( Project)
– 连接( Join)
– 除( Divide)
? 有关的数据操作
– 查询( Query)
– 插入( Insert)
– 删除( Delete)
– 修改( Update)
? 关系是以集合的方式操作的,即操作的对象是元组的集合,操作
的结果也是元组的集合。这和非关系模型的操作结果是一条记录
有着重要区别。
? 关系的操作能力可以用代数方式和逻辑方式来表示,
– 代数方式是通过关系代数对关系的运算来表达查询要求的方式。
– 逻辑方式是通过关系演算、用谓词表达对关系的查询要求的方式。
– 现在关系数据库已经有了标准语言 —— SQL( Structured Query
Language),它是一种介于关系代数和关系演算的语言。
? 综上所述,又可以把关系数据语言分为三类:关系代数语言、关
系演算语言以及具有关系代数和关系演算双重特点的 SQL语言。
关系完整性约束
? 在数据库中数据完整性是指保证数据正确的特性。
它包括两方面的内容:
– 与现实世界中应用需求的数据的相容性和正确性;
– 数据库内数据之间的相容性和正确性。
? 在关系数据模型中一般将数据完整性分为三类
– 实体完整性
– 参照完整性
– 用户定义完整性
关系数据模型
?关系模型的数据结构和基本术语
?关系的形式定义
?对关系的限定(关系的性质)
关系模型的基本术语
参照关系和被参照关系,在
关系数据库中可以通过外
部关键字使两个关系关联,
这种联系通常是一对多
( 1:n)的,其中主(父)
关系( 1方)称为被参照
关系,从(子)关系( n
方)被称为参照关系。
关系
属性
值域
元组
分量
关系模式
关系模型
关系数据库
候选关键字
主关键字
主属性
非主属性
外部关键字
关系的形式定义
笛卡儿积定义,设 D1,D2,…, Dn为任意
集合,定义 D1,D2,…, Dn的笛卡儿积为,
其中每一个元素( d1,d2,…,dn)叫作一
个 n元组,简称元组,元组中每一个 di叫作
元组的一个分量。
},,1,|),,,{( 2121 niDddddDDD iinn ??? ??????
关系的形式定义, 笛卡儿积 D1× D2… ×
Dn的任意一个子集称为 D1,D2,…,Dn上的
一个 n元关系。
需要说明两点
?关系是元组的集合, 集合 ( 关系 ) 中的元素
( 元组 ) 是无序的;而元组不是分量 di的集合,
元组中的分量是有序的 。
例如, 在关系中 (a,b)≠(b,a), 但在集合中
{a,b}={b,a}。
?若一个关系的元组个数是无限的, 则该关系称
为无限关系, 否则称为有限关系;在数据库中
只考虑有限关系 。
关系的性质
? 每一分量必须是不可分的最小数据项,即每个属性都是不
可再分解的,这是关系数据库对关系的最基本的限定。
? 列的个数和每列的数据类型是固定的,即每一列中的分量
是同类型的数据,来自同一个值域。
? 不同的列可以出自同一个值域,每一列称为属性,每个属
性要给予不同的属性名。
? 列的顺序是无关紧要的,即列的次序可以任意交换,但一
定是整体交换,属性名和属性值必须作为整列同时交换。
? 行的顺序是无关紧要的,即行的次序可以任意交换。
? 元组不可以重复,即在一个关系中任意两个元组不能完全
一样。
关系模型的完整性约束
?实体完整性规则
?参照完整性规则
?用户定义完整性
?完整性约束的作用
实体完整性规则
? 实体完整性是要保证关系中的每个元组都是可识别
和唯一的 。
? 实体完整性规则的具体内容是:若属性 A是关系 R的
主属性, 则属性 A不可以为空值 。
? 实体完整性是关系模型必须满足的完整性约束条件,
也称作是关系的不变性 。
? 关系数据库管理系统可以用主关键字实现实体完整
性, 这是由关系系统自动支持的 。
对实体完整性规则的几点明
? 实体完整性规则是针对关系而言的, 而关系则对应
一个现实世界中的实体集 。 例如, 仓库关系对应现
实世界中的仓库实体集 。
? 现实世界中的实体是可区分的, 它们具有某种标识
特征;相应地, 关系中的元组也是可区分的, 在关
系中用主关键字做唯一性标识 。
? 主关键字中的属性, 即主属性不能取空值 。 如果主
属性取空值, 则意味着关系中的某个元组是不可标
识的, 即存在不可区分的实体, 这与实体的定义也
是矛盾的 。
参照完整性规则
? 现实世界中的实体间存在着某种联系,而在关系模
型中实体是用关系描述的、实体之间的联系也是用
关系描述的,这样就自然存在着关系和关系之间的
参照或引用。
? 参照完整性也是关系模型必须满足的完整性约束条
件,是关系的另一个不变性。
? 通过一个例子来说明什么是参照完整性
参照关系和被参照关系的定义
设 F是关系 R的一个属性或属性组,但不是
关系 R的关键字,另外有主关键字为 K的关系 S。
如果关系 R的属性或属性组 F与关系 S的主关键
字 K相对应,则称 F是关系 R的外部关键字,并
称关系 R是参照关系,S是被参照关系(或目标
关系)。关系 R和 S可以是同一个关系。
参照完整性规则
如果属性 ( 或属性组 ) F是关系 R的外部关
键字, 它与关系 S的主关键字 K相对应, 则对于
关系 R中每个元组在属性 ( 或属性组 ) F上的值
必须为:
● 或者取空值 ( F的每个属性均为空值 ) ;
● 或者等于 S中某个元组的主关键字的值 。
在关系系统中通过说明外部
关键字来实现参照完整性,而说
明外部关键字是通过说明引用的
主关键字来实现的,也即通过说
明外部关键字,关系系统则可以
自动支持关系的参照完整性。
用户定义完整性
? 一种与应用密切相关的数据完整性约束,如
– 某个属性的值必须唯一
– 某个属性的取值必须在某个范围内
– 某些属性值之间应该满足一定的函数关系等
? 类似以上的约束不是关系数据模型本身所要求的,
而是为了满足应用方面的语义要求而提出的
? 在用户定义完整性中最常见的是限定属性的取值范
围,即对值域的约束,所以在用户定义完整性中最
常见的是域完整性约束。
完整性约束的作用
? 执行插入操作时检查完整性
– 执行插入操作时需要分别检查实体完整性规则、参照完整
性规则和用户定义完整性规则。
? 执行删除操作时检查完整性
– 执行删除操作时一般只需要检查参照完整性规则。
? 执行更新操作时检查完整性
– 执行更新操作可以看作是先删除旧的元组,然后再插入新
的元组。所以执行更新操作时的完整性检查综合了上述两
种情况。
关系代数
?基本概念和符号
?传统的集合运算
?专门的关系运算
?基本运算及变换
关系代数的基本概念
?关系代数的运算对象是关系,关系代数
的运算结果也是关系。与一般的运算一
样,运算对象、运算符和运算结果也是
关系代数的三个要素。
?关系代数的运算可以分为两大类
– 传统的集合运算
– 专门的关系运算
几个概念和专门的符号
?元组的分量
?元组的连串
?元组中属性的映像集
元组的分量
?设有关系模式 R(A1,A2,…, An)
– r∈ R表示 r是 R的一个元组
– r.Ai或 r[Ai]表示 r这个元组中相应于属性 Ai
的一个分量
?例如,假设 R是仓库关系,
– r=( "WH1","北京 ",370)是仓库关系的一
个元组,则 r∈ R,r.仓库号 或 r[仓库号 ]为
"WH1"。
元组的连串
设 R为 m元关系,S为 n元关系,并且
r=(r1,r2,…,rm)∈ R
s=(s1,s2,…,sn)∈ S
则 称为元组的连串。
这是一个( m+n)元组,前 m个分量为 R中
的一个 m元组,后 n个分量为 S中的一个 n元
组。
),,,,,,,( 2121 nm sssrrrrs ???
元组中属性的映像集
?设有关系模式 R(X,Y),其中 X,Y可以
是单个属性,也可以是属性集,定义当
X取值为 x时,x在 R中的映象集为:
}.|.{ xXrRrYrY x ????
?设有如右上表所示的订购单关系,把它命名为
R,并且进一步设 X为属性职工号,Y为属性集
{供应商号,订购单号,订购日期 },则当 X取
值为 E3时
{( S7,OR67,2002/06/23),
( S4,OR79,2002/07/29),
( S6,OR90,2002/07/13),
( S3,OR91,2002/10/27) }
Yx=
传统的集合运算
?集合的并运算
?集合的交运算
?集合的差运算
?集合的广义笛卡尔积运算
集合的并、交、差运算示意
集合的广义笛卡尔积运算
设 R和 S是两个关系,如果 R是 m元关系、
有 k个元组,S是 n元关系、有 l个元组,
则广义笛卡尔积 R× S是一个 m+n元关
系、有 k× l个元组。广义笛卡儿积可
以记作:
},|{ SsRrrsSR ????
专门的关系运算
?选择运算 (Select)
?投影运算 (Project)
?连接运算 (Join)
?除运算 (Division)
选择运算
选择运算是从指定的关系中选择某
些元组形成一个新的关系,被选择的元
组是用满足某个逻辑条件来指定的。
选择运算表示为:
}|{)( FRrrRF ????
其中 R是关系名,σ 是选择运算符,
F是逻辑表达式。
选择运算举例:
σ职工号 ="E3"(订购单 )
订购单关系
从订购单关系中选择职工
号为,E3”的元组构成新的关系
投影运算
1)选择指定的属性, 形成一个可能含
有重复行的表格;
2)删除重复行, 形成新的关系 。
投影运算对指定的关系进行投影操
作,根据该关系分两步产生一个新关系:
投影运算表示为
}|.{)( RrArRA ???
其中 R是关系名,π 是投影运算
符,A是被投影的属性或属性集。
投影运算举例,订购单关系
选取职工号和供应商
号两列构成新的关系 π职工号,供应商号 (订购单 )
选择和投影运算举例:
从订购单关系中,
选取出职工号为 E3的
所经手的订购单号和
与之相关的供应商号。
订购单关系
π供应商号,订购单号 (σ 职工号 ="E3"(订购单 ))
连接运算
连接运算是两个表之间的运算,这两
个表 通常 是具有一对多联系的父子关系。
所以连接过程一般是由参照关系的外部关
键字和被参照关系的主关键字来控制的,
这样的属性通常也称为 连接属性 。
连接运算的概念
?连接运算是将满足两个表之间运算关系的记
录连接成一条记录,所有这样的记录构成新
的表(连接运算的结果)。
?连接运算可以表示为:
}|{ jiji
BjAi
BASBRArsSR ?
?
??????
这里 Ai是 R中的属性,Bj是 S中的属性,θ是关系(比较)运算符,
连接的结果是一个广义笛卡儿乘积的子集,其中的元组满足 Ai和 Bj
间的 θ关系。当 θ为,=”时,称为等值连接; θ为,<”时,称为小于
连接; θ为,>”时,称为大于连接等等。
自然连接
?在连接运算中最常用的连接是自然连接。
?自然连接运算一般表示为,
}][][|][{ 中全体不重复的属性是 rsXBsArXrsSR ji ????
其中 Ai和 Bj要出自同一个值域,并且在实际应用中这两个属
性往往具有相同的属性名。
自然连接做了三件事:
?计算 广义笛卡尔积 R× S;
?选择满足条件 r[Ai]=s[Bj]的所有元组;
?去掉重复的属性。
自然连接的例子
仓库号 城市 面积
W H 1 北京 370
W H 2 上海 500
W H 3 广州 200
W H 5 合肥 130
仓库号 职工号 工资
W H 2 E1 1 2 2 0
W H 1 E3 1 2 1 0
W H 2 E4 1 2 5 0
W H 3 E6 1 2 3 0
W H 1 E7 1 2 5 0
仓库号 城市 面积 职工号 工资
WH 2 上海 500 E1 1 2 2 0
WH 1 北京 370 E3 1 2 1 0
WH 2 上海 500 E4 1 2 5 0
WH 3 广州 200 E6 1 2 3 0
WH 1 北京 370 E7 1 2 5 0
注意:
?为了使一个关系中的任一元组都参加自
然连接,该元组的连接属性(字段)值
必须出现在另一个参加连接的关系中 ;
?连接陷阱问题 ;
?一般 在实际应用中可以父无子,而不可
以子无父,否则将破坏参照数据完整性。
综合运算实例
根据以上关系求出在上海工作的职工的工资值
都有哪些?
仓库号 城市 面积
W H 1 北京 370
W H 2 上海 500
W H 3 广州 200
W H 5 合肥 130
仓库号 职工号 工资
W H 2 E1 1 2 2 0
W H 1 E3 1 2 1 0
W H 2 E4 1 2 5 0
W H 3 E6 1 2 3 0
W H 1 E7 1 2 5 0
仓库 职工
(仓库)上海城市 ""1 ?? ?R
职工?? 12 RR
)(工资 23 RR ??
关系代数语句为:
查询过程示意
选择运算
自然连接运算
投影
运算
注意
自然连接和等值连接很相象,但它
们不同,自然连接要去掉重复的属性,
而等值连接却不需要去掉重复的属性。
除运算
}|.{ SYRrXrSR x ?????
设有关系 R(X,Y)和 S(Y),其中 X,Y
可以是单个属性或属性集,则除法运算
定义为:
理解除法运算
?R( X,Y) 是被除关系
?S( Y) 是除关系
?商关系由 R中某些 X属性值构成,其中的任
一 X值所对应的一组 Y值都包含除关系 S。
?除运算常用于至少 … 查询或运算
}|.{ SYRrXrSR x ?????
除运算的例子
?它的含义是:至少向 WH1,WH3,WH5供
货的供应商号。
基本运算及变换
在关系代数运算中集合的 并运算, 差
运算, 笛卡尔积运算 以及 选择运算 和 投影
运算 是 5种基本运算,另三种运算(集合的
交运算 以及 连接运算 和 除运算 )可以用 5种
基本运算来表达,引进它们并不增加语言
的能力,但是可以简化表达。
两个关系的交运算可以表示为
R∩ S = R - (R - S )
两个关系的自然连接运算可以表示为
))(( ][][ SRSR ji BsArX ??? ???
两个关系的 θ连接运算可以表示为
)(][][ SRSR
jiji BsArBA
??? ?
?
?
两个关系的除运算可以表示为
)))((()( RSRRSR XXX ????? ???
关系数据库系统的三层模式结构
关系数据库系统也是三层模式的数据库系统,
同样可以划分为存储模式、概念模式和外部模式三
个层次。
关系概念模式
? 关系概念模式主要包括对出现在关系数据库中的每
个基本表的说明及其基本表之间联系的说明,它包
括对关系名、属性名、属性的类型的说明,以及主
关键字的说明(实体完整性)、外部关键字的说明
(参照完整性及表之间的关联)和属性的取值范围
与约束条件的说明(用户定义完整性)等。
? 在 SQL语句中定义基本表的命令是 CREATE TABLE,
它可以完成定义概念模式需要的所有功能,即在该
命令中包括对关系名、属性名、属性类型的说明,
也可以说明主关键字、外部关键字和属性的取值范
围与约束条件等。修改基本表定义的命令是 ALTER
TABLE命令。
关系存储模式
? 每个基本表逻辑上都对应于存储文件 ( 磁盘上的物理文件 ),
不同的数据库管理系统可能对存储文件的管理方法是不一样的,
可能一个基本表对应一个存储文件 ( 如 FoxPro) ;但对大多数
大型数据库管理系统, 一个存储文件可以存放多个基本表, 一
个基本表的数据也可能分别存放在多个存储文件上 。
? 存储文件的逻辑结构组成了关系数据库的存储模式, 但是用户
无需了解存储文件的物理结构, 它对用户是透明的 。 即关系数
据库的存储模式几乎不需要用户说明, 关系数据库管理系统可
以自动完成对基本表的存储 。
? 对用户来说, 在关系数据库中与存储模式有关的说明只有索引
的说明, 索引是为基本表建立, 即在基本表上可以建立索引 。
一般可以将索引分为普通索引, 唯一索引和聚集索引三类 。
关系外部模式
?在关系数据库中, 外部文件被称作视图
( View), 即可以根据基本表定义视图 。 所
谓视图是指从一个或几个基本表导出的表,
视图是一个虚拟的表, 它本身并不真正包含
数据, 在数据库中存储的是视图的定义 。
?用户看到的可以是视图, 也可以是基本表 。
基本表和视图都是关系, 都是表, 它们在概
念上是等同的, 用户可以在其上进行查询等
各种操作, 可以在视图上再定义视图 。
?因此, 关系外部模式由视图和部分基本表构
成 。
【 本章小节 】
?关系模型的相关概念和术语
?关系模型的三个要素是:关系数据结构、
关系操作集合和关系完整性约束
?关系数据模型的完整性约束及其作用
?关系代数,传统的集合运算和专门的关
系运算
?关系数据库系统的三层模式结构