关系
关系模型由关系数据结构、关系操作集合和关系完整性约束三部分组成
域
域时一组具有相同数据类型的值的集合。
基数:一个域允许的不同取值个数称为这个域的基数。
笛卡尔积
可以看成是关系的域,是域上的一种集合运算。
给定一组域D1,D2……,允许其中某些域是有相同的。这组域的笛卡尔积为:
D1 * D2 * …… * Dn = {(d1,d2……dn)|di∈Di,i=1,2……n}
关系的数据结构※
定义(笛卡尔积的子集):
n=1时称为该关系的单元关系。n=2时称该关系为二元关系。
一些概念
元组:关系中的每个元素叫做一个n元组,或简称元组,通常用t表示。表的每行对应一个元组,表的每列对应一个域。
属性:由于域可以相同,为了加以区分,必须对每列起个名字,称为属性。
候选码:如果关系中某一属性组的值能够唯一的标识一个元组,而其子集不能,则称该属性组为候选码。
主码:若一个关系有多个候选码,则选定其中一个为主码。
主属性:候选码的诸属性。
非主属性:在不包含在任何候选码中的属性叫做非主属性。
外码:设F是基本关系R的一个或一组属性,但不是关系R的码,如果F与基本关系S的主码Ks相对应,则称F是基本关系R的外部码,简称外码。
全码:在最简单的情况下,候选码只包含一个属性。在最极端的情况下,关系模式中的所有属性是这个关系模式的候选码,称为全码。
关系的类型
- 基本表:实际存在的表,它是实际存储数据的逻辑表示
- 查询表:查询结果对应的表
- 视图表:由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据。
关系的性质
关系模式
关系的描述称为关系模式,它可以形式化的表示为R(U,D,DOM,F),其中R为关系名,U为组成该关系的属性名的集合,D为U中属性所来自的域,DOM为属性向域的映像集合,F为属性间数据的依赖关系集合。(域名及属性向域的印象常常直接说明为属性的类型、长度)
关系模式和关系的“关系”:
在关系数据库中,关系模式是“型”,关系是“值”,是关系模式的实例。关系模式是对关系的描述。关系是关系模式在某一时刻的状态或内容。
关系模式:对关系的描述,静态的稳定的
关系:关系模式在某一时刻的状态或内容,动态的、随时间不断变化的
关系数据库中的“关系”与日常生活中常见的“表格”有什么不同?
关系数据库中的“关系“除了满足相应域的属性要求,还需要遵循相应的约束条件、主码必须唯一‘必须存储最基本的关系,关系不能拆分
日常生活中常见的“表格”对需要存储的内容要求没有这么严格
一个关系是否元组越多,所描述的信息就越丰富?
不一定,参照与约束
关系数据库
在关系模型中,实体以及实体间的联系都是用关系来表示的,例如导师实体、研究生实体、导师与研究生之间的一对多联系都可以分别用一个关系来表示。在一个给定的应用领域中,所有的关系的集合构成一个关系数据库。
关系数据库也有型和值之分,关系数据库的型也称为关系数据库模式,是对关系数据库的描述。
关系数据库的值是这些关系模式在某一时刻对应的关系的集合,通常称为关系数据库。
关系的完整性约束※
实体完整性和参照完整性:关系模型必须满足的完整性约束条件称为关系的两个不变性,应该由关系系统自动支持
用户定义的完整性:应用领域需要遵循的约束条件,体现了具体领域中的语义约束
实体完整性
关系的主属性不能取空值 空值就是“不知道”或“不存在”或“无意义”的值
参照完整性
外码:
参照完整性规则:
如果外码在其他关系中是作为主码的话则不能取空值,因为不符合实体完整性。
用户定义的完整性
如果数据库只有一个关系,是否就不存在参照完整性了?
关系完整性,必满足的两个要求:实体完整性和参照完整性。
实体完整性要求主码不能取空值;参照完整性则是描述关系与关系之间的联系。
如果数据库中只有一个关系,仍然存在参照完整性,外码取空值即可,前提该外码不是其他关系的主码。
关系代数※
关系数据语言可以分为三类:关系演算语言、关系代数语言以及具有双重特点的语言
-
关系演算语言:用谓词来表达查询要求,例如QUEL,QBE,ALPHA
-
关系代数语言:用对关系的运算来表达查询要求,例如ISBL
-
目前常用是一种以上两种的集合:SQL
关系代数:运算对象是关系,运算结果也是关系,关系代数的运算符有两类:传统集合运算符和专门的关系运算符
传统集合运算
传统的集合运算时二目运算,包括交并差笛卡尔积四种运算。
前提:
- 关系R和S具有相同的目n
- 且相应属性取自同一个域
例如:表1(学号,姓名,数学成绩),表2(学号,姓名,物理成绩),这两种表不能集合并,因为数学成绩和物理成绩不属于同一个域。
例子:
select * from R1
union /*并*/
select * from S1
select * from S1
union
select * from R1
select * from R1
intersect /*交*/
select * from S1
select * from S1
intersect
select * from R1
select * from R1
except /*差*/
select * from S1
select * from S1
except
select * from R1
关系特有操作
选择
选择运算是从关系R中选取使逻辑表达式F为真的元组,是从行的角度进行的运算
例子:
投影
主要是从列的角度进行运算
例子:
连接
分为普通连接,等值连接和自然连接。
自然连接是一种特殊的等值连接,两个关系中把进行比较的分量必须是相同的属性组,在结果中把重复的属性列去掉
左外连接 右外连接:
例子:
/*普通连接:R.C<S.E*/
SELECT R.*,S.* FROM R,S WHERE R.C<S.E
SELECT A,R.B,C,S.B,E FROM R,S WHERE R.C<S.E
SELECT R.*,S.* FROM R INNER JOIN S ON R.C<S.E
/*等值连接:R.B=S.B*/
SELECT A,R.B,C,S.B,E FROM R,S WHERE R.B=S.B
SELECT R.*,S.* FROM R,S WHERE R.B=S.B
SELECT R.*,S.* FROM R INNER JOIN S ON R.B=S.B
/*自然连接:R.B=S.B*/
SELECT R.*,E FROM R,S WHERE R.B=S.B
SELECT A,R.B,C,E FROM R,S WHERE R.B=S.B
SELECT R.*,E FROM R INNER JOIN S ON R.B=S.B
/*外连接:*/
SELECT R.*,E FROM R FULL JOIN S ON R.B=S.B
/*左外连接:*/
SELECT R.*,E FROM R LEFT JOIN S ON R.B=S.B
/*右外连接:*/
SELECT R.*,E FROM R RIGHT JOIN S ON R.B=S.B
除运算
例子:
假设关系R(A,B,C)中A是码,R1(A,B)和R2(A,C)是分别从R中投影得到的两个关系,请问R1(A,B) Join R2(A,C)=R(A,B,C) (注:Join是自然连接)
当函数依赖A–>B和A–>C在R上成立时,关系R(A,B,C)等于其投影R1(A,B)和R2(A,C)的自然连接
关系代数的综合实例
关系演算
以数理逻辑中的谓词演算为基础
按谓词变元不同进行分类
- 元组关系演算:以元组变量作为谓词变元的基本对象,演算语言ALPHA
- 域关系演算:以域变量作为谓词变元的基本对象,演算语言QBE
元组关系演算
简单检索:GET 工作空间名(表达式1)
限定检索:GET 工作空间名(表达式1) :条件
带排序的检索:GET 工作空间名 (表达式1) :条件 DOWN|UP 表达式2
带定额的检索:GET 工作空间名 (定额)(表达式1) :条件 DOWN|UP 表达式2
用元组变量的检索:
用存在量词的检索:
带有多个关系的表达式的检索
用量词的检索(存在量词 全称量词)
用两种量词的检索
用蕴涵的检索
聚集函数
域关系演算
QBE是一种以元组变量的分量 即域变量作为谓词变元的基本对象。(Query By Example)
QBE也指此关系数据库管理系统 QBE是基于屏幕表格的查询语言,查询要求以填写表格的方式构造查询;查询结果以表格形式表示。
QBE是一种典型的域关系演算语言,以元组变量的分量 即域变量作为谓词变元的基本对象。QBE也指此关系数据库管理系统。
- QBE是基于屏幕表格的查询语言,
- 查询要求:以填写表格的方式构造查询,
- 用实例元素(域变量)来表示查询结果可能的情况,
- 查询结果:以表格形式表示。