关系模型的三个组成部分:关系数据结构、关系操作集合和关系完整性约束。
关系数据库系统与非关系数据库系统的区别是,关系系统只有“表”这一种数据结构; 而非关系数据库系统还有其他数据结构,以及对这些数据结构的操作。
一、关系数据结构及形式化定义
关系模型的数据结构非常简单,只包含单一的数据结构关系。
在用户看来,关系模型中数据的逻辑结构是一张扁平的二维表。
1.关系
若关系中的某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码(candidate key )。 若一个关系有多个候选码,则选定其中一个为主码(primary key)。候选码的诸属性称为主属性(prime attribute)。不包含在任何候选码中的属性称为非主属性(non-prime attribute)或非码属性(non-key attribute)。
关系可以有三种类型:基本关系(通常又称为基本表或基表)、查询表和视图表。其中,基本表是实际存在的表,它是实际存储数据的逻辑表示;查询表是查询结果对应的表; 视图表是由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据。
关系模型要求关系必须是规范化(normalization)的, 即要求关系必须满足一定的规范条件。 这些规范条件中最基本的一条就是, 关系的每一个分量必须是一个不可分的数据项。规范化的关系简称为范式(Normal Form, NF)。
关系表中不允许还有表,简言之不允许“表中有表”。
2.关系模式
关系的描述称为关系模式。关系数据库中,关系模式是型,关系是值。
关系是关系模式在某一时刻的状态或内容。关系模式是静态的、稳定的,而关系是动态的、随时间不断变化的,因为关系操作在不断地更新着数据库中的数据。例如,学生关系模式在不同的学年,学生关系是不同的。
3.关系数据库
所有关系的集合构成一个关系数据库。
关系数据库的值是这些关系模式在某一时刻对应的关系的集合, 通常就称为关系数据库。
4.关系模型的存储结构
有的管理系统中,一个表对应一个文件。
二、关系操作
1.关系操作
增删改查。关系的查询表达能力很强,是关系操作中最主要的部分。
查询操作又可以分为选择(select)、投影(project)、连接(join)、除(divide)、并(union)、差(except),交(intersection)、笛卡儿积等。 其中选择、 投影、 并、 差、 笛卡儿积是5种基本操作, 其他操作可以用基本操作来定义和导出。
关系操作的特点是集合操作方式, 即操作的对象和结果都是集合。 这种操作方式也称为一次一集合(set-at-a-time)的方式。 相应地, 非关系数据模型的数据操作方式则为一次一记录(record-at-a-time)的方式。
2.关系数据语言的分类
(Structured Query Language, SQL),是一种介于关系代数和关系演算之间的结构化查询语言。SQL不仅具有丰富的查询功能, 而且具有数据定义和数据控制功能, 是集查询、 数据定义语言、 数据操纵语言和数据控制语言(Data Control Language, DCL)于
一体的关系数据语言。
三、关系的完整性
关系模型中有三类完整性约束:实体完整性(entity integrity)、参照完整性(referential integrity)和用户定义的完整性(user-defined integrity)。
1)实体完整性:若属性(指一个或一组属性)A是基本关系R的主属性, 则A不能取空值(null value)。所谓空值就是“不知道”或“不存在”或“无意义”的值。
2)参照完整性:关系与关系之间存在着相互引用、相互约束的情况。参照完整性规则就是定义外码与主码之间的引用规则。
设F是基本关系R的一个或一组属性,但不是关系R的码,Ks是基本关系S的主码。如果F与Ks相对应,则称F是R的外码(foreign key),并称基本关系R为参照关系(referencing relation)。显然,目标关系S的主码Ks和参照关系R的外码F必须定义在同一个(或同一组) 域上。如下图。
参照完整性:若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须:
或者取空值(F的每个属性值均为空值); #外码属性本身不是主属性
或者等于S中某个元组的主码值。
如上图,R中的F必须满足上述条件。
3)用户定义完整性:针对某一具体关系数据库的约束条件, 它反映某一具体应用所涉及的数据必须满足的语义要求。例如某个属性必须取唯一值等条件。
四、关系代数
关系代数是一种抽象的查询语言,它用对关系的运算来表达查询。
关系代数的运算对象是关系,运算结果亦为关系。
运算符:
并(union):由属于R或属于S的元组组成。
差(except):由属于R而不属于S的所有元组组成。
交(intersection):由既属于R又属于S的元组组成。
选择(selection):从关系R中选取使逻辑表达式F为真的元组。这是从行的角度进行的运算。
投影(projection):从R中选择出若干属性列组成新的关系。
连接(join):从两个关系的笛卡儿积中选取属性间满足一定条件的元组。一般从行的角度进行运算,但自然连接还需要取消重复列,所以是同时从行和列的角度进行运算。