第二章、关系数据库
关系数据库简介

2.1、关系数据结构及形式化定义
2.1.1、关系
1、单一的数据结构——关系
2、逻辑结构——二维表
3、关系模型是建立在集合代数的基础上
1、相关定义
1、域(Domain)
1、属性的取值范围
2、就是列
2、笛卡尔积(Cartesain Product)
1、定义

3、元组(Tuple)
1、就是二维表中的一行
4、分量(Compoent)
1、笛卡尔积元素(d1,d2,……,dn)中的di个称为分量
5、基数(Cardinal number)
1、介绍

2、就是取值范围能取几个数
6、笛卡尔积的表示方法
1、笛卡尔积可以表示为一个二维数组表
2、表中每一行对应一个元组
3、每一列对应一个域
4、例子

2、关系(Relational)
1、关系
1、R(D1,D2……,Dn)
2、其中R表示关系名
3、n表示关系的目数,就是个数
2、元组
1、每个元素是关系中的元组,通常用t表示
3、单元关系与二元关系
1、n=1时:单元关系
2、n-2时:二元关系
4、关系的表示
1、关系是一个二维表
2、每行对应一个元组
3、每列对应一个域
4、一个属性
5、属性
1、为了区别相同的域,所以列对应的名字就叫属性
2、n有几个,属性就有几个
6、码
1、候选码(Candidate key):唯一地标识一个元组,简单情况:候选码只包含一个属性
2、全码(All-key):极端情况:关系模式的所有属性组称为一个关系模式的候选码
3、主码:若有多个候选码,则选定其中一个为主码(Primary key)
4、主属性:候选码的诸属性称为主属性
5、非主属性:不包含在任何候选码中的属性、或非码属性
6、例子
1、笛卡尔积的子集并不是都有实际意义
2、例子

7、三类关系
1、基本关系:实际存在的表,是实际存储数据的逻辑表示
2、查询表:查询结果对应的表
3、视图表:由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据
8、基本关系的性质
1、列是同质的(Homogeneous)
2、不同的列可能出自同一个域,其中的每一个列称一个属性,不同的属性要基于不同的属性名,(例如:学生和性别不是同一列,但都是汉字类型的这个域)
3、列的顺序是无所谓,列的次序可以交换
4、任意两个元组的候选码不能相同(例如两个身份证号不能相同)
5、行的顺序无所谓,行的次序可以交换
6、分量必须取原子值,规范条件中最基本的一条
2.1.2、关系模式
1、什么是关系模式
1、是对关系的描述(关系模型就像模具)
1、元组集合的结构
1、属性结构、属性来自域、属性与域之间的映象关系
2、一个关系通常由赋予它的元组语义确定
3、现实的世界中还存在的完整性约束
2、定义关系模式
1、内容

3、关系模式与关系
1、关系模式是静态的稳定的(类似表头)
2、关系是动态的、随时间不断变化(类似表中数据)
3、根据某一时刻的状态或内容,在实际开发中开发问问称为关系,需要上下文加以辨别
2.1.3、关系数据库
1、关系数据库
1、给定的应用领域中,所有关系的集合构成的关系数据库
2、关系数据库的型与值
1、关系数据库的型
1、关系数据库模式、对关系数据库的描述
2、关系数据库的模式
1、若干域的定义,在这些域上定义的一个若干关系模式
3、关系数据库的值
1、关系模式在某一刻对应的关系的集合,简称关系数据库
2.1.4、关系模型的存储结构
1、有的关系数据库管理系统中:一个表对应一个操作系统文件,将物理数据
2、有的关系数据库管理系统从操作系统那里申请若干个大文件,自己划分文件空间,组织表,索引等存储结构,并进行存储管理
2.2、关系数据结构
2.2.1、基本关系操作
1、常用的关系操作
1、查询:选择、投影、连接、除、并、交、差等
❗2、其中选择、投影、并、差、笛卡尔积5种基本操作
3、数据更新:插入、修改、删除
4、查询的表达能力是其中最主要的部分
2、关系操作的特点
1、集合操作方式:操作的对象和结果都是集合,一次集合一次方式
2.2.2、关系数据库语言的分类
1、关系代数语言
1、对关系的运算来表达查询要求。代表ISBL
2、关系演算语言
1、用谓词(例如真假)来表达查询要求
2、元组关系演算语言:谓词变元的基本对象是元组,代表:APLHA、QUEL
3、域关系演算语言:谓词变元的基本对象是域变量,代表QBF
3、具有关系代数和关系演算双重特点的语言
1、代表:SQL(Structured Query Language)
2.3、关系的完整性
1、关系模型中有三个完整性约束:实体完整性、参照完整性、用户定义的完整性
2、其中实体完整性、参照完整性是关系模型必须满足的完整性约束条件,称为关系的两个不变性
3、用户定义的完整性是应用领域需要遵循的约束条件,体现了具体领域中的语义约束
2.3.1、实体完整性
1、实体完整性规则:是指若属性A是基本关系R的主属性,则A不能取空和相同(例如:A为父类,R为子类, A不能为空)
1、实体完整性规则的说明
1、是针对基本关系而言,一个基本表通常对应现实世界的一个实体集
2、现实世界中的实体是可区分的,即它们具有某种唯一性的表示
3、关系模型中以主码作为唯一性标识
4、主码中的属性即主属性不能取空值
2.3.2、参照完整性
1、关系间的引用
1、在关系模型中实体及实体间都是用关系描述的,存在着关系与关系间的引用
2、外码(Foreign Key)
1、 内容

