Skip to content

关系数据库

2.1 关系模型概述

关系数据库简介

  • E.F.Codd(美国IBM公司)于1970年系统而严格地提出关系模型,论文《A Relational Model of Data for Large Shared Data Banks》发表在《Communication of the ACM》
  • 之后提出了关系代数关系演算的概念
  • 1972年提出关系的第一、第二、第三范式
  • 1974年提出关系的BC范式
  • 关系数据库应用数学方法来处理数据库中的数据
  • 20世纪80年代后,关系数据库系统成为最重要、最流行的数据库系统

典型系统:

  • 实验系统:System R、University INGRES
  • 商用系统:ORACLE、SYBASE、INFORMIX、DB2、INGRES

关系模型的组成

关系模型由三部分组成:

  1. 关系数据结构
  2. 关系操作集合
  3. 关系完整性约束

1. 关系数据结构

  • 单一的数据结构——关系
  • 现实世界的实体以及实体间的各种联系均用关系来表示
  • 数据的逻辑结构——二维表(从用户角度,关系模型中数据的逻辑结构是一张二维表)

2. 关系操作

(1)常用的关系操作

  • 查询操作:选择、投影、连接、除、并、交、差
    • 查询的表达能力是其中最主要的部分
    • 5种基本操作:选择、投影、并、差、笛卡尔积
  • 数据更新操作:插入、删除、修改

(2)关系操作的特点

  • 集合操作方式:操作的对象和结果都是集合
  • 非关系数据模型的数据操作方式:一次一记录(如文件系统)

(3)关系数据语言的种类

语言类型特点典型代表
关系代数语言用对关系的运算来表达查询要求ISBL
关系演算语言用谓词来表达查询要求
- 元组关系演算语言谓词变元的基本对象是元组变量APLHA, QUEL
- 域关系演算语言谓词变元的基本对象是域变量QBE
具有双重特点的语言兼具关系代数和关系演算SQL

(4)关系数据语言的特点

  • 高度非过程化的语言
  • 存取路径的选择由DBMS的优化机制来完成
  • 用户不必用循环结构就可以完成数据操作
  • 能够嵌入高级语言中使用
  • 关系代数、元组关系演算和域关系演算三种语言在表达能力上完全等价

3. 关系的三类完整性约束

完整性约束说明
实体完整性通常由关系系统自动支持
参照完整性早期系统不支持,目前大型系统能自动支持
用户定义的完整性反映应用领域需要遵循的约束条件,体现具体领域中的语义约束,用户定义后由系统支持

2.2 关系数据结构及形式化定义

关系模型建立在集合代数的基础上。

2.2.1 关系

1. 域(Domain)

是一组具有相同数据类型的值的集合。例如:

  • 整数
  • 实数
  • 介于某个取值范围的整数
  • 长度指定的字符串集合
  • {'男','女'}
  • 介于某个取值范围的日期

2. 笛卡尔积(Cartesian Product)

(1)定义

给定一组域 D1,D2,,Dn(这些域中可以有相同的),D1,D2,,Dn 的笛卡尔积为:

D1×D2××Dn={(d1,d2,,dn)diDi,i=1,2,,n}

所有域的所有取值的一个组合,不能重复

(2)示例

给出三个域:

  • D1=SUPERVISOR={,}
  • D2=SPECIALITY={,}
  • D3=POSTGRADUATE={,,}

D1×D2×D32×2×3=12 个元组。

(3)基本概念

概念英文说明
元组(Tuple)Tuple笛卡尔积中每一个元素 (d1,d2,,dn) 称为一个 n 元组
分量(Component)Component笛卡尔积元素中的每一个值 di 叫作一个分量
基数(Cardinal number)CardinalityDi 的基数为 mi,则 D1×D2××Dn 的基数 M=i=1nmi

(4)笛卡尔积的表示方法

笛卡尔积可表示为一张二维表,表中的每行对应一个元组,每列对应一个域。

3. 关系(Relation)

(1)定义

D1×D2××Dn子集叫作在域 D1,D2,,Dn 上的关系,表示为:

R(D1,D2,,Dn)
  • R:关系名
  • n:关系的度(Degree)

