数据库课程--ch2 关系数据库
课程引入:
2.1 关系数据结构的形式化定义
2.1.1 关系
在用户看来,关系模型的数据结构为一张扁平的二维表。
域(domain):
定义:域是一组具有相同数据类型的值的集合。
实质:一个域就是一个集合,例如:{1,2} 等
笛卡尔积:
定义:
笛卡尔积可以形成一张二维表,表中的每一行代表一个元组,表中的每一列来自一个域。
笛卡尔积得到的元组个数就是基数,等于每个域的基数乘积。
关系:
关系的定义:
换句话说,从二维表的各个元组中选取几个互不冲突的组成一个新的二维表就是关系。
属性:关系表中的每一列都是一个域,为了区分,就要取名,这就是属性。n目关系就是n个属性。
候选码:若一个属性组可以在众多元组里唯一标识一个元组,则该属性组称为候选码。
主码:若一个关系有多个候选码,则选定一个为主码。
主属性:候选码的每一个属性称为主属性,不包含在候选码里的属性称为非主属性。
关系是一个真子集:笛卡尔积是没有实际含义的,它的一个真子集才有实际含义。
基本关系的性质:
2.1.2 关系模式
数据库要分型和值,在关系数据库里,关系模式是型,关系是值。
关系模式:关系的描述称为关系模式。
表示形式化:R(U,D,DOM,F)
(我们下面重点介绍R(U)或者R(A….))
R:关系名
U:组成该关系的属性名集合
D:为U中属性来自的域
DOM:属性向域的映像集合
F:为属性间数据的依赖关系集合。
关系模式与关系的区别:
关系是关系模式在某一个时刻的状态或内容。关系模式是静态的、稳定的,而关系是动态的、随着时间变化的。
2.1.3 关系数据库
2.1.4 关系模型的存储结构
2.2 关系操作
关系数据库通过关系数据语言实现关系操作。
2.2.1 基本的关系操作
关系模型常用的关系操作有:
- 查询:操作的主要部分,可分为选择、投影、连接、除、并、差、交、笛卡尔积等。(加粗部分为基本操作,其余操作可以通过基本操作定义和导出)
- 插入、删除、修改操作
关系操作的特点:集合操作方式,即操作的对象和结果都是集合。简称一次一集合方式。
关系数据语言的分类
红框是本课程重点学习的部分。
2.3 关系的完整性约束
前面我们已经知道,关系是一个动态的、不断变化的集合。但任何关系在任何时刻都应该满足一些语义约束,这些约束条件是就是模型的完整性规则。
2.3.1 实体完整性
规则2.1 实体完整性规则:若属性A是基本关系R的主属性,则A不能取空值。
举个例子:
可见,判断关系是否满足实体完整性规则,最重要的一步就是要判断一个关系的主码,主码之中的所有属性都是不可为空的。
实体完整性的规则说明:
2.3.2 参照完整性
在具体介绍参照完整性之前,我们要先来介绍几个定义,就想在介绍实体完整性之前我们已经介绍过候选码(主码)。
根据上面的定义,我们可以很明确的知道外码、参照关系、被参照关系这几个术语的含义。
需要注意的是,参照关系和被参照关系必须定义在同一个域上。
举三个例子来进一步认识这几个定义:
例1:(两个关系之间)
例2:(多个关系之间)
例3:(关系内部)
上三例的示意图:
规则2.2 参照完整性规则:若属性F是基本关系R的外码,其与基本关系S的主码k对应,对应R中每个元组在F上的值:
或者取空值
或者等于S中某个元组的主码值
3.3.3 用户定义的完整性
上述两个完整性是所有数据库系统都要支持的。不同的关系数据库还要根据其应用环境的不同,增加一些特殊的约束条件。
2.4 关系代数
关系代数是一种抽象的查询语言,它用对关系的运算来表达查询。
运算的三要素:
运算对象
、运算结果
、运算符
。在关系运算中,运算对象和运算结果都是关系。而运算符有很多,下面我们具体来说一下。
在关系运算中,运算符大概包含以下几种:
2.4.1 传统的集合运算符
如上图所示,集合运算符有4个:交、并、差、笛卡尔积。
下面具体介绍一下这4种运算符:(注意标红部分)
这4个运算符已经是老生常谈了,各种运算规则大家也应该了然于心了。不过这里需要注意的是集合中的元素是元组,而不是单个元素了。而元组在关系里是一个列表的一行。
2.4.2 专门的关系运算
选择
、投影
、连接
、除运算
4大类。
在正式介绍这4个关系运算符之前,我们先给出几个记号。包括:属性组、元组连接、象集等,其中象集是一个比较难理解的概念,并且在后面的除运算中有很大作用。
我们给出这些记号是为了下面介绍关系运算符时便于使用记号表示这些运算符的具体作用,当然这些记号更多是出于严谨性,对于我们学生来说,更多的是应用,即给出例子可以得到运算答案。
我们下面的运算符介绍也更多的给出例子,便于理解和记忆。
第一个运算符:选择(selection)
重点把握:选择是对于一个关系来说的,是对关系的行的操作,即从多个元组中选取符合条件的元组组成一个新的关系。新生成的关系属性数目不会变少。
定义:
举个例子:
可见,选择后的结果也是一个关系。是从原关系中选取符合条件的元组。
第二个运算符:投影(projection)
重点把握:选择是对关系的列的操作,得到的结果也是关系,并且其元组个数与原关系一致。这个运算一般用于删除不相干属性。
定义:
例子:
需要注意的是,如果投影后得到的关系有重复的元组项,会进行消除,使得元素唯一。
第三个运算符:连接(join)
重点把握:要分清楚连接的类型。具体分类可见下图。
连接运算一般用于把多个关系关联起来,因为选择和投影都是针对单个关系。
定义:
例子:
上例是很容易理解:我们在进行连接时,先不用去管是什么连接。第一步要先得出两个关系的笛卡尔积,得到一个基数相乘的大关系;第二步就是根据我们的连接类别从大关系中进行选取、删除等操作。其中,对于自然连接,在操作是只需要关注两关系的相同属性即可。
自然连接又可以根据是否保留悬浮元组分成外连接和非外连接。下面具体介绍:
定义介绍:悬浮元组
所谓悬浮元组,就是在比较公共属性上值相等的元组时,二者特有的分量值,没有相匹配的项。例如上例中,R关系的第4个元组、S关系的第五个元组。
外连接:(左外连接、右外连接)
第四个运算符:除运算(division)
重点把握:
定义:
举个例子:
前面我们讲到了选择和投影运算,使用这两个运算符的组合已经可以精确查找到需要的数据,那么为什么还需要除运算呢?下面这个例子可以帮你解疑》
可知,对于‘至少’这种查询,使用除运算可以简化步骤。
在学习完几种关系运算后,进行一个总结。
看例子:
几个关键点:
- 1、使用投影运算可以简化关系,删除没用到的属性。并且可以在最后一步进行特定数据的选取。
- 2、使用连接可以将多个关系连接,找到其中公共属性相同的元组。可以先使用投影删除不必要属性后再进行连接。
- 3、涉及到一个属性的多个值时,可以使用除运算。注意经过除运算后的关系其属性列的变化,也可先使用投影删除不必要属性。
- 4、对于涉及到多个表的题目,直接先连接(根据相同属性)把题目提到的条件全部放到一个关系里,再进行选择、投影。
- 5、基本运算与其他运算的推出:https://blog.csdn.net/weixin_41244934/article/details/104782790