2、例子

解释:S2中的专业号是主码,S1专业号不是主码,S1和S2连接靠专业号,所以S1 中的专业号是外码
3、例子

3、说明
1、关系R和S不一定是不同的关系
2、目标关系S的主码Ks和参照关系的外码F必须定义在同一个(或一组)域上
3、外码不一定要与之相对应的主码同名
4、当外码与响应的主码属于不同关系时,往往取相同的名字,便于识别
4、参照完整性规则
1、内容

2.3.3、用户定义的完整性
1、内容
1、针对某一具体关系数据库的约束条件,反映某一具体应用所设计的数据必须满足的语义要求
2、关系模型应提供定义和检验这类完整性的机制,以便用同一的系统的方法处理,而不要有程序承当这一功能
2.4、关系代数
2.4.1、介绍
1、关系代数是一种抽象的查询语句,是对关系(表)的运算来表达查询
2、关系代数的运算对象是关系,运算结果页是关系
3、按运算符可分为传统的集合运算、专门的关系运算
4、集合运算:从关系的水平方向,即行的角度进行
5、专门的关系运算:涉及行和列
6、内容
2.4.2、传统的集合运算
1、并(Union)
1、 关系R和S有相同的n(n个属性),属性都来自同一个域
2、R与S的并运算表示:RUS
3、结果:n目关系,由属于R或属于S的元组组成(把不相同的放在一起,相同的只留一个)
4、

2、差(except)
1、1、 关系R和S有相同的n(n个属性),属性都来自同一个域
2、R与S的原酸表示:R-S
3、运算结果:n目关系,由属于R而不属于S的所有元组组成
4、例子

3、交(intersection)
1、关系R和S有相同的n(n个属性),属性都来自同一个域
2、R与S的交运算表示:R ∩ S
3、运算结果:n目关系,既属于R又属于S的元组组成
4、笛卡尔积(Cartesian Product)
1、是广义的笛卡尔积
2、R:n目的关系(列),k1个元组(行)
3、S:m目关系(列),k2个元组
4、R与S的笛卡尔积运算表示:R X S
5、运算结果:行:k1*k2个元组;列:(m+n)列 元组的集合
6、其中元组的前n列是关系R的一个元组,后m列是关系S的一个元组
7、例子

2.4.3、专门的关系运算
1、内容
1、关系运算包括
1、选择、投影、连接件、除运算
2、相关标记说明
1、内容

2、例子

3、选择(Selection)
1、内容

2、条件表达式中的运算符

3、例子

2、投影(Projection)
1、从R中选择若干属性列组成新的关系
2、公式表达解释

3、例子

3、连接(Join)
1、又称为θ连接,表示从两个关系笛卡尔积中选取属性间满足一定条件的元组
2、公式

