回到首页 / 上级目录

关系数据库

关系数据库采用关系模型,直观地在表中展示数据。

笛卡儿积

(domain)是一组具有相同数据类型的值的集合。

笛卡儿积(cartesian product)是域上的一种集合运算。

如域 $D_1, D_2, \cdots,D_n$ 的笛卡儿积为

\[D_1\times D_2\times\cdots\times D_n = \{(d_1, d_2,\cdots,d_n)|d_i\in D_i,i=1,2,\cdots, n\}\]

每个元素 $(d_1, d_2,\cdots,d_n)$ 叫作一个元组(tuple)。

元素中的每个值 $d_i$ 叫做一个分量(component)。

关系

$D_1\times D_2\times\cdots\times D_n$ 的子集叫做在域 $D_1,D_2,\cdots, D_n$ 上的关系(relation),表示为 $R(D_1, D_2, \cdots, D_n)$。

这里 $R$ 表示关系的名字,$n$ 是关系的度(degree)。

候选键(candidate key)是一组属性所组成的集合,它需要同时满足下列两个条件:

  1. 这个属性集合始终能够确保在关系中能唯一标识元组。
  2. 在这个属性集合中找不出真子集能够满足条件 1。

若一个关系有多个候选键,则选定其中一个为主键(primary key)。

关系模式

关系的描述称为关系模式(relation schema)。它可以形式地表示为:

\[R(U,D,DOM,F)\]

其中 $R$ 为关系名,$U$ 为属性名集合,$DOM$ 为属性到域的映射,F 为数据依赖。

关系模式通常可以记为 $R(U)$ 或 $R(A_1, A_2, \cdots, A_n)$。

关系是关系模式在某一时刻的内容。关系模式是静态的,关系是动态的。

关系数据库

关系数据库是所有关系的集合。

关系数据库模式是对关系数据库的描述。

关系操作

关系模型中常用的操作包括查询(query)、插入(insert)、删除(delete)和修改(update)。

关系模型的操作可用结构化查询语言(Structured Query Language)表示。

关系约束

关系需要满足一些约束条件。

主键不能取空值(NULL)。

外键要么取空值,要么等于父表中某个元组的主键。

关系需要满足用户定义的约束条件。如属性的取值范围。

集合运算

集合运算将关系看作集合,将元组看作集合元素。

以关系 R 和关系 S 为例:

(1)并(union):$R\cup S$ 的元组属于 R 或属于 S。

(2)差(except):$R-S$ 的元组属于 R 而不属于 S。

(3)交(intersection):$R\cap S$ 的元组既属于 R 又属于 S。

(4)笛卡儿积(cartesian product):新关系的元组由 R 和 S 的元组合并而成,若 R 由 $k_1$ 个元组,S 有 $k_2$ 个元组,则新关系有 $k_1\times k_2$ 个元组。

关系运算

集合运算中,元组是最小单位,但关系运算还会涉及到关系的列。

以关系 R 和关系 S 为例:

(1)选择(selection):在关系 R 中选择满足给定条件的元组。用 $\sigma_F(R)$ 表示,其中 F 为选择条件。

(2)投影(projection):从 R 中选择出若干属性列组成新的关系。用 $\prod_A(R)$ 表示,其中 A 为 R 中的属性列。投影后重复的元组合并为一个元组。

(3)连接(join):从两个关系的笛卡儿积中选取属性间满足一定条件的元组。用 $\mathop{R\bowtie S}\limits_{A\theta B}$ 表示,其中 A 和 B 分别为 R 和 S 上列数相等且可比的属性组,$\theta$ 为比较运算符。

(4)除运算(division):可理解为笛卡儿积的逆运算。设 $T = R \div S$,则 T 包含所有在 R 但不在 S 中的属性,且 T 的元组与 S 的元组的所有组合都在 R 中。