注意:

  • 关系是笛卡尔积的有限子集(无限关系在数据库系统中无意义)
  • 笛卡尔积不满足交换律,但关系满足交换律。解决方法:为关系的每个列附加一个属性名以取消关系元组的有序性

示例:

关系 SAP(SUPERVISOR,SPECIALITY,POSTGRADUATE)

假设专业与导师为1:n,导师与研究生为1:n,则SAP关系可以包含三个元组:

text
{ (张清玫, 信息专业, 李勇),
  (张清玫, 信息专业, 刘晨),
  (刘逸, 信息专业, 王敏) }

(2)元组:关系中的每个元素称为元组,通常用 t 表示。

(3)单元关系与二元关系

  • n=1 时,称为单元关系(Unary relation)
  • n=2 时,称为二元关系(Binary relation)

(4)关系的表示:关系也是一个二维表,每行对应一个元组,每列对应一个域。

(5)属性:关系中不同列可以对应相同的域,为了加以区分,必须对每列起一个名字,称为属性(Attribute)。n目关系必有n个属性。

(6)码(Key)

概念说明
候选码(Candidate key)某一属性组的值能唯一地标识一个元组,且其真子集不能唯一标识,则称该属性组为候选码。最简单的情况:候选码只包含一个属性
全码(All-key)最极端的情况:所有属性组都是候选码
主码(Primary key)若一个关系有多个候选码,则选定其中一个为主码
主属性(Prime attribute)候选码的诸属性称为主属性
非主属性(Non-key attribute)不包含在任何候选码中的属性

(7)三类关系

类型说明
基本关系(基本表或基表)实际存在的表,是实际存储数据的逻辑表示
查询表查询结果对应的表
视图表由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据

(8)基本关系的性质

  1. 列是同质的(Homogeneous):每一列中的分量是同一类型的数据,来自同一个域
  2. 不同的列可出自同一个域:每一列称为一个属性,不同的属性要给予不同的属性名
    • 例如:导师属性和研究生属性都从PERSON域中取值,必须取不同的属性名
  3. 列的顺序无所谓:列的次序可以任意交换
    • 遵循此性质的产品(如ORACLE)增加新属性时插至最后一列
    • 不遵循者(如FoxPro)区分属性顺序
  4. 任意两个元组的候选码不能相同(由笛卡尔积性质决定)
    • 但许多产品(如Oracle、FoxPro)允许存在完全相同元组,除非定义了约束
  5. 行的顺序无所谓:行的次序可以任意交换
    • 遵循者(如ORACLE)插入元组时插至最后一行
  6. 分量必须取原子值:每一个分量都必须是不可分的数据项(规范条件中最基本的一条)

2.2.2 关系模式

1. 什么是关系模式

  • 关系模式(Relation Schema)是型关系是值
  • 关系模式是对关系的描述,包括:
    • 元组集合的结构:属性构成、属性来自的域、属性与域之间的映像关系
    • 完整性约束条件:属性取值范围的限定、属性之间的相互关联和相互约束

2. 关系模式的形式化定义

关系模式可以形式化地表示为:

R(U,D,DOM,F)
符号含义
R关系名
U组成该关系的属性名集合
D属性组 U 中属性所来自的域
DOM属性向域的映像集合
F属性间数据的依赖关系的集合

示例: 导师和研究生出自同一个域——人,定义 dom(SUPERVISOR-PERSON)=dom(POSTGRADUATE-PERSON)=PERSON

关系模式通常可以简记为:

R(U)R(A1,A2,,An)
  • R:关系名
  • A1,A2,,An:属性名
  • 域名及属性向域的映像常常直接说明为属性的类型、长度

3. 关系模式与关系

对比维度关系模式关系
本质(对关系的描述)(关系模式在某一时刻的状态或内容)
性质静态的、稳定的动态的、随时间不断变化的
统称关系模式和关系往往统称为关系,通过上下文加以区别

2.2.3 关系数据库

1. 关系数据库

在一个给定的应用领域中,所有实体及实体之间联系的关系的集合构成一个关系数据库。

