不要问我为什么后发0,因为考试复习时候复习到了
关系模型与关系代数
关系模型
关系
-
关系模型的数据结构非常简单,它就是二维表,亦称为关系。
-
关系数据库是表的集合,即关系的集合。
-
由于一个表是这种有关联的值的集合(即行的集合),而表这个概念和数学上的关系概念密切相关,因此称为关系模型。
笛卡尔积
- 给定一组域D1, D2, …,Dn,它们之中可以有相同的域。D1, D2, …,Dn的笛卡尔积为:
D1×D2×…×Dn = {d1,d2, …,dn)∣di∈Di, i=1, 2, …, n}
-
其中,集合中的每一个元素(d1**,** d2**, …,** dn)称为一个n元组, 简称为元组;元素中的每一个值di称为一个分量。
-
若Di (i=1, 2, …, n)为有限集,假设其基数为mi (i=1, 2, …,n),则D1×D2×…×Dn的基数M为:
关系的形式化定义
- 关系的形式化定义 D1×D2×…×Dn的子集称为在域D1, D2, …, Dn上的关系,表示为 :
r(D1, D2, …, Dn)
-
其中,r表示关系的名字,n是关系的目或度(degree)。当 n=1时,该关系称为单元关系;当n=2时,称为二元关系。
-
关系是笛卡尔积的有限子集,所以关系也是一个二维表, 表的每行对应于关系的一个元组,表的每列对应于关系的一个域。
-
由于域可以相同,为了区别就必须给每列起一个名字,称为属性(attribute)。n目n目关系共有n个属性。
空值
空值(null)是所有可能的域的一个取值,表明值未知或值不存在。
-
对于学位的取值域,某员工的学位为空值null,表示不知道该员1工所获得的学位,或该员工没有获得学位;
-
对于成绩的取值域,某学生的成绩为空值null,表示不知道该学生的成绩,或该学生没有成绩(如没有参加考试就没有获得成绩)。
关系的最基本要求:
- 关系中的每个属性的域必须是原子的,即域中的每个值都是不可再分的一个完整单元。
- 关系中的每个元组都是可区分的,即存在唯一标识不同元组的属性(集)——码。
关系模式
对于一个二维表,有表头部分和表体部分:
-
表头部分定义了该表的结构,即定义了该表由哪些列构成(假设由n列构成),每个列的名字和取值范围等;
-
表体部分就是所有数据行(元组)的集合,每一个数据行都是由表头部分规定的n列有关联的取值的集合构成。
关系模式组成
表体部分对应于关系,每一个数据行对应于关系的一个元组,即关系是元组的集合。关系是值的概念。
表头部分对应于关系模式,它定义了元组集合的结构,即定义了一个元组由哪些属性构成(假设由n个属性构成),每个属性的名字和来自的域等。 关系模式是型的概念。
-
关系的描述称为关系模式(relation schema)。
-
形式化地表示为:r(U, D, DOM, F)
r为关系名,U为组成该关系的属性名的集合,D为属性集U中
所有属性所来自的域的集合,DOM为属性向域的映像集合,
F为属性间数据的依赖关系集合(即体现一个元组的各属性取值
之间的“关联”性)。 -
关系模式通常被简记为 :r(U) 或 r(A1, A2, …, An)
r为关系名,U为属性名的集合{A1, A2, …, An}
码
-
超码:对于关系r的一个或多个属性的集合A,如果属性集A可以唯一地标识关系r中的一个元组,则称属性集A为关系r的一个超码 (superkey) 。
-
候选码:对于关系r的一个或多个属性的集合A,如果属性集A是关系r的超码,且属性集A的任意真子集都不能成为关系r的超码,则称属性集A为候选码 (candidate key) 。
-
主码:若一个关系有多个候选码,则可以选定其中的一个候选码作为该关系的主码 。
-
外码:设F是关系r的一个属性(或属性集),Ks是关系s的主码。如果F与Ks相对应(即关系r中属性F的取值范围对应于关系s中主码Ks的取值范围的子集),则称F是关系r参照关系s的外码(foreign key),简称F是关系r的外码。
- 称关系r为参照关系,关系s为被参照关系或目标关系。
- 称关系r为参照关系,关系s为被参照关系或目标关系。
关系数据库模式
关系数据库也有型和值之分:
- 型就是关系数据库模式,即它所包含的所有关系模式的集合;
- 值就是这些关系模式在某一时刻所对应的关系的集合,通常就称为关系数据库实例 。
在实际应用中,人们经常把关系数据库模式和关系数据库实例都笼统地称为关系数据库。
模式+实例=关系数据库
一般关系数据库模式:
带下划线的是属性(集)为主码,斜体属性为外码
关系完整性约束条件
实体完整性
若属性集A是关系r的主码,则A不能取空值null。
- 例如,关系Student,由于studentNo是关系Student的主码,因此它在任何时候的取值都不能为空值null。
如果主码是由若干个属性的集合构成,则要求构成主码的每一个属性的值都不能取空值。
- 例如,关系Score,它的主码是{studentNo, courseNo, term},因此这3个属性都不能取空值null 。
参照完整性
若属性(或属性集)F是关系r的外码,它与关系s的主码Ks相对应,则对于关系r中的每一个元组在属性F上的取值要么为空值null,要么等于关系s中某个元组的主码值。
用户定义完整性
任何关系数据库管理系统都应该支持实体完整性和参照完整性 。
用户定义完整性是针对某一具体应用要求来定义的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。
例如
-
限制关系中某些属性的取值要符合业务语义要求。
-
限制关系中某些属性的取值之间需要满足一定的逻辑关系。
-
限制关系中某属性集上的取值必须唯一。
例子
- 实现多对一联系的外码
学生成绩管理数据库ScoreDB中,学生关系Student与班级关系Class之间存在多对一的“归属”联系。
- 实现多对多联系的联系关系及外码
学生成绩管理数据库ScoreDB中,假设每一个学生一个学期可以选修若干门课程,每一门课程同时有若干个学生选修,那么学生关系Student与课程关系Course之间存在多对多的“选修”联系,且课程的开课学期term和成绩score为联系属性。
- 实现多对一联系的外码
学生成绩管理数据库ScoreDB中,学生关系Student与班级关系Class之间存在多对一的“归属”联系。 - 实现多对多联系的联系关系及外码
实现关系内部多对一联系的外码
学生成绩管理数据库ScoreDB中,假设一门课程可能存在先修课程,且关系Course中的priorCourse属性用来存放先修课程的课程编号。属性priorCourse是课程关系Course参照课程关系Course的外码。
数据库模式导航图
一个含有主码和外码依赖的数据库模式可以通过模式导航图来表示
关系操作
关系操作的特点是集合操作方式,即操作的对象和结果都是集合。这种操作方式也称为一次一个集合的方式。相应地,非关系数据模型的数据操作方式则为一次一个记录的方式。
关系模型中的关系操作有查询操作和更新操作(插入、删除和修改)两大类 。
查询操作是关系操作中最主要的部分。查询操作又可以分为
选择(select)、投影(project)、连接(join)、除(divide)、并(union)、交(intersection)、差(except)、笛卡尔积等。
关系操作可用两种方式来表示
——代数方式和逻辑方式。
关系代数是用代数方式表达的关系查询语言。
关系演算是用逻辑方式表达的关系查询语言。关系演算又可按谓词变元的基本对象是元组变量还是域变量分为元组关系演算和域关系演算。
对于关系代数、关系演算(元组关系演算和域关系演算)均是抽象的查询语言,在表达能力上是完全等价的。
总结
-
关系数据结构:二维表
- 表头:关系模式、属性
- 表体:关系、元组
- 超码、候选码、主码、外码
-
关系操作:关系代数、 (元组、域)关系演算
-
集合操作方式
- 关系完整性约束:(实体、参照、用户自定义)完整性
- 实体完整性:主码属性不能为null
- 参照完整性:外码属性要么为null,要么为参照的主码值
- 模式导航图
关系代数
关系代数是通过关系代数运算构成的表达式来表达查询。
基本的关系代数运算有选择、投影、集合并、集合差、笛卡尔积和更名等。
关系代数运算是以一个或两个关系作为输入(即运算对象)产生一个新的关系作为结果。
传统的集合运算
前提假设:关系r和关系s具有相同的n个属性,且相应的属性取自同一个域,即两个关系的模式或结构相同。t是元组变量,t∈r表示t是r的一个元组。
基本运算是并运算和差运算
并运算(或)
关系r与关系s的并记作 :r∪s = { t∣t∈r∨t∈s }其结果关系仍为n目关系,由属于r或属于s的所有元组 组成。
差运算(排除)
关系r与关系s的差记作 :r-s = { t∣t∈r∧t∉s }其结果关系仍为n目关系,由属于r而不属于s的所有元组组成。
交运算(与)
交运算可以用差运算来表达
关系r与关系s的交记作:r∩s = { t∣t∈r∧t∈s }其结果关系仍为n目关系,由既属于r又属于s的所有元组组成。关系的交可以通过差来表达,即r∩s = r-(r-s)。
笛卡尔积
两个分别为n目和m目的关系r和s的笛卡尔积是一个n+m目元组的集合。
元组的前n列是关系r的一个元组,后m列是关系s的一个元组
若关系r有kr个元组,关系s有ks个元组,则关系r和s的笛卡尔积有kr×ks个元组。记作 :
r×s = { tr·ts∣tr∈r∧ts∈s }
专门的关系运算
选择运算
选择操作是在关系r中查找满足给定谓词(即选择条件)的所有元组,记作:
σP ® = { t∣t∈r∧P(t) }
P表示谓词(即选择条件),它是一个逻辑表达式,取值为“真”或“假”。
投影运算
关系是一个二维表,对它的操作可以从水平(行)的角度进行,即选择操作;也可以从纵向(列)的角度进行,即投影操作。
关系r上的投影是从r中选择出若干属性列组成新的关系。记作:
∏A® = { t[A]∣t∈r }
A为关系r的属性集合。
例子
例如,在数据库ScoreDB中,查找所有学生的姓名和民族
∏studentName, nation(Student)
例如,在数据库ScoreDB中,查找所有“蒙古族”学生的姓名
和籍贯
∏studentName, native(σnation=‘蒙古族’(Student))
连接运算
连接也称为θ连接。记为A op B,其中A、B分别为关系r和s中的度数相等且可比的连接属性集,op为比较运算符。 θ连接是从两个关系的笛卡尔积中选取连接属性间满足谓词θ的所有元组。记作 :
r ⋈θ s = { tr·ts∣tr∈r∧ts∈s∧(r.A op s.B) }
θ连接运算就是从关系r和s的笛卡尔积r×s中,选取r关系在A属性集上的值与s关系在B属性集上的值满足连接谓词θ的所有元组,即
r ⋈θ s =
连接运算中有两种最常用、最重要的连接,一种是等值连接(equijoin),另一种是自然连接(natural join)。
θ为等值比较谓词的连接运算称为等值连接。
自然连接是一种特殊的等值连接,它要求两个参与连接的关系具有公共的属性集,并在这个公共属性集上进行等值连接;同时,还要求将连接结果中的重复属性列去除掉,即在公共属性集中的列只保留一次。
除运算
设关系r®和s(S),属性集S是R的子集,即SR,则关系r÷s是关系r中满足下列条件的元组在属性集R-S上的投影:对任意 tr∈r,记 x= tr[R-S],则关系r中属性集R-S的取值x的象集Sx包含关系s。记作
r÷s = { tr[R-S]∣tr∈r∧s包含于Sx }
关系代数查询综合举例
给定一个查询需求,构造其关系代数表达式的步骤 :
-
明确该查询涉及到哪些属性;
-
明确该查询涉及到哪些关系;
-
根据数据库模式导航图,通过多对一联系(或一对多联系)把所有涉及的关系连接起来,每一个多对一联系(或一对多联系)都可以表示为外码属性的自然连接。
总结
-
传统的集合运算:并、交、差、笛卡尔积
- 交:r∩s = r-(r-s)
-
专门的关系运算:选择、投影、连接、除
- 连接: θ连接、等值连接、自然连接
-
给定一个查询需求,构造其关系代数表达式的步骤 :
-
明确该查询涉及到哪些属性;
-
明确该查询涉及到哪些关系;
-
根据数据库模式导航图,通过多对一联系(或一对多联系)把所有涉及的关系连接起来,每一个多对一联系(或一对多联系)都可以表示为外码属性的自然连接。
-