按照数据模型的三个要素,关系模型由关系数据结构、关系操作集合和关系完整性约束三部分组成。
2.1 关系数据结构及形式化定义
2.1.1 关系
1. 域(domain)
域是一组具有相同数据类型的值的集合。
例如,自然数、整数、实数、长度小于25字节的字符串集合、{0,1}、{男,女}等,都可以是域。
2. 笛卡尔积(cartesian product)
给定一组域D1,D2, …, Dn,允许其中某些域是相同的,D1,D2, …, Dn的笛卡尔积为
D1×D2×…×Dn={(d1, d2, …, dn)| di∈Di, i=1,2,…,n}
其中,每个元素(d1, d2, …, dn)叫作一个n元组(n-tuple),或简称元组(tuple)。元素中的每一个值di叫作一个分量(component)
一个域允许的不同取值个数称为这个域的基数(cardinal number)。
笛卡尔积可表示为一张二维表。表中的每行对应一个元组,表中的每一列的值来自一个域。例如给出三个域:
D1=导师集合SUPERVISOR={张清玫, 刘逸}
D2=专业集合SPECIALITY={计算机专业,信息专业}
D3=研究生集合POSTGRADUATE={李勇,刘晨,王敏}
则D1、D2、D2的笛卡尔积为
D1×D2×D3 = {
(张清玫,计算机专业,李勇),(张清玫,计算机专业,刘晨),(张清玫,计算机专业,王敏),
(张清玫,信息专业,李勇),(张清玫,信息专业,刘晨),(张清玫,信息专业,王敏),
(刘逸,计算机专业,李勇),(刘逸,计算机专业,刘晨),(刘逸,计算机专业,王敏),
(刘逸,信息专业,李勇),(刘逸,信息专业,刘晨),(刘逸,信息专业,王敏)}
其中,(刘逸,计算机专业,李勇),(刘逸,计算机专业,刘晨)等都是元组。张清玫、计算机专业、李勇、刘晨等都是分量。
3. 关系(relation)
D1×D2×…×Dn的子集叫作在域D1,D2, …, Dn上的关系,表示为R(D1,D2, …, Dn)
这里R表示关系的名字,n是关系的目或度(degree)。
关系中的每个元素是关系中的元组,通常用t表示。
当n=1时,称该关系为单元关系(unary relation),或一元关系。
当n=2时,称该关系为二元关系(binary relation)。
若关系中的某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码(candidate key)。
若一个关系有多个候选码,则选定其中一个为主码(primary key)
候选码的诸属性称为主属性(prime attribute)。不包含在任何候选码中的属性称为非主属性(non-prime attribute或非码属性(non-key attribute)。
在最简单的情况下,候选码只包含一个属性。在最极端的情况下,关系模式的所有属性是这个关系模式的候选码,称为全码(all-key).
关系模型要求关系必须是规范化(normalization)的,即要求关系必须满足一定的规范条件。这些规范条件中最基本的一条就是,关系的每一个分量必须是一个不可分的数据项。规范化的关系简称为范式(Normal Form, NF)。
2.1.2 关系模式
在数据库中要区分型和值。关系数据库中,关系模式是型,关系是值。关系模式是对关系的描述。它可以形式化地表示为R(U, D, DOM, F)
其中R为关系名,U为组成该关系的属性名的集合,D为U中属性所来自的域,DOM为属性向域的映像集合,F为属性间数据的依赖关系集合。
关系是关系模式在某一时刻的状态或内容。关系模式是静态的、稳定的,而关系是动态的、随时间不断变化的,因为关系操作在不断地更新着数据库中的数据。例如,学生关系模式在不同的学年,学生关系是不同的。在实际工作中,人们常常把关系模式和关系都笼统地称为关系,这不难从上下文中加以区别,希望读者注意。
2.1.3 关系数据库
关系数据库也有型和值之分。关系数据库的型也称为关系数据库模式,是对关系数据库的描述。关系数据库模式包括若干域的定义,以及在这些域上定义的若干关系模式。
关系数据库的值是这些关系模式在某一时刻对应的关系的集合,通常就称为关系数据库。
2.1.4 关系模型的存储结构
我们已经知道,在关系数据模型中实体及实体之间的联系都用表来表示,但表是关系数据的逻辑模型。在关系数据库的物理组织中,有的关系数据库管理系统中的一个表对应一个操作系统文件,将物理数据组织交给操作系统完成;有的关系数据库管理系统从操作系统那里申请若干个大的文件,自己划分文件空间、组织表、索引等存储结构,并进行存储管理。
2.2 关系操作
2.2.1 基本的关系操作
关系模型中常用的关系操作包括查询(query)操作和插入(insert)、删除(delete)、修改(update)操作两大部分。
关系的查询表达能力很强,是关系操作中最主要的部分。查询操作又可以分为选择(select)、投影(project)、连接(join)、除(divide)、并(union)、差(except)、交(intersection)、笛卡尔积等。其中选择、投影、并、差、笛卡尔积是5中基本操作,其他操作可以用基本操作来定义和导出。
关系操作的特点是集合操作方式,即操作的对象和结果都是集合。
2.2.2 关系数据语言的分类
早期的关系操作能力通常用代数方式或逻辑方式来表示,分别称为关系代数(relational algebra)和关系演算(realtional calculus)。
另外,还有一种介于关系代数和关系演算之间的**结构化查询语言(Structured Query Language, SQL)。SQL不仅具有丰富的查询功能,而且具有数据定义和数据控制功能,是集查询、数据定义语言和数据控制语言于一体的关系数据语言。
2.3 关系的完整性
关系模型的完整性规则是对关系的某种约束条件。也就是说关系的值随着时间变化时应该满足一些约束条件。这些约束条件实际上是现实世界的要求。任何关系在任何时刻都要满足这些语义约束。
2.3.1 实体完整性
关系数据库中的每个元组应该是可区分的,是唯一的。这样的约束条件用实体完整性来保证。
规则2.1 实体完整性规则 若属性A是基本关系R的主属性,则A不能取空值(null value)。
2.3.2 参照完整性
设F是基本关系R的一个或一组属性,但不是关系R的码,Ks是基本关系S的主码。如果F与Ks相对应,则称F是R的外码(foreign key),并称基本关系R为参照关系(referencing relation),基本关系S为被参照关系(referenced relation)或目标关系(target relation)。
规则2.2 参照完整性规则 若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须:
- 或者取空值(F的每个属性值均为空值);
- 或者等于S中某个元组的主码值。
2.3.3 用户定义的完整性
任何关系数据库都应该支持实体完整性和参照完整性。这是关系模型所要求的。除此之外,不同的关系数据库系统根据其应用环境的不同,往往还需要一些特殊的约束条件。
用户定义的完整性就是针对某一具体关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。
例如某个属性值必须取唯一值(唯一约束)、某个非主属性不能取空值等(非空约束)。
2.4 关系代数
关系代数是一种抽象的查询语言,它用对关系的运算来表达查询。关系代数的运算按运算符的不同可分为传统的集合运算和专门的关系运算两类。
2.4.1 传统的集合运算
传统的集合运算是二目运算,包括并、差、交、笛卡尔积4中运算。
1. Union(并)
R∪S={t|t∈R∨t∈S}