2. 关系数据库的型与值

  • 关系数据库的型称为关系数据库模式,是对关系数据库的描述,包括:
    • 若干域的定义
    • 在这些域上定义的若干关系模式
  • 关系数据库的值是这些关系模式在某一时刻对应的关系的集合,通常简称为关系数据库

2.3 关系的完整性

关系模型的完整性规则是对关系的某种约束条件。

  • 实体完整性参照完整性:关系模型必须满足的完整性约束条件,被称作关系的两个不变性,应由关系系统自动支持
  • 用户定义的完整性:应用领域需要遵循的约束条件,体现了具体领域中的语义约束

2.3.1 实体完整性

实体完整性规则(Entity Integrity):

若属性 A 是基本关系 R主属性,则属性 A不能取空值

示例:

  • SAP(SUPERVISOR, SPECIALITY, POSTGRADUATE)
    • POSTGRADUATE为主码(假设研究生不会重名),则其不能取空值
  • 选修(学号,课程号,成绩)
    • "学号、课程号"为主码,则两个属性都不能取空值

遵守实体完整性规则的原因:

  1. 实体完整性规则针对基本关系(一个基本表通常对应一个实体集或多对多联系)
  2. 现实世界中的实体和实体间的联系都是可区分的(具有某种唯一性标识)
  3. 关系模型中以主码作为唯一性标识
  4. 主码中的属性即主属性不能取空值。空值就是"不知道"或"无意义"的值。主属性取空值,就说明存在不可区分的实体,与第(2)点矛盾

2.3.2 参照完整性

1. 关系间的引用

在关系模型中,实体及实体间的联系都用关系来描述,因此可能存在关系与关系间的引用。

示例1: 学生实体、专业实体以及专业与学生间的一对多联系

学生(学号,姓名,性别,专业号,年龄)
专业(专业号,专业名)

示例2: 学生、课程、学生与课程之间的多对多联系

学生(学号,姓名,性别,专业号,年龄)
课程(课程号,课程名,学分)
选修(学号,课程号,成绩)

示例3: 学生实体及其内部的领导联系(一对多)

学生(学号,姓名,性别,专业号,年龄,班长)

2. 外码(Foreign Key)

F 是基本关系 R 的一个或一组属性,但不是关系 R 的码。如果 F 与基本关系 S主码 Ks 相对应,则称 F 是基本关系 R外码

  • 基本关系 R 称为参照关系(Referencing Relation)
  • 基本关系 S 称为被参照关系(Referenced Relation)目标关系(Target Relation)

说明:

  • 关系 RS 不一定是不同的关系
  • 目标关系 S 的主码 Ks 和参照关系的外码 F 必须定义在同一个(或一组)域
  • 外码并不一定要与相应的主码同名(但通常取相同的名字以便于识别)

3. 参照完整性规则

若属性(或属性组)F 是基本关系 R 的外码,它与基本关系 S 的主码 Ks 相对应,则对于 R 中每个元组在 F 上的值必须为:

  • 或者取空值F 的每个属性值均为空值)
  • 或者等于 S 中某个元组的主码值

应用示例:

  • 学生关系中"专业号"只能取:空值(尚未分配专业)或专业关系中已存在的专业号值
  • 选修关系中"学号"和"课程号"既是主属性又是外码,只能取相应被参照关系中已经存在的主码值
  • 学生关系中"班长"属性值可以取:空值(未选班长或本人即为班长)或本关系中某个元组的学号值

2.3.3 用户定义的完整性

用户定义的完整性是针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求。

关系模型应提供定义和检验这类完整性的机制,由系统统一处理,而非由应用程序承担。

示例:

课程(课程号,课程名,学分)
  • "课程名"属性必须取唯一值
  • 非主属性"课程名"也不能取空值
  • "学分"属性只能取值 {1, 2, 3, 4}

2.4 关系代数

概述

1. 关系代数

  • 一种抽象的查询语言
  • 对关系的运算来表达查询

2. 运算的三要素

运算对象、运算结果、运算符。

3. 关系代数运算的三个要素

要素内容
运算对象关系
运算结果关系
运算符四类(集合运算符、专门的关系运算符、算术比较符、逻辑运算符)

运算符分类:

