【关系数据结构的形式化定义】
关系模型的数据结构十分简单,在用户角度来看关系模型中数据的逻辑结构只是一张二维表,虽然简单,但却能表示现实世界中实体以及实体间的各种联系,在 数据库关系模型 中,已经介绍了关系模型与其基本概念,但关系模型实质上是建立在集合代数基础上的,这里从集合论角度,给出关系数据结构的形式化定义
域
域(Domain)是一组具有相同数据类型的值的集合,例如整数、实数、某个取值范围内的数等等,都是一个域
一个域允许的不同取值个数称为这个域的基数,对于一个域 $D$,其基数记为 $m$
例如,某个域 D = {1, 2, 4, 8}
,其基数 m = 4
笛卡尔积
笛卡尔积(Cartesian Product)是域上的一种集合运算,是所有域的所有取值的不可重复的组合
其数学定义如下:
给定一组域 $D_1,D_2,…,D_n$,并允许这些域中某些域是相同的,则这些域的笛卡尔积为
其中,笛卡尔积的每一个元素 $(d_1,d_2,…,d_n)$ 称为一个 n 元组(n-tuple),元组 $(d_1,d_2,…,d_n)$ 中的每一个值 $d_i$ 称为一个分量
若 $D_i$ 为有限集,其基数为 $m_i$,则笛卡尔积的基数为
举例来说,假如给出三个域:教师集合 THACHER={a,b}
,学生集合STUDENTS={1,2,3}
,专业集合 MAJORS={P,Q}
则 THACHER, STUDENTS, MAJORS
的笛卡尔积为
其中,笛卡尔积 THACHER x STUDENTS x MAJORS
中的每一个元素 (a, 1, P)
、(a, 2, P)
等,都是一个元组;组中的每一个值 a
、3
、Q
等,都是一个分量,该笛卡尔积的基数为 M = 2*3*2 = 12
笛卡尔积可表示为一个二维表,表中的每行对应一个元组,表中的每列对应一个域,上例的笛卡尔积就可表示为下表
THACHER | STUDENTS | MAJORS |
---|---|---|
a | 1 | P |
a | 1 | Q |
a | 2 | P |
a | 2 | Q |
a | 3 | P |
a | 3 | Q |
b | 1 | P |
b | 1 | Q |
b | 2 | P |
b | 2 | Q |
b | 3 | P |
b | 3 | Q |
关系
笛卡尔积是没有实际意义的,其某个子集才有实际含义,一个子集称为一个关系(Relation),由于关系是笛卡尔积的子集,因此关系也是一张二维表,表中的每行对应一个元组,每列对应一个域,由于域可以相同,为进行区分,对每列起一个名字,称为属性(Attribute)
对于笛卡尔积 $D_1 \times D_2 \times … \times D_n$ ,其子集 $R(D_1,D_2,…,D_n)$ 为该笛卡尔积的关系,其中 $R$ 为关系名,$n$ 为关系的目或度(Degree),关系中每个元素是关系中的元组(Tuple),常用 $t$ 来表示
当关系的度 $n=1$ 时,称该关系为一元关系,当 $n=2$ 时,称该关系为二元关系
根据定义,关系可以是一个无限集合,而且由于组成笛卡尔积的域不满足交换律($(d_1,d_2) \neq (d_2,d_1)$),因此当关系作为关系模型的数据结构时,需要给予如下的限定与扩充:
- 无限关系在数据库系统中无意义,限定关系模型中的关系必须是有限集合
- 通过位关系的每个列附加一个属性名将关系属性的有序性取消
同时,在引入关系后,有如下定义:
- 码(Key):又称为键,用于确定关系表中某一元组的
- 候选码(Candidate key):对于关系中的某一属性组,其值能够唯一标识一个元组,而其子集不能
- 主码(Primary key):对于候选码,选定其中一个用于唯一标识一个元组(候选码唯一时该候选码即为主码)
- 主属性(Primary attribute):候选码的各属性
- 非主属性(no-prime attribute):不包含在任何候选码中的属性
- 全码(All-key):最极端的情况下,关系模式的所有属性组是这个关系的候选码(最简单的情况下,候选码仅包含一个属性)
以上述的三个域教师集合 THACHER={a,b}
,学生集合STUDENTS={1,2,3}
,专业集合 MAJORS={P,Q}
产生的笛卡尔积为例
许多元组是没有实际意义的,因为在许多学校的研究生培训制度中,一个教师仅教授一门课,且一个学生只能跟着一个导师学习某个专业,故而其中的某一个子集才是有实际意义的,才能表示清楚某些导师与学生的关系
如下表所示,将该关系取名为 TSM
,表示 老师a
带领 学生1
和 学生2
学习 专业P
,老师b
带领 学生3
学习 专业Q
THACHER | STUDENTS | MAJORS |
---|---|---|
a | 1 | P |
a | 2 | P |
b | 3 | Q |
如上所示,该关系可以表示为 TSM(T, S, C)
,关系名 R = TSC
,关系的度 n = 3
,属性即为三个域的域名,假设学生姓名不会重复,那么 STUDENTS
属性的每一个值都唯一标识了一个元组,可作为 TSC
关系的候选码,同时也为主码,此外,STUDENTS
属性为主属性,THACHER
属性和 MAJORS
为非主属性
【关系类型】
关系有三种类型:
- 基本关系(基本表):实际存在的表,其是实际存储数据的逻辑表示
- 查询表:查询结果对应的表,其是根据要求对基本关系进行查询得到的结果
- 视图表:由基本表或其他视图导出的表,是一种虚拟的表,不对应实际存储的数据
可以发现,在三类关系中,基本关系是最基本也是最核心的关系,其具有以下性质:
- 列是同质的(Homogeneous):每列中的分量是同一类型的数据,来自同一域
- 不同的列可出自同一域,其中每一列称为一个属性,不同的属性要给予不同的属性名
- 列的次序可任意交换(在实际应用中,增加新属性时往往插入到最后一列)
- 任意两元组的候选码不能相同,以保证可以唯一标识元组
- 行的次序可任意交换
- 分量必须取原子值:每一分量是不可再分的数据项
在 关系模型 中,已经介绍了关系模型要求规范化,规范条件最基本的一条就是关系的每一分量必须取原子值,规范化的关系称为范式(Normal Form,NF),详见:范式
【关系模式】
在任何一个数据库中,都要区分型和值,对于关系数据库来说,型就是关系模式,是对关系数据库的描述,其包括若干域的定义、这些域之上定义的若干关系模式;值就是关系模式在某一时刻对应的关系的集合,简称为**关系数据库
关系模式(Relation schema)包含元组集合的结构(属性构成、属性来自的域、属性与域之间的映象关系)、元组语义及完整性约束条件、属性间的数据依赖关系集合,其可表示为:$R(U,D,DOM,F)$
其中,$R$ 是关系名,$U$ 是组成该关系的属性名集合,$D$ 是 $U$ 中属性来自的域,$DOM$ 是属性到域的映射集合(常常直接说明为属性的类型、长度),$F$ 是属性间数据的依赖关系集合
关系模型通常简记为:$R(U)$ 或 $R(A_1,A_2,…,A_n)$,其中 $A_i$ 为第 $i$ 个属性的属性名