以下为《2.关系模型与关系代数》的无排版文字预览,完整格式请下载
下载前请仔细阅读文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。
数据库系统原理第二章 关系模型与关系代数
目 录 关系模型关系代数关系模型系统而严格地提出关系模型的是美国IBM公司的E.F.Codd
1970年提出关系数据模型
E.F.Codd, “A Relational Model of Data for Large Shared Data Banks”, 《Communication of the ACM》,1970
关系数据库系统是支持关系数据模型的数据库系统。关系数据库管理系统是当今的主流数据库管理系统。
关系模型由关系数据结构、关系操作集合和关系完整性约束三部分组成。关系数据结构关系
关系模型的数据结构非常简单,它就是二维表,亦称为关系 。
关系数据库是表的集合,即关系的集合。
表是一个实体集,一行就是一个实体,它由共同表示一个实体的有关联的若干属性的值所构成。
由于一个表是这种有关联的值的集合(即行的集合),而表这个概念和数学上的关系概念密切相关,因此称为关系模型。
关系模型中,现实世界的实体以及实体间的各种联系都是用关系来表示。关系数据结构关系数据结构的形式化定义
域——是一组具有相同数据类型的值的集合。
笛卡尔积
给定一组域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 = {‘数据库系统概论’, ‘操作系统’}
则D1, D2的笛卡尔积为:
D1×D2= { (‘李某某’, ‘数据库系统概论’),
(‘李某某’, ‘操作系统’),
(‘刘方某某’, ‘数据库系统概论’),
(‘刘方某某’, ‘操作系统’),
(‘王某某’, ‘数据库系统概论’),
(‘王某某’, ‘操作系统’) } 关系数据结构关系的形式化定义
D1×D2×…×Dn的有限子集称为在域D1, D2, …, Dn上的关系,表示为 :
r(D1, D2, …, Dn)
其中,r表示关系的名字,n是关系的目或度(degree)。当
n=1时,该关系称为单元关系;当n=2时,称为二元关系。
关系是笛卡尔积的有限子集,所以关系也是一个二维表, 表的每行对应于关系的一个元组,表的每列对应于关系的一个域。
由于域可以相同,为了区别就必须给每列起一个名字,称为属性(attribute)。n目关系共有n个属性。 关系数据结构空值(null)是所有可能的域的一个取值,表明值未知或值不存在。
对于学位的取值域,某员工的学位为空值null,表示不知道该员工所获得的学位,或该员工没有获得学位;
对于成绩的取值域,某学生的成绩为空值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) 。
主码:若一个关系有多个候选码,则可以选定其中的一个候选码作为该关系的主码 。关系数据结构码
举例:Student关系
studentNo studentName sex birthday speciality
*** 李某某 男 1998-12-21 计算机
*** 王 红 男 2000-04-26 计算机
*** 刘方某某 女 1998-11-11 信息系统
*** 王某某 女 1998-10-01 信息系统
*** 王 红 男 2000-04-26 会计学
*** 李宏冰 女 2000-03-09 会计学
超码:studentNo,{studentNo, studentName}、{studentNo, sex}、
{studentNo, studentName, speciality}、…
候选码:studentNo 和 {studentName, speciality} —— 与语义有关
主码:studentNo关系数据结构码
外码:设F是关系r的一个属性(或属性集),Ks是关系s的主码。如果F与Ks相对应(即关系r中属性F的取值范围对应于关系s中主码Ks的取值范围的子集),则称F是关系r参照关系s的外码(foreign key),简称F是关系r的外码。
称关系r为参照关系,关系s为被参照关系或目标关系。关系数据结构关系数据库模式
关系数据库也有型和值之分:
型就是关系数据库模式,即它所包含的所有关系模式的集合;
值就是这些关系模式在某一时刻所对应的关系的集合,通常就称为关系数据库实例 。
在实际应用中,人们经常把关系数据库模式和关系数据库实例都笼统地称为关系数据库。 关系数据结构关系数据库模式
举例:学生成绩管理数据库ScoreDB的模式
Class( classNo: char(6), className: varchar(30), institute: varchar(30),
grade: smallint, classNum: tinyint )
Student( studentNo: char(7), studentName: varchar(20), sex: char(2), birthday:
datetime, native: varchar(20), nation: varchar(30), classNo: char(6) )
Course( courseNo: char(5), courseName: varchar(30), creditHour: numeric,
courseHour: int, priorCourse: char(5) )
Score( studentNo: char(7), courseNo: char(5), term: char(5), score: numeric )
说明: 带下画线的属性(集)为主码,斜体属性为外码。
基本数据类型请参见7.1.2节。关系完整性约束条件实体完整性
若属性集A是关系r的主码,则A不能取空值null。
例如,关系Student,由于studentNo是关系Student的主码,因此它在任何时候的取值都不能为空值null。
如果主码是由若干个属性的集合构成,则要求构成主码的每一个属性的值都不能取空值。
例如,关系Score,它的主码是{studentNo, courseNo, term},因此这3个属性都不能取空值null 。 关系完整性约束条件参照完整性
现实世界中的实体之间存在各种联系,而在关系模型中实体以及实体间的联系都是用关系描述。因此,实体间的联系也就对应于关系与关系之间的联系。 关系完整性约束条件举例:
实现多对一联系的外码
学生成绩管理数据库ScoreDB中,学生关系Student与班级关系Class之间存在多对一的“归属”联系。
关系完整性约束条件举例:
实现多对一联系的外码
学生成绩管理数据库ScoreDB中,学生关系Student与班级关系Class之间存在多对一的“归属”联系。
实现多对多联系的联系关系及外码
学生成绩管理数据库ScoreDB中,假设每一个学生一个学期可以选修若干门课程,每一门课程同时有若干个学生选修,那么学生关系Student与课程关系Course之间存在多对多的“选修”联系,且课程的开课学期term和成绩score为联系属性。
关系完整性约束条件举例:
实现多对一联系的外码
学生成绩管理数据库ScoreDB中,学生关系Student与班级关系Class之间存在多对一的“归属”联系。
实现多对多联系的联系关系及外码
学生成绩管理数据库ScoreDB中,假设每一个学生一个学期可以选修若干门课程,每一门课程同时有若干个学生选修,那么学生关系Student与课程关系Course之间存在多对多的“选修”联系,且课程的开课学期term和成绩score为联系属性。
实现关系内部多对一联系的外码
学生成绩管理数据库ScoreDB中,假设一门课程可能存在先修课程,且关系Course中的priorCourse属性用来存放先修课程的课程编号。属性priorCourse是课程关系Course参照课程关系Course的外码。关系完整性约束条件参照完整性
若属性(或属性集)F是关系r的外码,它与关系s的主码Ks相对应,则对于关系r中的每一个元组在属性F上的取值要么为空值null,要么等于关系s中某个元组的主码值。 关系完整性约束条件数据库模式导航图
一个含有主码和外码依赖的数据库模式可以通过模式导航图来表示。
数据库模式导航图
一个含有主码和外码依赖的数据库模式可以通过模式导航图来表示。
关系Student与Class之间存在多对一的“归属”联系(一个班由多个学生组成,一个学生只能归属于某个班),通过外码classNo实现该联系。
关系Student与Course之间存在多对多的“选修”联系。
关系Score的主码是{studentNo, courseNo, term},显然同一个学生在同一个学期不允许修读同一门课程多次。
studentNo、courseNo都是关系Score的外码,分别实现与关系Student、Course之间的多对一联系(间接地实现了关系Student与Course之间的多对多“选修”联系)。
关系Course的外码priorCourse参照本关系的主码courseNo。关系完整性约束条件数据库模式导航图
关系完整性约束条件数据库模式导航图
一个含有主码和外码依赖的数据库模式可以通过模式导航图来表示
关系Student与Class之间、关系Class与Institute之间、关系Teacher与Institute之间都存在多对一的“归属”联系 。
关系Course的外码priorCourse参照本关系的主码courseNo。
关系CourseClass与Course之间存在多对一的“开课”联系(每个学期一门课程可能开设多个教学班,一个教学班只讲授一门课程)。
关系CourseClass与Classroom之间存在多对一的“上课”联系
关系CourseClass与Teacher之间存在多对一的“授课”联系
关系Student与CourseClass之间存在多对多的“选课”联系 ,转化为选课关系SC分别与关系Student 、CourseClass之间的多对一联系。
关系SC的主码是{cClassNo, studentNo},显然同一个学生不允许选修同一个教学班的课程多次。关系完整性约束条件用户自定义完整性
任何关系数据库管理系统都应该支持实体完整性和参照完整性 。
用户定义完整性是针对某一具体应用要求来定义的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。例如,
限制关系中某些属性的取值要符合业务语义要求。
限制关系中某些属性的取值之间需要满足一定的逻辑关系。
限制关系中某属性集上的取值必须唯一。 关系操作关系操作
关系操作的特点是集合操作方式,即操作的对象和结果都是集合。这种操作方式也称为一次一个集合的方式。相应地,非关系数据模型的数据操作方式则为一次一个记录的方式。
关系模型中的关系操作有查询操作和更新操作(插入、删除和修改)两大类 。
查询操作是关系操作中最主要的部分。查询操作又可以分为选择(select)、投影(project)、连接(join)、除(divide)、 并(union)、交(intersection)、差(except)、笛卡尔积等。 关系操作关系操作可用两种方式来表示
——代数方式和逻辑方式。
关系代数是用代数方式表达的关系查询语言。
关系演算是用逻辑方式表达的关系查询语言。关系演算又可按谓词变元的基本对象是元组变量还是域变量分为元组关系演算和域关系演算。目 录 关系模型关系代数关系代数关系代数
关系代数是通过关系代数运算构成的表达式来表达查询。
基本的关系代数运算有选择、投影、集合并、集合差、笛卡尔积和更名等。
关系代数运算是以一个或两个关系作为输入(即运算对象)产生一个新的关系作为结果。 关系代数传统的集合运算
前提假设:关系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 } 成绩管理数据库ScoreDB的实例数据(P48) 关系代数传统的集合运算
对于数据库ScoreDB,笛卡尔积Class×Course的结果关系为:
关系代数专门的关系运算
选择
选择操作是在关系r中查找满足给定谓词(即选择条件)的所有元组,记作:
σP (r) = { t"#t?r∧P(t) }
P表示谓词(即选择条件),它是一个逻辑表达式,取值为“真”或“假”。 关系代数专门的关系运算
选择
例如,在数据库ScoreDB中,查找20 内容过长,仅展示头部和尾部部分文字预览,全文请查看图片预览。 ourse)) ? σteacherName='吴文君'Teacher) 说明:由于关系Institute与关系Teacher可以通过外码InstituteNo进行自然连接,因此,在∏classNo(σinstituteName='***'Institute ? Class)中使用投影操作的目的是去掉无用属性(主要是为了去掉关系Institute的主码InstituteNo),以避免产生歧义。关系代数(总结)传统的集合运算:并、交、差、笛卡尔积
交:r∩s = r-(r-s)
专门的关系运算:选择、投影、连接、除
连接: θ连接、等值连接、自然连接
给定一个查询需求,构造其关系代数表达式的步骤 :
明确该查询涉及到哪些属性;
明确该查询涉及到哪些关系;
根据数据库模式导航图,通过多对一联系(或一对多联系)把所有涉及的关系连接起来,每一个多对一联系(或一对多联系)都可以表示为外码属性的自然连接。 本章结束!请同学们对本章内容进行复习、总结!!![文章尾部最后500字内容到此结束,中间部分内容请查看底下的图片预览]请点击下方选择您需要的文档下载。
以上为《2.关系模型与关系代数》的无排版文字预览,完整格式请下载
下载前请仔细阅读上面文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。