3、运算结果:从R和S的广义笛卡尔积R*S中选取(R关系)在A属性组上的值与(S关系)在B属性组上值满足比较关系θ的元组
2、两类常用连接
1、等值连接
1、θ为“=”的连接运算称为等值连接
2、等值连接的含义:从关系R与S的广义笛卡尔积中选取A、B属性值相等的那些元组
2、自然连接
1、是特殊的等值连接,两个连接中进行比较的分量必须是相同属性组,在结果中重复的属性列去掉
2、含义:R与S具有相同的属性组B
3、注意:自然连接还需要取消重复列,所以是同时和行和列的角度进行运算
3、例子
1、例子1

4、悬浮元组
1、两个关系R与S在自然连接时,关系R与S中被舍弃的元组称为悬浮元组
5、外连接
1、如果把悬浮元组舍弃的元组也保存在结果关系中,在其他属性上填空值(Null),这种连接就叫做外连接(OUTER JOIN)
6、左外连接
1、如果只保留左外关系R中的悬浮元组叫做左外连接
7、右外连接
1、如果只保留右边关系S中的悬浮元组叫做有外连接
2、例子

3、除运算
1、内容
1、关系R(X,y)和S(Y,Z),其中X,Y,Z为属性组,R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域
2、R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在X属性列上的投影
3、格式

2、例子

1、先找出R与S中不同的A,找到所有A的象集,再将A的象集和S中与R相同域的元素对比,如果象集包含所有的元素,就是除的结果
2、例子

2.5、关系演算
1、是以数理逻辑中的谓词演算为基础,按谓词变元的不同,关系演算可以分为元组关系演算和域关系演算
2.5.1、元组关系演算语言ALPHA
1、元组关系演算以元组变量为谓词变元的基本对象,一种典型的元组关系演算语言是ALPHA
2、ALPHA语言主要有:
GET/PUT/HOLD/UPDATE/DELETE/DROP
1、语句的基本格式
1、格式:操作语句 工作空间名(表达式):操作条件
2、表达式:用于说明查询的结果,可以是关系名或(和)属性名
3、操作条件:一个逻辑表达式,说明查询结果要满足的条件,用于将操作结果限定在满足条件的元组中
4、还可以加上排序要求
2、检索操作(查询)
1、用GET语句
1、简单检索
1、不带条件的检索
2、例子

2、限定的检索
1、带条件
3、带排序的检索
1、带条件,还有排序功能
2、DOWN表示降序
3、UP表示升序
4、例子

4、指定返回元组的个数
1、就是指定返回几行
2、例子

5、用元组变量的检索
1、就是给元组(行)取个名(sql中用AS)
2、作用:可以简化关系名
3、操作条件中使用量词时必须用元组变量,ALPHA语言用RANGE来说元组变量
4、例子

6、用存在量词(existential quantifier)的检索条件中使用量词时必须用元组变量
1、存在量词
1、例子

2、例子

7、带多个关系的表达式检索
1、把题目中所需要的关系属性给连接起来(表与表连接起来),再进行判定关系
2、例子

8、用全称量词(generality quantifier)的检索
1、例子

9、用两种量词的检索
1、例子

10、蕴含
1、根据理论P—>推出q,充分条件
2、例子:p:我来过北京,q:我来过中国
3、例子

11、聚集函数
1、进行简单计算,关系数据库建立了运算的函数库,通常叫内置函数,聚集函数
2、包括:COUNT/TOTAL/MAX/MIN/AVG
3、功能

3、更新操作
1、修改操作
1、使用UPDATE语句
2、步骤:
①首先用HOLD语句将修改的元组从数据库读入工作空间(HOLD有加锁功能)
②用宿主语句修改工作空间中元组的属性值
③最后用Update语句将修改后的元组送回数据库
3、注意:UPDATE语句,一定要yonHOLD语句锁定,避免其他管理员修改产生错误
2、修改操作说明
1、如果修改两个以上关系(表),就要执行两次HOLD-MOVE-UPDATE操作序列
2、在ALPHA语言中,修改关系的主码不允许修改
3、如果需要修改主码,必须先删除,然后重新插入主码
3、插入操作
1、用PUT语句实现
2、步骤
首先用宿主语言在工作空间中建立新元组
然后用 PUT 语句把该元组存入指定的关系中
3、PUT语句只对一个关系操作,表达式必须为单个关系名字
4、例子