运算符类型说明
集合运算符将关系看成元组的集合,从关系的"水平"方向(行的角度)进行运算
专门的关系运算符不仅涉及行而且涉及列
算术比较符辅助专门的关系运算符进行操作
逻辑运算符辅助专门的关系运算符进行操作

4. 关系代数运算的分类

运算类别包含的运算
传统的集合运算并、差、交、广义笛卡尔积
专门的关系运算选择、投影、连接、除

5. 表示记号

(1)R, tR, t[Ai]

设关系模式为 R(A1,A2,,An)tR 表示 tR 的一个元组,t[Ai] 表示元组 t 中相应于属性 Ai 的一个分量。

(2)A, t[A], C

A={Ai1,Ai2,,Aik},则 A 称为属性列域列t[A]=(t[Ai1],t[Ai2],,t[Aik]) 表示元组 t 在属性列 A 上诸分量的集合。A 表示从全部属性中去掉 A 后剩余的属性组。

(3)trts

R 为 n 目关系,S 为 m 目关系,trRtsStrts 称为元组的连接——一个 n+m 列的元组。

(4)象集 Zx

给定一个关系 R(X,Z)XZ 为属性组。当 t[X]=x 时,xR 中的象集(Images Set)为:

Zx={t[Z]tR,t[X]=x}

表示 R 中属性组 X 上值为 x 的诸元组在 Z 上分量的集合。

2.4.1 传统的集合运算

要求:RS 具有相同的目 n,且相应的属性取自同一个域

1. 并(Union)

RS={ttRtS}
  • 仍为 n 目关系
  • 属于 R 或属于 S 的元组组成

2. 差(Difference)

RS={ttRtS}
  • 仍为 n 目关系
  • 属于 R 而不属于 S 的所有元组组成

3. 交(Intersection)

RS={ttRtS}
  • 仍为 n 目关系
  • 既属于 R 又属于 S 的元组组成
  • 可表示为:RS=R(RS)

4. 广义笛卡尔积(Extended Cartesian Product)

R×S={trtstrRtsS}
维度结果
(n+m) 列:前 n 列是 R 的一个元组,后 m 列是 S 的一个元组
k1×k2 个元组(k1R 的元组数,k2S 的元组数)

2.4.2 专门的关系运算

1. 选择(Selection)

(1)定义

选择又称为限制(Restriction)。在关系 R 中选择满足给定条件的诸元组:

