数据库系统(3):关系模型
在目前使用的数据处理软件中,关系数据库管理系统 ( $Relational\ \ Database\ \ Management\ \ System$, $RDBMS$ ) 占据了统治地位。RDBMS
基于关系数据模型。在关系模型中,所有数据逻辑上被组织成关系(表)结构。
1. 基本术语
关系模型基于数学中的关系 ( $relation$ )。
1.1 关系数据结构
1.1.1 关系
关系是由行和列组成的表。在关系模型中,用关系保存数据库所描述对象的信息,关系用二维表表示。用户主要接触的就是表,但这只限于逻辑结构,即外部层和概念层。对于物理结构,由于是通过多种存储结构实现的,因此并不适用。
1.1.2 属性
属性 ( $Attribute$ ) 是关系中命名的列。在关系的二维表中,每一行对应一个单独的记录,每一列则对应一个属性。
1.1.3 域
域 ( $Domain$ ) 是一个或多个属性的取值集合,必须给每一个属性定义一个域。不同属性的域可以互不相同,也可以共用。通过使用域,用户可以集中定义属性的取值范围和含义。
1.1.4 元组
元组 ( $Tuple$ ) 是关系中的行。关系的结构、域说明以及所有取值约束统称为关系的内涵 ( $intension$ )。它通常是固定的,除非关系的意义改变,需要加入新的属性。元组的集合称为外延 ( $extension$ ) /状态 ( $state$ ),它经常发生改变。
1.1.5 维数
维数 ( $Degree$ ) 是关系所包含的属性个数。只有一个属性的关系称为一元关系或者一元组,两个属性的关系称为二元关系,以此类推,$n$ 个属性的关系称为 $n$ 元组。维数是内含的性质之一。
1.1.6 基数
基数 ( $Cardinality$ ) 是关系所包含的元组的个数。基数是外延的性质之一。
1.1.7 关系数据库
关系数据库是具有不同关系名的规范化的关系的集合。
事实上,关系模型的术语并不统一,下表为常见的关系术语的别名及其对应的正式术语。
正式术语 | 可选术语 |
---|---|
关系 | 表、文件 |
元组 | 行、记录 |
属性 | 列、字段 |
1.2 数据库中的关系
关系模式 ( $Relation\ \ schema$ ) 是用一组属性和域的名词对定义的具有名字的关系。设属性 $A_1$, $A_2$,…, $A_n$ 对应的域分别为 $D_1$, $A_2$,…, $A_n$,那么集合 {$A_1$: $D_1$, $A_2$: $D_2$,…, $A_n$: $D_n$} 就是一个关系模式。由关系模式 $S$ 定义的关系 $R$ 是一组从属性到域的映射。因此关系 $R$ 就是如下 $n$ 元组的集合:
$n$ 元组的每个元素都由一个属性和该属性的一个取值组成。通常会把属性名作为列标题,元组作为行。关系中属性和元组对应的集合称为关系实例 ( $relation\ \ instance$ )。
关系数据库也具有模式。关系数据库模式 ( $Relational\ \ database\ \ schema$ ) 是关系模式的结合,在集合中每个关系都有不同的名字。
1.3 关系的性质
- 在同一关系模式中,关系之间不能重名
- 关系的每一个单元格都包含一个原子(单个)值
- 关系中的属性不能重名
- 同一属性中的值都来自相同的域
- 关系中元组间互不相同
- 属性顺序并不重要
- 元组顺序也并不重要,但改变元组的顺序可能会影响访问效率
1.4 键
元组之间不会重复,因此可以通过一个或多个属性来唯一标识元组。
1.4.1 超键
超键 ( $Superkey$ ) 是一个属性或者属性的集合,能唯一标识关系中的每个元组。但是超键中可能包含多余的属性。
1.4.2 候选键
候选键 ( $Candidate\ \ key$ ) 是超键,但是其任何真子集都不是超键。候选键是唯一标识每个元组的最小属性集合,具有如下性质:
- 唯一性,即可以唯一的标识每个元组
- 不可约性,即每个真子集都不具有唯一性
一个关系可能有多个候选键。当一个键中包含多个属性时,就称为合成键 ( $composite\ \ key$ )。
1.4.3 主键
主键 ( $Primary\ \ key$ ) 是用于唯一标识关系中元组的候选键。一个关系可以有多个候选键,但这些候选键中只能选出一个作为主键,没有被选为主键的候选键称为可替换键 ( $alternate\ \ key$ )。
1.4.4 外键
外键 ( $Foreign\ \ key$ ) 是关系中与另一个关系的候选键相匹配的属性或者属性集合。
2. 完整性约束
关系数据模型是数据模型的结构部分。数据模型还包括操作部分和完整性约束。在上述部分中我们谈到的域约束 ( $domain\ \ constraint$ ),用于限定关系中属性的取值集合。此外还有实体完整性 ( $entity\ \ integrity$ ) 和引用完整性 ( $referential\ \ integrity$ )。其他的完整性约束还有多样性 ( $multiplicity$ ) 和一般性约束 ( $general\ \ constraint$ )。而在这之前,我们需要先了解空 ( $null$ )。
2.1 空
空代表对一个元组当前取值还不知道或者是不可用的属性值。空并不是一个值,只是没有值的一种表示。空可能会导致执行问题,因为关系模型是基于一阶谓词演算的,而谓词演算只支持 $true$ 和 $false$ 两个值,而如果要允许空存在,则需要采用多值逻辑。
2.2 实体完整性
实体完整性是指在基本关系中主键的属性不能为空。主键是能唯一标识元组的最小属性集合。如果内部存在空,就说明并不是所有属性都是唯一标识元组所必须的。这与主键的定义相悖。
2.3 引用完整性
引用完整性是指如果关系中存在外键,则它的值与主关系中某个元组的候选键取值相等,或者全部为空。
2.4 一般性约束
一般性约束是由用户或者管理员指定的附加性规则,用于在某些方面进行约束。例如为某个属性的值添加上限等。
3. 视图
关系模型中的视图与ANSI-SPARC
三层结构中的视图有所不同,它不完全是用户看到的外部模型,而是一个虚 ( $virtual$ ) /导出 ( $derived$ ) 关系,即无需单独存在,在必要时从一个或多个基本关系中动态导出。一个外部模型可由基本关系(概念级)和基本关系的导出视图组成。
3.1 术语
基本关系 ( $Base\ \ relation$ ) 是一个与概念模式中的实体相对应的具有名字的关系,它的元组都存储在数据库的物理结构中。根据基本关系,我们可以定义视图。视图是对一个或多个基本关系进行关系操作得到的动态结果,是一个无需存在于数据库中,但却可以在需要时生成的虚关系。视图不存在存储器中,但其定义存储在系统目录中。对视图所做出的任何操作都会被自动转换称为对导出其的关系的操作。又由于视图是动态的,因此操作可以立即反映到基本关系上。
3.2 作用
- 对特定用户只显示特定的信息,提供了一个强大灵活的安全机制
- 允许用户自定义访问方法
- 简化复杂操作
视图的这些作用也提供了逻辑数据独立性。视图的引入也使我们能够进行概念模式的重构。只要通过重新定义视图,就可以在不影响到用户的情况下重组关系。
3.3 更新
如上所说,对视图所进行的操作会立即反映到关系中。同样的,对关系所进行的操作也会立即反映到视图中。但是这种方法存在约束:
- 如果视图是由一个基本关系的简单查询生成,并且包含了主键或者候选键,那么就可以对其进行更新操作
- 如果视图涉及多个基本关系,那么就不可以对其进行更新操作
- 如果视图的生成中涉及了聚集或者分组操作,那么就不可以对其进行更新