🎈目录🎈
关系数据库简介
1970年IBM公司的E.F.Codd提出关系数据模型
1972年提出了关系的第一、第二、第三范式
1974年提出了关系的BC范式
80年代后,关系数据库系统成为最重要、最流行的数据库系统
2.1 关系数据库结构及形式化定义
2.1.1 关系
单一的数据结构——关系
现实世界的 实体 以及实体间的各种 联系 均用关系来表示。
逻辑结构——二维表
从用户角度,关系模型中数据的逻辑结构是一张 二维表,关系模型是建立在 集合代数 的基础上。
1.域
【定义】 域是一组具有相同数据类型的值的集合。
【例】整数、实数、介于某个取值范围的整数、指定长度的字符串集合、{“男”,“女”} 等等。
2.笛卡尔积
【定义】给定一组域D1,D2,...,Dn,这些域可以是相同的。D1,D2,...,Dn的笛卡尔积为:
D1*D2*...*Dn = {(d1,d2,...,dn) | di ∈ Di , i = 1,2,...,n} 。所有域的所有取值的一个组合。
【例】D1 = 导师集合 SUPERVISOR = {张清玫,刘逸},
D2=专业集合SPECIALITY = {计算机专业 , 信息专业} ,
D3 = POSTGRADUATE = {李勇,刘晨,王敏},
则D1, D2,D3的笛卡尔积为:D1*D2*D3 =
{(张清玫,计算机专业,李勇),(张清玫,计算机专业,刘晨),(张清玫,计算机专业,王敏),
(张清玫,信息专业,李勇),(张清玫,信息专业,刘晨),(张清玫,信息专业,王敏),
(刘逸,计算机专业,李勇),(刘逸,计算机专业,刘晨),(刘逸,计算机专业,王敏),
(刘逸,信息专业,李勇),(刘逸,信息专业,刘晨),(刘逸,信息专业,王敏)}
元组
笛卡尔积中的每一个元素(d1,d2,...,dn)称作一个n元组 或简称为 元组。
(张清玫,计算机专业,李勇)、(张清玫,计算机专业,刘晨)等都是元组。
分量
笛卡尔积元素(d1,d2,...,dn)中的每一个di称作一个分量。
张清玫、计算机专业等都是分量 。
基数
基数是针对于 域 来说的,简单的来说就是 域里面有几个值。
D1*D2*D3*...*Dn 的基数是 D1,D2,D3,...,Dn的每个域的基数之积。
笛卡尔积的表示方法:笛卡尔积可表示为一个二维表,表中的每行对应一个元组,表中的每列对应一个域(又可以叫属性,属性的取值范围叫域)。
【例】D1 = 导师集合 SUPERVISOR = {张清玫,刘逸},
D2=专业集合SPECIALITY = {计算机专业 , 信息专业} ,
D3 = POSTGRADUATE = {李勇,刘晨,王敏},
则D1, D2,D3的笛卡尔积为:
3.关系
(1)关系
D1*D2*...*Dn 的 子集 称作在 域D1,D2,...Dn 上的关系,表示为 R(D1,D2,...,Dn)。
R表示关系名,n表示关系的目或度,也就是属性的个数。
(2)元组
关系中的每个元素是关系中的元组,通常用t表示。
(3)单元关系与二元关系
当n=1时,称该关系为单元关系,或一元关系;当n=2时,称该关系为二元关系。
(4)关系的表示
关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域,一个属性。
(5)属性
关系中不同列可以对应相同的域,为了加以区分,必须对每列起一个名字,称为属性。
n目关系必有n个属性。
(6)码
候选码:若关系中的某一属性组的值能唯一的表示一个元组,则称该属性组为候选码。
简单的情况:候选码只包含一个属性。
全码:最极端的情况:关系模式的所有属性组为这个关系的候选码,称为全码。
主码:若一个关系有多个候选码,则选定其中一个为主码。
主属性:候选码的属性称为主属性。
非主属性:除了主属性以外的就是非主属性。
【说明】笛卡尔积的子集不是都具有实际含义,只有某个子集才有实际含义。
(7)三类关系
- 基本关系(基本表或表):实际存在的表,是实际存储数据的逻辑表示。
- 查询表:查询结果对应的表。
- 视图表:由基本表或其他视图导出的表,是虚表,不对应实际存储的数据。
(8)基本关系的性质
- 列是同质的。
- 不同的列可出自同一个域,其中的每一列成为一个属性,不同的属性要给予不同的属性名。
- 列的顺序无所谓,列的次序可以任意交换。
- 任意两个元祖的候选码不能相同。
- 行的顺序无所谓,行的次序可以任意交换。
- 分量必须取原子值,这是规范条件中最基本的。
2.1.2 关系模式
1.什么是关系模式
关系模式 是对关系的描述。关系模式是型,关系是值。
(1)元组集合的结构
属性构成、属性来自的域、属性与域之间的映像关系。
(2)一个关系通常由赋予它的元组语义确定。
(3)现实的世界中还存在着完整性约束。
2.定义关系模式
关系模式可以形式化的表示为:R(U,D,DOM,F)
R:关系名
U:组成该关系的属性名集合
D:属性组U中属性所来自的域
DOM:属性向域的映像集合
F:属性间的数据依赖关系集合
3.关系模式与关系
关系模式是静态的、稳定的。
关系是动态的、随时间不断变化的。
关系是关系模式在某一时刻的状态或内容,在实际工作中关系模式和关系往往统称为关系,需要通过上下文加以区别。
2.1.3 关系数据库
1.关系数据库
在一个给定的应用领域中,所有关系的集合构成一个关系数据库。
2.关系数据库的型与值
- 关系数据库的型:关系数据库模式,对关系数据库的描述。
- 关系数据库模式:若干域的定义,在这些域上定义的若干关系模式。
- 关系数据库的值:关系模式在某一时刻对应的关系的集合,简称为关系数据库。
2.1.4 关系模型的存储结构
1.有的关系数据库管理系统中一个表对应一个操作系统文件,将物理数据组织交给操作系统完成。
2.有的关系数据库管理系统从操作系统那里申请若干个大的文件,自己划分文件空间,组织表、索引等存储结构并进行存储管理。
2.2 关系数据结构
2.2.1 基本关系操作
一、常用的关系操作
查询:选择、投影、连接、除、并、交、差等,
其中:选择、投影、并、差、笛卡尔积是5种基本操作。
数据更新:插入、删除、修改。
查询的表达能力是其中最主要的部分。
二、关系操作的特点
集合操作方式:操作的对象和结果都是集合,一次一集合的方式。
2.2.2 关系数据库语言的分类
一、关系代数语言
用对关系的运算来表达查询要求。代表:ISBL。
二、关系演算语言
用谓词来表达查询要求。
- 元组关系演算语言:谓词变元的基本对象是元组变量。代表:APLHA,QUEL。
- 域关系演算语言:谓词变元的基本对象是域变量。代表:QBE。
三、具有关系代数和关系演算双重特点的语言
代表:SQL。
2.3 关系的完整性
关系模型 中有三类完整性约束:实体完整性、参照完整性和用户自定义的完整性。
其中 实体完整性、参照完整性 是关系模型必须满足的完整性约束条件,称为关系的两个不变性;
用户自定义的完整性 是应用领域需要遵循的约束条件,体现了具体领域中的语义记录。
2.3.1 实体完整性
实体完整性规则 是指若属性A是基本关系R的主属性,则属性A不能取空值。
空值 就是“不知道” 或 “不存在” 或“无意义”的值。
实体完整性规则的说明:
- 实体完整性规则 是针对基本关系而言的。一个基本表通常对应现实世界的一个实体集。
- 现实世界中的实体是可以区分的,即它们具有某种唯一确定的标识。
- 关系模型中以主码作为唯一性标识。
- 主码中的属性 即主属性不能取空值。
主属性取空值,就说明存在某个不可标识的实体,即存在不能区分的实体,这是不可能的,因此这个规则称为 实体完整性。
【注意】:实体完整性规则 规定 基本关系的所有主属性都不能取空值。
【例】选修(学号,课程号,成绩)
“学号,课程号” 为主码,则 学号和课程号 两个属性都不能取空值。
2.3.2 参照完整性
1.关系间的引用
在关系模型中实体及实体间的关系都是用 关系 来描述的,存在着 关系与关系 间的引用。
【例】学生实体、专业实体。学生(学号,姓名,性别,专业号,年龄) 专业(专业号,专业名)。 学生关系引用了专业关系的主码 “专业号”。 学生关系中的 “专业号” 值必须是存在的专业的专业号,即专业关系中有该专业的记录。
【例】学生、课程、学生与课程 之间的 多对多关系。 学生(学号,姓名,性别,专业号,年龄)课程(课程号,课程名,学分)选修(学号,课程号,成绩)
学号 | 课程号 | 成绩 |
801 | 04 | 92 |
801 | 03 | 78 |
801 | 02 | 85 |
802 | 03 | 82 |
802 | 04 | 90 |
803 | 04 | 88 |
【例】学生实体及其内部的一对多联系。 学生(学号,姓名,性别,专业号,年龄,班长)
“学号” 是主码,“班长” 是外码,他引用了本关系的“学号”, “班长” 必须是确实存在的学生的学号。
2.外码
【定义】设F是基本关系R的一个或一组属性,但不是关系R的码。如果F于基本关系S的主码Ks相对应,则称F是基本关系R的外码。
基本关系R称为 参照关系。
基本关系S称为 被参照关系 或 目标关系。
【例】选修关系的 “学号” 与学生关系的主码 “学号” 相对应;选修关系的 “课程号” 与课程关系的主码 “课程号” 相对应。则: “学号” 和 “课程号” 是选修关系的外码;学生关系和课程关系均为被参考关系;选修关系为参照关系。
【例】“班长” 与本身的主码“学号” 相对应,则:“班长”是外码,学生关系即是参照关系也是被参照关系。
【说明】
- 关系R和S不一定是不同的关系。(比如说 班长 和 学号 的关系,可能是同一个表)
- 目标关系S的主码Ks和参照关系的外码必须定义在同一个(或一组)域上。(比如说 它专业号是01...,那么专业表 的 专业号 应该也是01...,要不然取不到 参照 的作用)
- 外码不一定要与相应的主码同名,当外码与相应的主码属于不同关系时,往往取相同的名字,以便于识别。
3.参照完整性规则
参照完整性规则:若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的该值必须是值必须为:
或者取空值(F的每个属性均为空值);或者等于S中某个元组的主码值。
【例】学生关系中每个元组的 “专业号” 属性只取两类值。
(1)空值,表示尚未给该学生分配专业;
(2)非空值,这是该值必须是专业关系中的某个元组的 “专业号” 值,表示该学生不可能分配一个不存在的专业。
【例】选修(学号,课程号,成绩)。“学号” 和 “课程号” 可能的取值:
(1)选修关系中的主属性,不能取空值;
(2)只能去相应被参照关系中已经存在的主码值。
【例】学生(学号,姓名,性别,专业号,年龄,班长) 。“班长” 属性值可以取两类值:
(1)空值,表示该学生所在班级尚未选出班长;
(2)非空值,该值必须是本关系中某个元组的学号值。
2.3.3 用户定义的完整性
针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求。
关系模型 应提供定义 和 检验 这类完整性的机制,以便用统一的系统的方法处理它们,而不要由应用程序承担这一功能。
【例】课程(课程号,课程名,学分)
“课程号” 属性必须取唯一值,非主属性 “课程名” 也不能取空值,“学分” 属性只能取值{1,2,3,4}。
2.4 关系代数
关系代数是一种抽象的查询语言,是对关系的运算来表达查询。
关系代数的运算对象是关系,运算结果也是关系。
关系代数按运算符的不同可分为 传统的集合运算 和 专门的关系运算 两类。
集合运算 是从关系的水平方向 即行的角度进行,如:并、差、交、笛卡尔积。
专门的关系运算 不仅涉及行而且涉及列,如:选择,投影,连接,除。
2.4.1 传统的集合运算
1.并
关系R和S具有相同的目n(即两个关系都有n个属性),相应的属性取自同一个域。
R与S的 并运算表示为 R∪S:R∪S = { t | t ∈R ∨ t ∈ S } 。
运算结果为:n目关系,由属于R或属于S的元组组成。
【例】关系R和关系S的并运算。
2.差
关系R和S具有相同的目n(即两个关系都有n个属性),相应的属性来自同一个域。
R与S的 差运算表示为 R-S:R-S = { t | t ∈R ∧ t ∉ S } 。
运算结果为:n目关系,由属于R而不属于S的元组组成。
【例】关系R和关系S的差运算。
3.交
关系R和S具有相同的目n(即两个关系都有n个属性),相应的属性来自同一个域。
R与S的 交运算表示为 R∩S:R∩S = { t | t ∈R ∧ t ∈ S } 。
运算结果为:n目关系,由既属于R又属于S的元组组成。
【例】关系R和关系S的交运算。
4.笛卡尔积
严格地讲应该是广义的笛卡尔积。
R:n目关系,K1个元组。 S:m目关系,K2个元组。
R与S的笛卡尔积运算表示为R×S:
运算结果为:行:K1 × K2 个元组, 列:(n+m)列 元组的集合,其中元祖的前n列是关系R的一个元组,后m列是关系S的一个元组。
【例】关系R和关系S的笛卡尔积。
2.4.2 专门的关系运算
关系运算包括:选择、投影、连接、除运算。
相关记号说明:
(1)关系模式为R(A1,A2,...,An),它的一个关系为R,t∈R表示t是R的一个元组。t[Ai]则表示元组t中相应于属性Ai的一个分量。
(2)若 A = {Ai1,Ai2,...,Aik} 中Ai1,Ai2,...,Aik是A1,A2,...,An中的一部分,则A称为属性列或属性组。t[A] = ( t[Ai1] , t[Ai2] , ... , t[Aik] ) 表示元祖t在属性列A上诸分量的集合。┐A 则表示{ A1 , A2 , ... , An} 中去掉 { t[Ai1] , t[Ai2] , ... , t[Aik] } 后剩余的属性组。
(3)类似于 笛卡尔积:
(4) 这个比较重要:
【例】求 x1、x2、x3 在关系R 上的象集。
(5)学生-课程数据库:学生关系Student、课程关系Course和选课关系SC。(这三张关系表也非常重要,后面都需要用到 )
学号 Sno | 姓名 Sname | 性别 Ssex | 年龄 Sage | 所在系 Sdept |
201215121 | 李勇 | 男 | 20 | CS |
201215122 | 刘晨 | 女 | 19 | CS |
201215123 | 王敏 | 女 | 18 | MA |
201215125 | 张立 | 男 | 19 | IS |
课程号 Cno | 课程名 Cname | 先行课 Cpno | 学分 Ccredit |
1 | 数据库 | 5 | 4 |
2 | 数学 | 2 | |
3 | 信息系统 | 1 | 4 |
4 | 操作系统 | 6 | 3 |
5 | 数据结构 | 7 | 4 |
6 | 数据结构 | 2 | |
7 | PASCAL语言 | 6 | 4 |
学号 Sno | 课程号 Cno | 成绩 Grade |
201215121 | 1 | 92 |
201215121 | 2 | 85 |
201215121 | 3 | 88 |
201215122 | 2 | 90 |
201215122 | 3 | 80 |
1.选择
选择又称为限制。在关系R中选择满足给定条件的诸元组,记作:
其中:F为选择条件,基本形式为:X1 θ Y1 。
其中, θ 表示比较运算符,它可以是>,≧,<,≦,=或 < >(这个符号是数据库中的 不等于) 。X1,Y1 等是属性名,或为常量,或为简单函数;属性名可用它的序号来代替(不过不是特别常见)。R:哪个表里面的。
条件表达式中的运算符如下表:
【例】查询信息系(IS系)全体学生。
【例】查询年龄小于20岁的学生。
2.投影
从R中选择出若干属性列组成新的关系。
其中:A : 要想展示出来的属性列 。 R:哪个表里面的。 投影操作主要是从列的角度进行运算,投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组(避免记录重复)。
【例】查询学生的姓名和所在系,即求Student关系上学生姓名和所在系两个属性上的投影。
【例】查询学生关系Student中都有哪些系。
3.连接
又称为 θ连接,表示从两个关系的笛卡尔积中选取属性间满足一定条件的元组。
A和B:分别为R上和S上度数相等且可比的属性组。
θ:比较运算符。
运算结果:从R和S的广义笛卡儿积 R × S 中选取(R关系)在A属性组上的值与(S关系)在B属性组上值满足比较关系 θ 的元组。
两类常用连接运算:
(1)等值连接
θ 为 " = "的连接运算 为 等值连接。
等值连接的含义:从关系R与S的广义笛卡儿积中选取A、B属性值相等的那些元组。
(2)自然连接
自然连接是一种特殊的等值连接,两个关系中进行比较的分量必须是相同属性组,在结果中把重复的属性去掉。
自然连接的含义:R和S具有相同的属性组B。
【注意】自然连接还需要取消重复列,所以是同时从行和列的角度进行运算。
【例】运算关系R和关系S的一般连接
【例】运算关系R和关系S的等值连接
【注意】如上所示,等值连接中,R.B和S.B两个必须都要写在表格里。
【例】运算关系R和关系S的自然连接
【注意】如上表,自然连接中,就只写了一个B。
悬浮元祖:两个关系R和S在自然连接时,关系R和S中被舍弃的元组称为悬浮元祖。
外连接:如果把悬浮元祖舍弃的元组也保存在结果关系中,而在其他属性上填空值(NULL),这种连接就叫做外连接。
左外连接:如果只保留左边关系R中的悬浮元祖叫做左外连接。
右外连接:如果只保留右边关系S中的悬浮元祖叫做右外连接。
【例】运算关系R和关系S的外连接。
【例】运算关系R和关系S的左外连接和右外连接。
4.除 ( 相对来说使用的比较多 )
给定关系R(X,Y)和S(Y,Z),其中X,Y,Z为属性组,R中的Y与S中的Y可以有不同的属性名,但必须有相同的域集。
R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在X属性列上的投影:
元组在X上分量值X的象集Yx包含S在Y上投影的集合,记作:
Yx : x在R中的象集,x = tr[X] 。
【注意】除操作是同时从行和列的角度进行运算。
【例】关系R、S的除运算 R ÷ S
以学生-课程数据库为例,给出几个综合应用多种关系代数运算进行查询的例子。
【例】查询至少选修1号课程和3号课程的学生号码。
首先建立一个临时关系K:
然后求:
求解过程:先对SC关系的(Sno,Cno)属性上投影,然后逐一求出每一学生(Sno)的象集,并以此检查这些象集是否包含K。
【例】查询选修了2号课程的学生 的学号。
【例】查询选修了全部课程的学生号码和姓名。
2.5 *关系演算
【注意】关系演算部分的话暂时不会做特别的要求,关系演算部分的要求主要使用在一些理论上的推导、研究,在实际应用的时候都会在 第3章 的SQL语言当中给大家介绍,所以这部分就暂时不研究了(以后若是有时间的话就会把笔记记上去)。