3.1 关系数据模型和关系数据库
数据结构
关系数据模型源于数学,用二维表来组织数据,而这个二维表在关系数据库中就称为关系。关系数据库就是表或者说是关系的集合。
在关系系统中,表是逻辑结构而不是物理结构。
因此,表是对物理存储数据的一种抽象表示——对很多存储细节的抽象,如存储记录的位置,记录的顺序,数据值的表示以及记录的访问结构,对用户来说都是不可见的。
数据操作
关系模式的操作对象是集合(或表),而不是单个数据行,也就是说,关系模型中操作的数据以及操作的结构(查询操作的结果)都是完整的集合(或表),这些集合可以是只包含一行数据的集合,也可以是不包含任何数据的空集合,而非在关系数据模型数据库中典型的操作是一次一行或一次一个记录。
因此,集合处理能力是关系型数据库区别于其他类型数据库的一个重要特征。
在非关系模型中,各个数据记录之间是通过指针等方式连接的,当要定位到某条记录时,需要用户自己按指针的链接方向遍历查找,我们称这种查找方式为用户‘导航’。而在关系数据模型中,由于是按集合进行操作。因此,用户只需要指定数据的定位条件,数据库管理系统就可以自动定位到该数据记录,而不需要用户来导航。这也是关系数据模型在数据操作上与非关系模型的本质区别。
传统的关系运算 | 并,交,差,广义笛卡尔乘积 |
专门的关系运算 | 选择,投影,连接,除 |
有关的数据操作 | 查询,插入,删除,更改 |
关系操作是通过关系语言实现的,关系语言的特点是高度非过程化的。所谓非过程化是指以下两个方面:
- 用户不必关心数据存取路径和存取过程,用户只需要提出数据请求,数据库管理 系统就会自动完成用户请求的操作。
- 用户也没有必要编写程序代码来实现对数据的重复操作。
数据完整性约束
在数据库中数据的完整性是指保证数据正确性的特征。数据完整性是一种语义概念,他包括两个方面:
- 与现实世界中应用需求的数据的相容性和正确性。
- 数据库内数据之间的相容性和正确性。
数据完整性(在关系数据模型中) | 实体完整性 | 系统级约束。 是关系模型必须满足的完整性约束 |
参照完整性(引用完整性) | ||
用户定义的完整性(域的完整性) | 应用级约束。 限制属性的取值在有意义的范围内 |
3.2 关系模型的基本术语与形式化定义
基本术语
关系模型采用单一的数据结构——关系来表示实体以及实体之间的联系,并且用直观的观点来看,关系就是二维表。
关系
通俗的讲,关系就是二维表,二维表的名字就是关系的名字。
属性
二维表中的每个列称为一个属性,每个属性(或叫字段)有一个名字,称为属性名,二维表中对应某一列的值称为属性值,二维表中列的个数称为关系是的元数。如果一个二维表有n个列,则称其为n元关系。
值域
二维表中属性的取值范围称为值域。例如:‘年龄’列的取值为大于0的整数 ,性别的取值为‘男’和‘女’两个值,这些都是列的值域。
元组
二维表中的一行数据称为一个元组。
分量
元组中的每一个属性值称为元组的一个分量,n元关系的每个元组有n个分量。例如:对于元组(081101,李勇,21,男,计算机系),有5个分量。
关系模式
二维表的结构称为关系模式,或者说,关系模式就是二维表的表框架或表头结构。设有关系名为R,属性分别为A1,A2,······,An,则关系模式可以表示为:
R(A1,A2,······,An)
对每个Ai(I=1,···,n)还包括该属性到值域的映像,即属性的取值范围。
关系数据库
对应于一个关系模型的所有关系的集合称为关系数据库。
候选键(候选关键字或候选码)
如果一个属性或属性集的值能够唯一标识一个关系的元组而又不包含多余的属性,则称该属性或属性集为候选键。
在一个关系中可以有多个候选键。
主键(主码或主关键字)
主键是表中的属性或属性组,用于唯一地确定一个元组,主键可以有一个属性组成,也可以由多个属性共同组成,每个关系只能有一个主键。
由多个属性共同组成地主键为复合主键。(用括号将多个属性括起来)
主属性和非主属性
包含在任一候选键中的属性称为主属性;不包含在任一候选键中的属性称为非主属性。
关系术语 | 一般的表格术语 |
关系名 | 表名 |
关系模式 | 表头(表所含列的描述) |
关系 | (一张)二维表 |
元组 | 记录或行 |
属性 | 列 |
分量 | 一条记录中某个列的值 |
对关系的限定
关系可以看成是二维表,但并表示所有的二维表都是关系。关系数据库对关系由一些限定,归纳起来有如下几个方面:
- 关系中的每个分量都必须是不可再分的最小属性,每个属性都不能再被分解为更小的属性,这就是关系数据库对关系的最基本的限定。
- 表中的数据类型是固定的,即列中的每个分量都是同类型的数据,来自相同的值域。
- 不同列的数据可以取自相同的值域,每个列称为一个属性,每个属性有不同的属性名。
- 关系表中列的顺序不重要,即列的次序可以任意交换,不影响其表达的语义。
- 行的顺序也不重要,交换行数据的顺序不影响关系的内容。
- 同一个关系中的元组不能重复,即在一个关系中任意两个元组的值不能完全相同。
3.3 关系代数
基本概念:
关系代数是一种纯理论的语言,它定义了一些操作,运用这些操作可以从一个或多个关系 中得到另一个关系,而不改变源关系,因此,关系代数的操作数和操作结果都是关系,而且一个操作的输出可以是另一个操作的输入,关系代数同算术运算一样,可以出现一个套一个的表达式,关系在关系代数下是封闭的,正如数字在算术操作下是封闭的一样。
关系代数是一种单次关系(或者说是集合)语言,即所有元组可能来自多个关系,但是用不带循环的一条语句处理,关系代数的命令的语法形式有多种。
关系代数的运算对象是关系,运算结果运算关系,与一般的运算一样,运算对象,运算符,运算结果是关系代数的3大要素。
传统的集合运算(二目运算)
例题:
顾客号 | 姓名 | 性别 | 年龄 |
S01 | 张宏 | 男 | 45 |
S02 | 李丽 | 女 | 34 |
S03 | 王敏 | 女 | 28 |
(a)表
顾客号 | 姓名 | 性别 | 年龄 |
S02 | 李丽 | 女 | 34 |
S04 | 钱景 | 男 | 50 |
S06 | 王平 | 女 | 24 |
(b)表
并运算
顾客号 | 姓名 | 性别 | 年龄 |
S01 | 张宏 | 男 | 45 |
S02 | 李丽 | 女 | 34 |
S03 | 王敏 | 女 | 28 |
S04 | 钱景 | 男 | 50 |
S06 | 王平 | 女 | 24 |
(a) U (b)
交运算
顾客号 | 姓名 | 性别 | 年龄 |
S02 | 李丽 | 女 | 34 |
(a) (b)
差运算
顾客号 | 姓名 | 性别 | 年龄 |
S01 | 张宏 | 男 | 45 |
S03 | 王敏 | 女 | 28 |
(a) - (b)
A | B |
a1 | b1 |
a2 | b2 |
(a)表
C | D | E |
c1 | d1 | e1 |
c2 | d2 | e2 |
c3 | d3 | e3 |
(b)表
专门的关系运算
专门的关系运算 | 选择 | 一元操作 |
投影 | ||
链接 | 二元操作 | |
除 |
选择
选择运算是从指定的关系中选出满足给定条件(用逻辑表达式表示)的元组而组成一个新的关系。
投影
投影运算是从关系R中选取干属性,并用这些属性组成一个新的关系。
投影运算一般由两个步骤完成:
- 选取出指定的属性,形成一个可能含有重复行的新关系。
- 删除重复行,形成结果关系。
连接
连接运算用来连接相互之间有联系的两个关系,从而产生一个新的关系,这个过程由连接属性(字段)来实现。一般情况下连接属性是出现在不同关系中的语义相同的属性。连接是由笛卡尔乘积导出的,相当于把连接谓词看出选择公式。进行连接运算的两个关系通常是具有一对多的父子关系。
连接运算主要由如下几种形式:
- θ连接
- 等值连接
- 自然连接
- 外部连接
- 半连接
自然连接与等值连接的区别为:
自然连接要求相等的分量必须有共同的属性名,等值连接则不要求;
自然连接要求把重复的属性名去掉,等值连接却不这样做 。
外连接:
- 左外连接
- 右外连接
- 全外连接
左外连接的含义是把连接符号左边的关系中不满足连接条件的元组也保留到连接后的结果中,并在连接结果中将该元组所对应的右边关系的各个属性均置为空值(null)。
右外连接的含义是把连接符号右边的关系中不满足连接条件的元组也保留到连接后的结果中,并在连接结果中将该元组所对应的左边关系的各个属性均置为空值(null)。
全外连接的含义是把连接符号两边的关系中不满足连接条件的元组也保留到连接后的结果中,并在连接结果中将不满足条件的各元组的相关属性均置为空值(null)。
关系运算的优先级按从高到低的顺序为:投影,选择,乘积,连接和出(同级),交,并和差(同级)。