第2章:关系数据库
2.1 关系数据结构及形式化定义
按照数据模型的三个要素,关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成。
2.1.1 关系
关系模型的数据结构虽然简单却能够表达丰富的语义,描述出现实世界的实体以及实体之间的各种联系。也就是说,在关系模型中,现实世界的实体以及实体间的各种联系均用单一的数据结构,即关系来表示。
关系模型是建立在集合代数的基础上的这里从集合论的角度给出关系数据结构的形式化定义:
- 域(Domain)
定义2.1:域是一种具有相同数据类型的值的集合。
- 笛卡尔积(Cartesian Product) 百度百科
笛卡尔积是域上的一种集合运算;
定义2.2:给定一组域 ,允许其中某些域是相同的,则这一组域的笛卡尔积为:
其中每一个元素 叫做一个n元组,或简称元组,元组中的每一个值 叫做一个分量。
一个域所允许的不同的取值个数叫做这个域的基数。
- 关系(Relation)
定义2.3:
的子集在域 上的关系,表示为 。
R表示关系的名字,n称为关系的目或者度(degree)。
关系中的每个元素都是关系中的元组,通常用t表示;
当 时,称该关系为单元关系(unary relation),或一元关系。
当 时,称该关系为二元关系(binary relation)。
关系是笛卡尔积的有限子集,所以关系也是一张二维的表,表的每行对应一个元组,每列对应一个域;由于域可以相同,所以必须为每一个域起一个名字,称为属性(attribute),n目关系必有n个属性。
若关系中某一属性组的值能唯一的标识一个元组,而其子集不能,则称该属性组为候选码(candidate key)。
若一个关系有多个候选码,则选定其中的一个作为主码(primary key)。
候选码的各个属性称为主属性(prime attribute),不包含在候选码中的属性称为非主属性(non-prime attribute)或者非码属性(non-key attribute)。
候选码可以只包含一个属性,也可以包含全部属性,此时称之为全码(all-key)。
关系可以有三种基本类型:
- 基本关系(基本表或者基表):实际存在的表,实际储存数据的逻辑表示。
- 查询表:查询结果对应的表。
- 视图表:由基本表或者其他视图表导出,是虚表,不对应实际储存的数据。
由于笛卡尔积的域不满足交换律,所以当关系作为关系数据模型的数据结构时,需要给予如下的限定或者扩充:
- 无限关系在数据库系统中是无意义的,关系数据模型中的关系必须是有限集合。
- 通过为关系的每一个列附加一个属性名的方法取消关系数据的有序性。
因此,基本关系具有以下性质:
- 每一列中的分量来自同一类型的数据,来自同一个域。
- 不同的列可以出自同一个域,称其中的每一个列为一个属性,不同的属性要给予不同的属性名。
- 列的顺序没有意义。
- 任意两个元组的候选码不能取相同的值。
- 行的顺序无关紧要。
- 每一个分量都必须是不可分的数据项,简而言之,不允许表中有表。
2.1.2:关系模式
关系数据库中,关系模式是型,关系是值,关系模式是对关系的描述。
关系是元组的集合,所以关系模式必须指出这个元组集合的结构,即:
- 元组由哪些属性构成
- 元组中的属性来自哪些域
- 属性与域之间的映像关系
定义2,4:
关系的描述称为关系模式(relation schema),可以表示为:
其中,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种基本操作,其他操作都可以用基本操作来定义和导出。
关系操作的对象和结果都是集合,所以也称为一次一集合(set-at-a-time)的操作方式;相应的,非关系数据模型的数据操作方式则为一次一记录(record-at-a-time)。
2.2.2:关系数据语言的分类
早期的关系操作能力通常用代数方式或者逻辑方式来表示,分别称为关系代数(relational algebra)和关系演算(relational calculus)。
关系代数:
- 用对关系的运算来表达查询请求;
关系演算:
- 用谓词来表达查询要求(啥是谓词???)
- 按谓词变元的基本对象是元组变量还是域变量可以进一步分为:
- 元组关系演算
- 域关系演算
关系完备性:
一个关系数据语言可以表示关系代数可以表示的查询,称为具有完备的表达能力,简称关系完备性。
关系代数,元组关系演算,域关系演算在表达能力上是等价的。
结构化查询语言(Structural Query Language):
集查询,数据定义语言,数据操纵语言,数据控制语言于一体的关系数据语言。
2.3:关系的完备性
关系模型中有三类完整性约束:
- 实体完整性(entity integrity)
- 参照完整性(referential integrity)
- 用户定义完整性(user-defined integrity)
前两个是必须满足的完整性约束条件,称为关系的两个不变性;
最后一个是应用领域需要遵循的约束条件,体现了具体领域中的语义约束。
2.3.1:实体完整性
关系数据库中每个元组应该是可区分的、唯一的,这样的约束条件用实体完整性规则来保证。
规则2.1 实体完整性规则:
若属性(一个或一组)A是基本关系R的主属性,则A不能为NULL。
对实体完整性规则说明如下:
- 实体完整性规则是针对基本关系而言的;
- 现实中的实体是可区分的;
- 关系模型中以主码为唯一性标识
- 主属性不能取NULL
2.3.2:参照完整性
在关系模型中,实体以及实体与实体之间的联系都是用关系来描述的,这样就自然存在着关系与关系之间的引用。
定义2.5:
设
是基本关系
的一个或一组属性,但不是关系
的码;
是关系
的主码;如果
与
相对应,则称
为
的外码(foreign key),并称基本关系
为参照关系(referencing relation),基本关系
为被参照关系(referenced relation)或目标关系(target relation)。关系
与关系
可以是同一个关系。
参照完整性规则定义了主码与外码之间引用的规则。
规则2.2:参照完整性规则
若属性(或者属性组)
是基本关系
的外码,它与基本关系
的主码
相对应(
与
可以是同一关系),则对于
中的每一个元组在
上的取值必须满足:
- 或者取NULL
- 或者取 中某一个元组的主码值
2.3.3:用户定义的完整性
针对某一关系数据库的具体约束条件,反应某一具体应用所涉及的数据必须满足的语义要求。
2.4:关系代数
关系代数是一种抽象的查询语言,它用对关系的运算来表达查询。
传统的集合运算符 | 含义 | 专门的关系运算符 | 含义 |
---|---|---|---|
并 | 选择 | ||
差 | 投影 | ||
交 | 连接 | ||
笛卡尔积 | 除 |
传统集合运算将关系看成元组的集合,从“行”的角度来进行;
专门的关系运算不仅涉及“行”,而且涉及“列”。
比较运算符和逻辑运算符辅助专门的关系运算符进行操作。
2.4.1:传统的集合运算
传统的集合运算是二目运算符,包括并、差、交、笛卡尔积4中运算。
设关系 和关系 具有相同的目 (即两个关系都有n个属性),且相应的属性取自相同的域, 是元组变量, 表示 是 的一个元组。
传统集合运算的定义如下:
并(union):
结果仍为n目关系,由属于R或者属于S的元组组成。
差(excpt):
结果仍为n目关系,由属于S且不属于R的元组组成。
交(intersection):
结果仍为n目关系,由既属于R又属于S的元组构成。
可以表示为 。
笛卡尔积:
2.4.2:专门的关系运算
为了叙述方便,引入几个记号(mmp):
- 有关系模式 ,他的一个关系设为 , 表示t为R的一个元组, 表示元组t中属于属性 的一个分量。
- 若 ,其中 是 中的一部分,则称A为属性列或者属性组, 表示元组t在属性列A上的诸分量的集合, 表示 中去掉 后剩余的属性组。
- R为n目元组,S为m目元组,且 , 称为元组的连接(concatenation)或元组的串接,其结果为一个n+m列的元组,前n个分量为R中的一个元组,后m个分量为S中的一个元组,
- 给定一个关系 ,X和Z为属性组,当 时,x在R中的象集images定义为: 它表示R中属性组X值为 的各个元组在属性组Z上的分量的集合(如有理解困难见书本样例)。
选择(selection)
选择又称为限制(restriction),他是在关系中选择满足给定要求的各个元组:
比较运算符 | 含义 |
---|---|
- | |
- | |
- | |
- | |
- | |
不等于 |
逻辑运算符 | 含义 |
---|---|
非 | |
或 | |
与 |
投影(projection)
关系R的投影的含义是从R中选出若干属性列组成新的关系:
其中A为R中的属性列。
连接(join)
连接也称为 连接,它从两个关系的笛卡尔积中选择属性满足一定要求的元组,记作:
其中,A和B分别为R和S上列数相等且可以比较的属性组, 代表比较运算符,连接运算从R和S的笛卡尔积 中选取R关系在属性组A上的值与S属性组在B上的值满足比较关系 的元组。
有两种最常用也最重要的连接:等值连接和自然连接。
当 为 时,称为等值连接,即从R和S的笛卡尔积中选取A、B属性相等的元组。
自然连接是一种特殊的连接,他要求两个关系中比较的分量必须是同名的属性组,并在结果中将重复的属性去掉;即:若R和S具有相同的属性组B,U为R和S的全体属性集合,则自然连接可以表示为:
在两个关系R和S做自然连接时,选择两个关系在公共属性上相等的元组构成新的关系,对于公共属性不等的元组,会被舍弃,这些被舍弃的元组称为悬浮元组。
如果将悬浮元组也保存在结果关系中,并将其他属性置为NULL(见课本样例),那么这种链接称为外连接(符号不会打),如果只保留左边关系R的悬浮元组,称作左外连接(符号不会打),同理有右外连接。
除运算
设关系R除以关系S的结果为关系T,则T、包含所有在R中但不在S中的属性及其值,且T的元组与S的元组的所有组合都在R中。
使用象集定义除法:
给定关系 和关系 ,其中 为属性组,R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域集。
R与S进行除运算之后得到一个新的关系 ,P是R中所有满足下列条件的元组在属性X上的投影:元组在X上的分量值x的象集 包含S在Y上的投影的集合,记作:
其中 为x在R中的象集, 。
如有理解困难参照书本样例。
*2.5:关系演算
先略→_→