σF(R)={ttRF(t)=’真’}
  • F:选择条件,是一个逻辑表达式
  • 基本形式:[¬(] X1θY1 [)][φ [¬(] X2θY2 [)]]
    • θ:比较运算符(>,,<,,=,
    • X1,Y1 等:属性名、常量、简单函数(属性名可用序号代替)
    • φ:逻辑运算符(

(2)特点

选择运算是从行的角度进行的运算。

(3)示例

例 1:查询信息系(IS 系)全体学生

σSdept=’IS’(Student)σ5=’IS’(Student)

例 2:查询年龄小于 20 岁的学生

σSage<20(Student)σ4<20(Student)

2. 投影(Projection)

(1)定义

R 中选择出若干属性列组成新的关系:

πA(R)={t[A]tR}
  • AR 中的属性列

(2)特点

  • 投影操作主要是从列的角度进行运算
  • 投影之后不仅取消了原关系中的某些列,还可能取消某些元组(避免重复行)

(3)示例

例 3:查询学生的姓名和所在系

πSname,Sdept(Student)π2,5(Student)

例 4:查询学生关系 Student 中都有哪些系

πSdept(Student)

3. 连接(Join)

(1)定义(θ连接)

从两个关系的笛卡尔积中选取属性间满足一定条件的元组:

RAθBS={trtstrRtsStr[A] θ ts[B]}
  • AB:分别为 RS 上度数相等且可比的属性组
  • θ:比较运算符

连接运算是从 RS 的广义笛卡尔积 R×S 中选取满足比较关系的元组。

(2)两类常用连接

① 等值连接(equijoin)

θ 为 "=" 的连接运算。从 RS 的广义笛卡尔积中选取 AB 属性值相等的那些元组:

RA=BS={trtstrRtsStr[A]=ts[B]}

② 自然连接(Natural join)

  • 是一种特殊的等值连接
  • 两个关系中进行比较的分量必须是相同的属性组
  • 在结果中去掉重复的属性列
RS={trtstrRtsStr[B]=ts[B]}

(3)运算角度

  • 一般的连接操作是从行的角度进行运算
  • 自然连接还需要取消重复列,所以是同时从行和列的角度进行运算

(4)悬浮元组与外连接

概念说明
悬浮元组(Dangling tuple)关系 RS 做自然连接时,R 中某些元组在 S 中找不到公共属性上值相等的元组,这些被舍弃的元组称为悬浮元组
外连接(OUTER JOIN)把悬浮元组也保存在结果关系中,在其他属性上填空值(Null)
左外连接(LEFT JOIN)只保留左边关系 R 中的悬浮元组
右外连接(RIGHT JOIN)只保留右边关系 S 中的悬浮元组

4. 除(Division)

(1)定义

给定关系 R(X,Y)S(Y,Z),其中 X,Y,Z 为属性组。R 中的 YS 中的 Y 可以有不同属性名,但必须出自相同的域集。

R÷S={tr[X]trRπY(S)Yx}
  • YxxR 中的象集,x=tr[X]

除运算得到一个新的关系 P(X)PR 中满足下列条件的元组在 X 属性列上的投影:元组在 X 上分量值 x象集 Yx 包含 SY 上投影的集合

(2)特点

除操作是同时从行和列角度进行运算。

(3)示例分析

text
R:
A    B    C
a1   b1   c2
a1   b2   c3
a1   b2   c1
a2   b3   c7
a2   b2   c3
a3   b4   c6
a4   b6   c6

S:
B    C
b1   c2
b2   c1
b2   c3

分析:

  • a1 的象集:{(b1,c2),(b2,c3),(b2,c1)}
  • a2 的象集:{(b3,c7),(b2,c3)}
  • a3 的象集:{(b4,c6)}
  • a4 的象集:{(b6,c6)}
  • S(B,C) 上的投影:{(b1,c2),(b2,c1),(b2,c3)}

只有 a1 的象集包含 S(B,C) 上的投影,所以 R÷S={a1}

5. 综合举例

示例数据库: 学生-课程数据库(Student, Course, SC)

例 7:查询至少选修 1 号课程和 3 号课程的学生号码

K=πCno(σCno=’1’Cno=’3’(Course))πSno,Cno(SC)÷K

结果为 95001,因为 95001 的象集 {1,2,3} 包含 {1,3}

例 8:查询选修了 2 号课程的学生的学号

πSno(σCno=’2’(SC))={95001,95002}

例 9:查询至少选修了一门其直接先行课为 5 号课程的学生姓名

πSname(σCpno=’5’(Course)SCStudent)

例 10:查询选修了全部课程的学生号码和姓名

(πSno,Cno(SC)÷πCno(Course))πSno,Sname(Student)

本章小结

本章围绕关系模型展开,重点说明关系数据结构、关系操作和关系完整性约束。

关键内容

  • 关系数据结构:关系由域、笛卡尔积和关系逐步定义,核心概念包括属性、元组、候选码、主码、主属性和关系模式。
  • 基本关系性质:列同质,列可同域,行列顺序无关,候选码唯一,分量必须是原子值。
  • 关系操作集合:查询操作包括选择、投影、连接、除、并、交、差;更新操作包括插入、删除、修改。
  • 关系代数运算:五种基本运算是并、差、笛卡尔积、投影、选择;交、连接、除可由基本运算导出。
  • 完整性约束:实体完整性要求主属性非空,参照完整性约束外码取值,用户定义完整性表达具体应用语义。

核心要点

  • 关系模型以二维表为逻辑结构,但其理论基础是集合代数。
  • 关系代数的基本运算具备完备表达能力,导出运算用于简化查询表达。
  • 关系完整性约束保证关系数据库中的数据符合实体、引用关系和业务语义。

关键术语

域, 笛卡尔积, 关系, 元组, 属性, 候选码, 主码, 外码, 关系模式, 关系代数, 实体完整性, 参照完整性, 用户定义完整性。