文章目录:
[关系模式(Relation Schema)](#关系模式(Relation Schema))
[1. 关系操作](#1. 关系操作)
[1.1 常用关系操作](#1.1 常用关系操作)
[1.2 关系操作的特点](#1.2 关系操作的特点)
[1.3 关系数据库语言的分类](#1.3 关系数据库语言的分类)
[2. 关系的完整性](#2. 关系的完整性)
[2.1 实体完整性](#2.1 实体完整性)
[2.2 参照完整性](#2.2 参照完整性)
[2.3 用户定义的完整性](#2.3 用户定义的完整性)
一、相关概念
单一的数据结构 ------ 关系:
现实世界的实体以及实体间的各种联系军用关系来表示。
逻辑结构 ------ 二维表:
从用户角度,关系模型中数据的逻辑结构是一张二维表,建立在集合代数的基础上。
域(Domain):一组具有相同数据类型的值的集合。
笛卡尔积(Cartesian Product):
给定一组域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={
(张清玫,计算机专业,李勇),(张清玫,计算机专业,刘晨),
(张清玫,计算机专业,王敏),(张清玫,信息专业,李勇),
(张清玫,信息专业,刘晨),(张清玫,信息专业,王敏),
(刘逸,计算机专业,李勇),(刘逸,计算机专业,刘晨),
(刘逸,计算机专业,王敏),(刘逸,信息专业,李勇),
(刘逸,信息专业,刘晨),(刘逸,信息专业,王敏) }
基数为2×2×3=12
笛卡尔积 ------> 不同集合内的元素进行排列组合
元组(Tuple):笛卡尔积中每一个元素(d1,d2,...,dn)叫作一个n元组(n-tuple)或简称元组。
分量(Component):笛卡尔积中每一个元素(d1,d2,...,dn)中的每一个值di叫作一个分量。
基数(Cardinal number):若Di(i=1,2,...,n)为有限集,其基数为mi(i=1,2,...,n),则D1×D2×...×Dn的基数M为:
笛卡尔积的表示方法:笛卡尔积可表示为一张二维表,表中的每行对应一个元组,表中的每列对应一个域。
例:上个例子的笛卡尔积用二维表表示:
关系(Relation):
D1×D2×...×Dn的子集叫作在域D1,D2,...,Dn上的关系,表示为R(D1,D2,...,Dn)。其中:
R为关系名
n为关系的目或度(Degree)------> 关系中属性的个数 ------> n目关系必有n个属性
关系中的元组:关系中的每个元素,通常用t表示
单元关系(Unary relation):n = 1
二元关系(Binary relation):n = 2
关系的表示:关系也是一个二维表,表的每一行对应一个元组,表的每一列对应一个属性,属性的取值为一个域。
属性(Attribute):关系中不同列可以对应相同的域,为了加以区分,必须对每列起一个名字,称为属性。
码(Key):一个具有特殊性质的属性,通过码可以唯一确定一行。
- 候选码(Candidate key):若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码;
- 全码(All-key):关系模式的所有属性组是这个关系模式的候选码,称为全码;
- 主码(Primary key):若一个关系有多个候选码,则选定其中一个为主码;
- 主属性(Prime attribute):候选码的诸属性称为主属性;
- 非主属性(Non-Prime attribute):不包含在任何侯选码中的属性称为非主属性或非码属性(Non-key attribute);
三类关系:
- 基本关系(基本表 / 基表):实际存在的表,是实际存储数据的逻辑表示;
- 查询表:查询结果对应的表;
- 视图表:由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据;
基本关系的性质:
- 列是同质的;
- 不同的列可出自同一个域,其中的每一列称为一个属性,不同的属性要给予不同的属性名;
- 列的顺序无所谓,列的次序可以任意交换;
- 行的顺序无所谓,行的次序可以任意交换;
- 任意两个元组的候选码不能相同;
- 分量必须取原子值,这是规范条件中最基本的一条;
二、关系模式
关系模式(Relation Schema)
是对关系的描述。关系模式是型,关系是值。
其中包含:
- 元组集合的结构:属性构成、属性来自的域、属性与域之间的映射关系;
- 一个关系通常由赋予它的元组语义确定
- 现实世界还存在着完整性约束;
关系模式的定义
关系模式可以形式化地表示为:R(U,D,DOM,F)
R:关系名
U:组成该关系的属性名的集合
D:属性组U中属性所来自的域
DOM:属性向域的映像集合
F:属性间的数据依赖关系集合
关系模式与关系
- 关系模式是静态的、稳定的;
- 关系是动态的、随时间不断变化的;
- 关系模式是型,关系是值,关系是关系模型在某一时刻的状态或内容;(实际开发中,关系模式和关系往往都叫做关系)
关系数据库
定义:在一个给定的应用领域中,所有关系的集合构成一个关系数据库
关系数据库的型与值:
- 关系数据库的型:关系数据库模式,是对关系数据库的描述;
- 关系数据库模式:若干域的定义,在这些域上定义的若干关系模式;
- 关系数据库的值:关系模式在某一时刻对应的关系的集合,通常称为关系数据库;
关系模型的存储结构:
- 有的关系数据库管理系统中一个表对应一个操作系统文件,将物理数据组织交给操作系统完成;
- 有的关系数据库管理系统从操作系统那里申请若干个大的文件,自己划分文件空间,组织表、索引等存储结构,并进行存储管理;
三、关系数据结构
1. 关系操作
1.1 常用关系操作
- 查询操作:选择、投影、连接、除、并、差、交、笛卡尔积(选择、投影、并、差、笛卡尔基是5种基本操作,交、连接、除,可以用5种基本运算来表达,引进它们并不增加语言的能力,但可以简化表达)
- 数据更新:插入、删除、修改
1.2 关系操作的特点
集合操作方式:操作的对象和结果都是集合。
1.3 关系数据库语言的分类
-
关系代数语言:用对关系的运算来表达查询要求。例:ISBL
-
关系演算语言:用谓词表达查询要求
- 元组关系演算语言:谓词变元的基本对象是元组变量,代表:APLHA, QUEL
- 域关系演算语言 :谓词变元的基本对象是域变量,代表:QBE。
- 具有关系代数和关系演算双重特点的语言:例:SQL(Structured Qurey Language)
2. 关系的完整性
关系模型中有三种完整性约束:实体完整性、参照完整性和用户定义的完整性。
其中:
- 实体完整性和参照完整性:关系模型必须满足的完整性约束条件称为关系的两个不变性,应该由关系系统自动支持;
- 用户定义的完整性:应用领域需要遵循的约束条件,体现了具体领域中的语义约束;
2.1 实体完整性
实体完整性规则(Entity Integrity):若属性A是基本关系R的主属性,则属性A不能取空值。空值就是"不知道"或"不存在"或"无意义"的值
说明:
- 实体完整性规则是针对基本关系而言的,一个基本表通常对应现实世界的一个实体集;
- 现实世界中的实体是可区分的,即它们具有某种唯一性标识;
- 关系模型中以主码作为唯一性标识;
- 主码中的属性即主属性不能取空值(主属性取空值,就说明存在某个不可标识的实体,即存在不可区分的实体,这与第(2)点相矛盾,因此这个规则称为实体完整性)
2.2 参照完整性
关系间的引用:在关系模型中实体及实体间的联系都是用关系来描述的,存在着关系与关系间的引用。
外码(Foreign Key):设F是基本关系R的一个或一组属性,但不是关系R的码。如果F与基本关系S的主码Ks相对应,则称F是R的外码。
基本关系R称为参照关系(Referencing Relation)
基本关系S称为被参照关系(Referenced Relation)或目标关系(Target Relation)
说明:
- 关系R和S不一定是不同的关系;
- 目标关系S的主码Ks和参照关系的外码F必须定义在同一个(或同一组)域上;
- 外码并不一定要与相应的主码同名,当外码与相应的主码属于不同关系,往往取相同的名字便于识别;
参照完整性规则:
若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为:
或者取空值(F的每个属性值均为空值);
或者等于S中某个元组的主码值。
2.3 用户定义的完整性
针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求。
关系模型应提供定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,而不要由应用程序承担这一功能。
四、关系代数
定义 :是一种抽象的查询语言,是对关系的运算来表达查询。
关系代数的运算对象 / 运算结果 都是关系
关系代数按运算符的不同可分为传统的集合运算 和专门的关系运算两类。
集合运算:从关系的水平方向(即行的角度)进行
关系运算:不仅涉及行而且涉及列
关系运算符:
传统的集合运算
假设:关系R和S具有相同的目n(两个关系都有n个属性)相应的属性都取自于同一个域
并(Union)
R与S的并运算:R U S
结果:n目关系,由R或S的元组组成
差(Except)
R与S的差运算:R - S
结果:n目关系,由属于R而不属于S的元组组成
交(intersection)
R与S的交运算:R ∩ S
R ∩ S = R - (R - S)
结果:n目关系,由既属于R又属于S的元组组成
笛卡尔积
广义的笛卡尔积:
R与S的笛卡尔积运算:R × S
结果:
行:k1 * k2个元组
列:n + m 列
其中元组的前n列为R的一个元组,后m列为S的一个元组
专门的关系运算
相关符号
设一关系模式R(A1,A2,A3,......,An),它的一个关系为R
- t∈R:t是关系R的一个元组;
- t [ Ai ]:元组t中属性Ai的一个分量;
- 若A = { Ai1,Ai2,...,Aik },其中Ai1,Ai2,...,Aik是A1,A2,...,An中的一部分,则称A为属性列或属性组;
- t [ A ] = (t [ Ai1 ],t [ Ai2 ],...,t [ Aik ])表示元组t在属性列上分量的集合。则表示{ A1,A2,...,An }中去掉{ Ai1,Ai2,...,Aik }剩下的属性组;
- 给定一个关系R(X,Z),X和Z为属性组,当t[ X ] = x时,x在R中的象集Zx为:Zx = { t[ Z ] | t ∈R,t[ X ] = x },它表示R中属性组X中值为x的元组对应的属性Z的取值
象集(Images Set):
选择(Selection)
选择:在关系R中选择满足给定条件的元组
其中:F为选择条件,基本形式为:
其中:表示运算符:
例:查询信息系(IS系)全体学生 :
投影(Projection)
投影:在关系R中选择若干属性列组成新的关系
其中:A:R中的属性列,
投影操作主要是从列的角度进行运算,投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组,避免重复
例:查询学生的姓名和所在系 :
连接(Join)
连接:又称连接,表示从两个关系的笛卡尔积中选取属性间满足一定条件的元组
A和B,分别表示R和S上度数相等且可比的属性组
:运算符
运算结果:从R和S的广义笛卡尔积R×S中选取A属性组与B属性组上值满足条件的元组
常见的连接:
- 等值连接: 为 =;
- 自然连接:特殊的等值连接,两个关系中进行比较的分量必须是相同属性组,在结果中把重复的属性列去掉;
例1:运算关系R和关系S的一般连接 :
例2:运算关系R和关系S的等值连接 :
例3:运算关系R和关系S的自然连接 :
补充概念:
- 悬浮元组:两个关系R和S在自然连接时,没有被连接的元组叫做悬浮元组
- 外连接:把舍弃的悬浮元组也加在结果中,没有值的属性设为空值
- 左外连接:只保留左边关系R中的悬浮元组
- 右外连接:只保留右边关系S中的悬浮元组
例:左外连接 / 右外连接
除(Division)
给定关系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中的象集
例:关系R、S的除运算 R÷S :
R÷S:
分析:先从R中分别求出 a1,a2,a3,a4的象集,然后看四个象集哪个包含了S中所有的属性组的值
关系运算例题
例1:查询选修了2号课程的学生的学号 :
例2:查询至少选修了一门其直接先行课为5好课程的课程的学生姓名 :
- 线查询先行课为5号课程的课程
- 得到的表和SC表进行连接,得到的表包含了Sno和Cno
- 再和学生表中的Sno和Sname列得到的表进行连接
- 最后从得到的表中选出学生的姓名
或者: