一、 关系模型
- 关系模型顾名思义由一系列关系(relation)组成,它们基于关系模型(relational model)建立联系。
- 关系模型的基本单位是表(table),由行和列组成
- 关系模型的主要优点是能够简化数据表示,并且压缩复杂查询以降低其难度
- 它的各种操作基于SQL语言
二、 基本结构
给定属性集合 D 1 , D 2 , . . . , D n D_1,D_2,...,D_n D1,D2,...,Dn,一个关系(relation)r就是所有属性值集合笛卡尔积(Cartesian product)的子集,也就是说,关系r其实就是由若干不相同的属性排列组合而来
2.1 属性类型
对某个属性值集合,所有可取的值的集合被称为该属性的值域(domain),它常常被要求为是原子(atomic)的:
多值属性、复合属性不具有原子性
- null值属于所有属性的值域,它的存在会带来一系列特殊情况
2.2 关系概念
关系概念包含两部分:关系模式(relation schema)和关系实例(relation instance)
- 关系模式是对关系结构的描述,类似于SQL语言中的定义部分
E.g.Instructor-schema = (ID: string, name:string, dept_name: string, salary: int)
- 关系实例在给定的关系中与数据快照(snapshot)相关联
2.3 关系的乱序性
关系表中的每行被称为一条元组(tuple),元组在没有特殊声明的关系模式中以任意方式存储
2.4 键/码(key)
可以被称为关系的键的属性集合可以被由宽松到严格进行以下划分:
假定K是R的子集,那么:
- K是R的超键(superkey):当且仅当K 能够充分地鉴别出每一个独立的元组。这意味着不会有对某条元组,不存在K下的属性与它相同,且R-K下的属性与它不同的元组。
- K是R的候选键(candidate key):K应当满足超码定义并且应当是最小(minimal)的,这意味着任意K的真子集都不是超键。
- K是R的主键(primary key):主键必须从候选码中选取,由用户显式定义
2.5 外键(foreign key)
外键声明了一种参照关系,即一个关系中的某些属性依赖于另一个关系中的某些属性,例如r1(A,B,C)中的B属性参照了r2(B,D)中的B属性,这构成了一种参照关系。此时,r1应当声明B为参照r2的B的外键。
基于参照关系的定义,参照关系中外键的值必须在被参照关系中实际存在或为null。
三、 关系代数
关系代数抽象地体现了关系运算与关系处理,是SQL语言的基础。
基础的关系代数包括6个基本运算符:
选择(select)
基本模式:
σ
p
(
r
)
\sigma _p(r)
σp(r)
其中p是选择谓词(selection predicate),这样的表达式含义为
{
t
∣
t
∈
r
a
n
d
p
(
t
)
h
o
l
d
s
}
\{t|t\in r\ and\ p(t)\ holds\}
{t∣t∈r and p(t) holds}
投影(project)
并(union)
差(set difference)
笛卡尔积(Cartesian product)
重命名(rename)
重命名操作允许对关系的名称和属性的名称进行重命名: ρ X ( A 1 , A 2 , . . . , A n ) ( E ) \rho_{X(A1,A2,...,An)}(E) ρX(A1,A2,...,An)(E)将关系重命名为X并将属性名称重命名为A1,A2,…,An。
以及四个由基本类型衍生的应用较广的双目运算:
集合的交(intersection)
自然连接(natural join)
除法(division)
赋值(assignment)
使用赋值运算符 ← \leftarrow ←可以将查询结果重新表示
四、 扩展关系代数操作
广义投影(Generalized Projection)
广义投影允许在投影列表中使用算术方程表示:
∏
F
1
,
F
2
,
.
.
.
(
E
)
\prod_{F1,F2,...}(E)
∏F1,F2,...(E)
其中Fi可以是关系E中属性名的合理的算数方程式
聚集函数(Aggregate Functions)
聚集函数的功能就是从一个集合的数据中计算出一个结果,因此常用的聚集函数有求均值(avg),求最大/最小值(max/min),求和(sum)。求元组个数(count)等等,不同数据库软件对高阶的聚集函数支持不尽相同。
聚集函数的表示式:
G
1
,
G
2
,
.
.
.
,
G
n
g
f
1
(
A
1
)
,
f
2
(
A
2
)
,
.
.
.
,
f
n
(
A
n
)
(
E
)
_{G1,G2,...,Gn}g_{f1(A1),f2(A2),...,fn(An)}(E)
G1,G2,...,Gngf1(A1),f2(A2),...,fn(An)(E)
其中:
- Gi表示用于生成聚集类的属性列表,声明后每一个用于计算一个聚集函数值的组合(collection)中的G属性都是相同的。当然,G可以为空,这样聚集函数将以整个关系生成1个聚集函数值。
- Fi表示聚集函数值
- Ai表示聚集函数接受的属性值
外连接(Outer Join)
是连接操作的扩展,一定程度上防止数据损失
- null值的使用:
与自然连接不同的三种链接: - 左外连接:连接左侧的数据为准,为右侧数据补null
- 右外连接:同上,以右侧为准
- 全外连接:保留左右两侧的数据,为所有空值补null
对null值的处理
null值表示不存在的值或未知的值,它具有以下性质
- 任何包含null的算术表达式的结果都是null
- null不会被计算入聚集函数中(也即会被它忽视)
- 布尔操作结果如下
用关系代数表示对关系的修改操作
delete:
r
←
r
−
E
r\leftarrow r-E
r←r−E,其中E是关系代数表达式
insert:
r
←
r
∪
E
r\leftarrow r\cup E
r←r∪E
update:
r
←
∏
F
1
,
F
2
,
.
.
.
,
F
n
(
r
)
r\leftarrow\prod_{F1,F2,...,Fn}(r)
r←∏F1,F2,...,Fn(r)