2.1 关系数据结构及形式化定义
2.1.1 关系
模型的数据结构非常简单,只包含单一的数据结构——关系。
1. 域:是一组具有相同数据雷响的值的集合。
2. 笛卡尔积:给定一组域D₁、D₂、···、D𝘯,允许其中某些域是相同的,D₁、D₂、···、D𝘯的笛卡尔积为D₁*D₂*···*D𝘯 = {(d1,d2,…,dn)|di∈Di,i=1,2,…,n}
即:设有域a、d、g;
a = {b, c};
d = {e, f};
g = {h, i};
则a d g的笛卡尔积为
a*d*g = {b, c} * {e, f} * {h, i}
={beh, bei, bfh, bfi, ceh, cei, cfh, cfi};
元组(tuple):笛卡尔积中的每一个元素叫做元组。
基数(cardinal numner):一个域中不同取值个数称为这个域的基数。
3. 关系:D₁、D₂、···、D𝘯的笛卡尔积的子集,称为在D₁、D₂、···、D𝘯上的关系。n是关系的目或度。
当n = 1时,称该关系为单元关系,或一元关系。
当n = 2时,称该关系为二元关系。
候选码(Candidate key):若关系中的某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码。简单的情况:候选码只包含一个属性。
主属性(prime attribute):候选码的主属性称为主属性。不包含在任何候选码中的属性称为非主属性。
全码(All-key):最极端的情况:关系模式的所有属性组是这个关系模式的候选码,称为全码(All-key)。
关系可以有三种类型:基本关系、查询表和视图表。
1.基本关系
性质:
- ① 列是同质的(Homogeneous),即来自同一个属性
- ② 不同的列可出自同一个域
- ③ 列的顺序无所谓,列的次序可以任意交换
- ④ 任意两个元组的候选码不能相同
- ⑤ 行的顺序无所谓,行的次序可以任意交换
- ⑥ 分量必须取原子值
- 「关系模型要求关系必须是规范化的,即要求关系必须满足一定的规范条件。这些规范条件中最基本的一条就是,关系的每一个分量必须是一个不可分的数据项。」
2.1.2 关系模式
关系数据库中,关系模型是型,关系是值。关系模式是对关系的描述。
关系模式的定义:关系的描述称为关系模式(relation schema);关系模式可以形式化地表示为: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)操作两大部分。
关系的查询能力很强,是关系操作中最主要的部分。查询操作又可以分为选择、投影、连接、除、并、差、交、笛卡尔积等。其中选择、投影、并、差、笛卡尔积是5种基本操作,其他操作可以用基本操作来定义和导出,就像乘法可以用加法来定义和导出一样。
关系操作的特点是集合操作方式,即操作的对象和结果都是集合。
2.2.2 关系数据语言的分类
早期的关系操作能力通常用代数方式或逻辑方式来表示,分别称为关系代数和关系演算。关系代数用关系的运算来表达查询要求,关系演算则用谓词来表达查询要求。关系演算又可按谓词变元的基本对象是元组变量还是域变量分为元组关系演算和域关系演算。
SQL,Structure Query Languag, 结构化查询语言,是一种介于关系代数和关系演算之间的查询语言。不仅有丰富的查询功能,而且具有数据定义和数据控制功能,是集查询、数据定义语言、数据操纵语言和数据控制语言与一体的关系数据语言。
关系数据语言可以分为三类:如图2.1所示
![](https://i-blog.csdnimg.cn/blog_migrate/c882297d387375a9a310434ce7e7c38c.png)
2.3 关系的完整性
2.3.1 实体完整性
实体完整性规则:若属性(指一个或一组属性)A是基本关系R的主属性,则A不能去控制(null value)。所谓控制就是“不知道”或“不存在”或”无意义“的值。
例如:学生(学好,姓名,性别,专业好,年龄)关系中序号为主码,则学号不取为空值。
对于实体完整性规则说明如下:
(1)实体完整性规则是针对基本关系而言的。一个基本表通常对应现实世界的一个实体集。
(2)现实世界中的实体是可区分的,即它们具有某种唯一性标识。
(3)关系模型中以主码作为唯一性标识。
(4)主码中的属性即主属性不能取空值。主属性取空值,就说明存在某个不可标识的实体,即存在不可区分的实体,这与第(2)点相矛盾,因此这个规则称为实体完整性
2.3.2 参照完整性
现实世界中的实体之间往往存在某种联系,在关系模型中实体及实体间的联系都是用关系来描述的,这样就自然存在着关系与关系间的引用。
例如:学生、课程、学生与课程之间的多对多联系可以如下三个关系表示:
学生(学号,姓名,性别,专业号,年龄)
课程(课程号,课程名,学分)
选修(学号,课程号,成绩)
这三个关系之间也存在着属性的引用,即选秀关系引用了学生关系的主码“学号”和课程关系的主码“课程号”。同样,选修关系中的”学号“值必须是确实存在的学生的学号,即学生关系中有该学生的记录;选修关系中的”课程号“值也必须是确实存在的课程的课程号,即课程关系中有该课程的记录。
定义:设F是基本关系R的一个或一组属性,但不是关系R的码。如果F与基本关系S的主码Ks相对应,则称F是R的外码,并称基本关系R称为参照关系(Referencing Relation);基本关系S称为被参照关系(Referenced Relation) 或目标关系(Target Relation)。
显然,目标关系S的主码Ks和参照关系R的外码F必须定义在同一个(或同一组)域上。需要指出的是,外码并不一定要与相应的主码同名。
参照完整性规则:
若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:或者取空值(F的每个属性值均为空值) ,或者等于S中某个元组的主码值;
2.3.3 用户定义的完整性
用户定义的完整性是针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求;例如:学生表中的学生不能没有姓名,课程表中的课程不能没有课程名。
关系模型应提供定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,而不需由应用程序承担这一功能;
2.4 关 系 代 数
略
2.5 关 系 演 算
略