4、删除
1、使用DELETE语句
2、步骤
用HOLD语句把删除的元组从数据库读取到工作空间中
用DELETE语句删除该元组
3、例子

4、例子

2.5.2、元组关系演算
1、假设关系(基数)是无限的,再进行演算做适当调整,要保证演算中每个演算的公式必须有限
2、表达式

其中t:是元组变量
1、原子公式有三类
1、R(t)
1、R是关系名
2、t是元组变量
3、意思:t是R中的元组
2、t[i]θu[j]
1、t和u是元组变量
2、θ是算术比较运算符,
3、t[i]θu[j]:表示断言
4、内容是:元组t的第i个分量与元组u的第j个分量满足比较关系θ
5、例子:t[2]<u[3] #其中t[2]表示第一行的第2个数据,u[3]表示的是u第一行的第三个数据
3、t[i]θc或cθt[i]
1、c是常量
2、内容是:t的第i个分量与常量c满足比较关系θ
2、自由元组变量/约束元组变量
1、自由元组变量
1、没有全称量词、或存在量词约束
2、约束元组变量
1、有全称量词或存在量词的约束
3、公式可以递归定义如下
1/2、内容

2、与:1、2同时为真,才为真
3、或:1、2其中一个慰问真就是真,两个是假才是假
4、非:1为真、2就为假,反之一样
3、若φ是公式则∃t(∮)也是公式
1、∃:存在量词符号
2、∃t(∮)表示:若有一个t使∮为真,则∃t(∮)为真,否则为假
4、 公式
1、内容

2、两个真才为真,一个假就是假
4、元组演算公式中,各种运算符的优先次序
1、内容
1、算术比较运算符最高
2、量词次之,且∃的优先级高于全称量词的优先级
3、逻辑运算符最低,且非的优先级高于∧(与)的优先级,∧(与)的优先级高于∨ (或)的优先级
4、加括号时,括号中的优先级,同一括号中,遵守①、②、③
2、注意
1、有限次第使用上述五条规则得到的公式是,元组公式,否则不是元组关系演算公式
3、关系代数运算—>关系表达式
1、关系代数运算可以用关系演算表达式来表示(相反也可以),下面用关系演算符表达式来表示五种基本运算
2、图示公式

3、例子

5、安全限制
1、内容
1、以上定义的关系演算允许无限关系,但是必须排除无意义的表达式
2、安全表达式:不生成无限关系的表达式,采取安全限制
3、安全限制:定义有限的集合,必须在在限定的范围内的查询数据
2.5.3、域关系演算语言QBE
1、内容
1、是另一种形式的域关系演算
2、1975年被踢出,1978年在IBM370上得以实现
3、基于屏幕表格的查询语句
4、QBE中用实例元素来查询结果可能的情况,示例元素实质上是域变量
2、QBE操作框架
1、图示

3、查询操作
1、简单查询
1、操作步骤

2、注意表格中有下划线的是一定要有该元素
3、没有下划线的表示条件
4、说明
①可以使用比较运算符
②其中=可以省略
2、条件查询
1、就是带比较运算符等条件
2、两个条件写一行,就是并的关系
3、两个条件写不同行,且查询条件不一样,就是或的关系
4、例子

5、例子2

①设计到两表连接
6、例子3

①对一个表格中的属性取反,就用表非符号
3、聚合函数
1、提供一些包装好的函数供使用
2、内容

3、例子

4、对查询结果排序
1、升序
AO(i).
#i为优先级
2、降序
DO(i).
#i为优先级
3、例子

4、更新操作
1、修改操作
1、格式
U.
2、主码不允许修改,要修改主码,和阿尔法语言一样
3、例子

4、例子

2、插入操作
1、格式
I.
2、新插入的元组必须有码值(主码必须有值)、其他属性值可以为空
3、例子

3、删除操作
1、格式
D.
2、删除就是整条记录,或表格删除
3、如果单独删除一个属性,那要用update操作
4、相关对照的其他表也应该删除(例如学生退学了,住宿、课程、等表都应该删除),保证数据的完整性
5、例子
