第3章关系数据库理论 3.知识图谱 1. 学习内容 关系数据库理论的学习内容主要包括关系数据模型的三个组成要素,即关系数据模型所 采用的数据结构、关系操作能力的表达方法、关系模型对于存储在数据库中的数据具有的约束 能力;用关系代数表达式或关系演算表达式表达数据库操作。 2. 知识点 本章涉及的知识点主要包括: (1)关系模型中关系、关系模式、关系实例、关系数据库的概念。 (2)关系模型的三种完整性约束规则。 (3)关系代数的操作运算符及运算规则。 (4)用关系代数表达式表达数据库操作的方法。 (5)关系演算中关系的表达,关系演算公式的定义。 (6)用关系演算表达式表达数据库查询操作的方法。 3. 知识点概念图 知识点涉及的概念及其概念间内涵可用概念图呈现,如图3-1所示。 4. 概念图解读 关系数据模型是目前大多数DBMS 所采用的数据模型,用“关系”数据结构描述数据库模 式,对关系进行查询和更新操作,对关系的操作结果进行实体完整性、参照完整性和用户定义 完整性约束。 关系概念建立在集合论中笛卡儿积的概念基础之上,关系是元组的集合,某一时刻元组的 集合称为关系实例,即该时刻关系的值。关系的逻辑结构用关系模式描述,包括关系名称、包 含的属性、属性的域、属性向域的映像以及属性之间的数据依赖5个要素。 关系操作可用关系代数和关系演算表达,关系代数和关系演算在表达能力上是等价的。 关系代数用对关系的代数运算表达关系操作,关系代数运算包括传统的集合运算和专门 的关系运算。传统的集合运算包括并、差、交、广义笛卡儿积等,专门的关系运算包括投影、选 择、连接、除、重命名等,其中选择、投影、并、差、广义笛卡儿积是5种基本代数运算。包含关系 代数运算符、关系名变量、元组集合常量,以及辅助代数运算的算术运算符、比较运算符和逻辑 运算符的关系代数操作序列构成一个关系代数表达式,可表达数据库操作。 关系演算用关系操作的结果应满足的谓词条件表达关系操作,在关系演算表达式中,主要 图3- 1 关系数据库理论知识点概念图 使用比较运算符、量词和逻辑运算符等构造谓词条件。根据谓词变元的不同,关系演算分为元 组关系演算和域关系演算。 实际的关系数据库管理系统(RDBMS)产品使用SQL 定义数据库的三级模式结构及完整 性约束,实现数据库的查询、更新和控制等操作。SQL 吸纳了关系代数的概念和关系演算的 逻辑思想,关系代数和关系演算是SQL 学习的基础。 3.习题 2 一、填空题 1. 关系数据模型的三个组成要素是关系数据结构、、关系的完整性约束。 2. 关系模型用单一的数据结构,即,描述实体以及实体之间的联系。 3. 关系数据模型中的关系可用二维表表示,表中的一行对应关系的一个,表中 的一列对应关系的一个。 4. 关系模型有、、三类完整性约束,其中完整性和 完整性是关系数据库必须满足的完整性约束条件,应该由RDBMS默认支持。 5. 在关系数据库中,实体完整性通过定义关系的实现。 6. 在关系数据库中,两个关系中数据间的参照关系是通过定义实现的。 7. 包含在任何一个候选键中的属性称为。 8. 关系数据模型的实体完整性约束规则要求,关系的主属性。 9. 根据参照完整性约束规则,外键的值或者等于对应主键的关系中某个元组主键的值, 或者取。 21 10. 在关系A(S,SN ,D)和B(D,CN ,NM )中, S 是 A 的主键, A 中的属性 D 与 B 中的 主键 D 相对应,则 D 在 A 中称为,且 D 的取值可以为NULL 值。 11.对于关系:学生(学号,姓名,性别,专业号,年龄), 将属性“年龄”的取值范围定义在 18~30 岁属于完整性约束。 12.设有学生关系S(学号,姓名,班级)和学生选课关系SC(学号,课程号,成绩), 为实现 参照完整性,应定义关系SC 中的“学号”为该关系的。 13.对于关系:教学(学号、教工号、课程号), 若每名学生可以选修多门课程,每门课程可 以由多名学生选修,每位老师只能讲授一门课程,每门课程可以由多位老师讲授,那么该关系 的候选键是。 14.假定关系“列车时刻表”中的属性有车次、始发站、发车时间、终点站、到达时间,且每 辆列车有唯一的始发站和终点站,则该关系的主键是。 15.关系模式的候选键可以有1个或多个,而主键只能有个。 16.关系操作的结果是一个。 17.早期的关系操作能力通常用和的方式表示。 18.关系代数运算中的5种基本操作包括、差、笛卡儿积、投影和选择。 19.在关系代数运算中,使用运算可从关系中得到满足条件的元组;如果只对关 系中的某些属性感兴趣,则可用关系代数的运算选择这些属性。 20.对于学生关系S(S#,SNAME,SEX,AGE), 若要用关系代数表达查询得到的某名 学生的基本信息,需使用运算。 21.设关系 R 和 S 分别有 m 和 n 个元组,k1 和k2 个属性,若它们有k3 个相同的属性,则 R×S 的元组个数是,属性个数是;RS 的属性个数是。 22.在关系代数中,从两个关系的笛卡儿积中选取它们属性间满足一定条件的元组的操 作,称为操作。 23.关系 R 和 S 做自然连接的前提条件是 R 和 S 有相同的。 24.对图3-2中的关系 R 和 S 进行RB60(SC) S) B.π姓名(σ分数>60(S SC)) C.π姓名(π学号,姓名(S) (σ分数>60(SC))) D.π分数>60(π姓名(S) SC) 35.把关系R 和S 进行自然连接时舍弃的元组保留到结果关系中的操作称为。 A.连接B.笛卡儿积C.外部并D.外连接 36.对于图3-8中的关系R 与S,关系T 中元组是通过R 与S 的操作得来的。 图3-8 关系R、S、T 的实例 28 A.自然连接B.全外连接C.右外连接D.左外连接 37.学校数据库中有学生和宿舍两个关系: 学生(学号,姓名) 宿舍(楼名,房间号,床位号,学号) 假设有的学生不住宿,床位也可能空闲。如果要查询所有学生住宿和宿舍分配的情况,包 括没有住宿的学生和空闲的床位,则应对这两个关系进行操作。 A.全外连接B.左外连接C.右外连接D.自然连接 38.在图3-9中,关系R 的属性A 是主键,属性B 是外键且参照关系S 的主键B。 图3-9 关系R 和S 的实例 (1)操作结果为图3-10的关系代数操作是。 A.R CES C.R R.B=S.BS D.R S (2)操作结果为图3-11的关系代数操作是。 A.R CES C.R R.B=S.BS D.R S 图3-10 关系R 和S 的操作结果1 图3-11 关系R 和S 的操作结果2 39.能直接做除运算R÷S 的关系R 和S 是。 A.R(A ,B,C), S(B) B.R(A ,B,C), S(B,D ) C.R(A ,B,C), S(D ,E) D.R(A ,B), S(A ,B,C) 40.关系演算用表达关系操作要求。 A.谓词B.关系的运算C.元组D.域 29 41.下列与关系代数的基本运算等价的元组关系演算表达式,表达不正确的是。 A.R∪S={t|R(t)∨S(t)} B.R-S={t|R(t)∧S(t)} C.σF (R)= {t|R(t)∧F'} D.πi1,i2,…,ik (R)={t(k)|(.u)(R(u)∧t[1]=u[i1]∧t[2]=u[i2]∧…∧t[k]=u[ik])} 42.对于图3-12中的关系R 和S,元组关系演算表达式{t|R(t)∧(.u)(S(u)→t[3]> u[1])}的运算结果是。 图3-12 关系R 和S 的实例 A B C 1 2 3 4 5 6 A A B C 3 7 11 4 5 6 B A B C 7 8 9 10 11 12 C A B C 5 9 13 6 10 14 D 三、简答题 1.名词解释:属性,域,元组,候选键,主键,外键。 2.简述关系模型的三个组成要素。 3.简述关系模型的完整性约束规则。在参照完整性约束规则中,为什么外键属性的值也 可以为空? 什么情况下它不可以为空? 4.关系代数的基本运算有哪些? 如何用这些基本运算表示其他运算? 5.说明关系的笛卡儿积、等值连接和自然连接的联系。 6.假设有关系R(a,b)和S(c,d),试把如下元组关系演算表达式用等价的关系代数表达 式表示: 图3-13 关系R 和S 的实例 {t|R(t)∧(.u)(S(u)∧u[1]≠t[2])} 7.关系R 和S 的半连接(semijoin)写作R S,它 表示由R 中满足如下条件的元组t 组成的集合:t 至少 跟S 中的一个元组在R 和S 的公共属性上相同。用三 种不同的关系代数表达式给出R S 的等价表示。 8.设有关系R 和S,如图3-13所示,给出πC (S)、 σB5(R)或σ单价≥8(R) 29.元组关系演算、域关系演算 32 二、选择题 题号1 2 3 4 5 6 7 8 9 10 答案B B B C A B B B C C 题号11 12 13 14 15 16 17 18 19(1)-(2) 答案D A A B A D B C D A 题号19(3) 20 21 22 23 24 25 26(1)-(3) 答案A B B A A A A C AB ABCD 题号27 28 29(1)-(2) 30 31 32 33 34(1)-(2) 答案B C A B B D B A A D 题号35 36 37 38(1)-(2) 39 40 41 42 答案D C A A D A A B C 三、简答题 1.对属性、域、元组、候选键、主键、外键等名词进行解释。 答:属性(Atribute),对关系中元组分量的描述,用属性名表示,与定义关系的域对应。 其反映的是关系所描述的实体的属性,或实体间联系的属性。在同一关系中,属性名不能 相同。 域(Domain),属性的取值范围,是一组具有相同数据类型的值的集合。不同的属性可以 有相同的域,且关系数据模型要求所有的域都是原子数据的集合。 元组(Tuple),关系是给定一组域上的笛卡儿积的某个有一定语义的子集,其中每一个元 素称为一个 n 元组(n-upe), tpl tl简称为元组(ue)。 候选键(CandidateKey),若关系中的某一属性或属性集能唯一标识一个元组,而其任意 一个真子集无此性质,则称该属性或属性集为关系的候选键。因此,候选键是能唯一标识一个 元组的最小属性集,且每个关系都至少存在一个候选键。 主键(PrimaryKey),主键是数据库设计者选中用来在DBMS中区分一个关系中不同元 组的候选键。主键的选择会影响某些实现问题,例如索引文件的建立等。 外键(ForeignKey),若关系 R 的一个属性(集) F 与关系 S 的主键Ks 对应,即关系 R 中 的某个元组的 F 上的值来自关系 S 中某个元组的Ks 上的值,则称该属性(集) F 为关系 R 的 外键。其中,关系 R 为参照关系(ReferencingRelation,或引用关系),关系 S 为被参照关系 (ReferencedRelation)或目标关系(TargetRelation),目标关系的主键Ks 和参照关系 R 的外 键 F 的命名可以不同,但必须定义在同一(或同一组)域上。关系 R 和关系 S 可以是同一个 关系。 2.简述关系模型的三个组成要素。 答:关系模型作为一种数据模型,包括数据结构、数据操作和完整性约束三个组成要素。 (1)关系模型用关系结构描述实体以及实体之间的联系。关系数据结构来自集合论中关 系的概念,是给定一组域上的笛卡儿积的某个有一定语义的子集。 33 (2)关系模型的关系操作能力通常用关系代数(RelationalAlgebra)和关系演算 (RelationalCalculus)的方式表达。目前使用的是一种结构化的查询语言SQL,它不仅具有丰 富的数据操纵功能,而且具有数据定义和控制功能。 (3)关系模型有三类完整性约束:实体完整性、参照完整性和用户定义完整性。实体完 整性和参照完整性是关系模型必须满足的完整性约束条件,被称为关系的两个不变性,一般由 关系数据库管理系统(RDBMS)自动支持。用户定义完整性是针对具体应用定义的约束条件, 体现了具体应用领域对数据的语义要求。 3. 简述关系模型的完整性约束规则。说明参照完整性约束规则为什么允许外键属性的 值可以为空,什么情况下其值不能空。 答:实体完整性和参照完整性是关系的两个不变性,是关系模型必须满足的完整性约束 条件,一般由RDBMS 提供支持,要求对关系的操作遵循如下完整性约束规则。 .实体完整性约束规则:若属性 A 是关系 R 的主属性,则属性 A 的值不能为空值。 .参照完整性约束规则:若属性(或属性集) F 是关系 R 的外键,它与关系 S 的主键Ks 对应,则 R 中元组在 F 上的取值只能有两种可能,即或者取空值,或者等于 S 中某个 元组的Ks 值。 外键不是候选键,是可以为空的,参照完整性只是要求当其有值时,其值必须是相应主键 的某个值。但当外键属性是构成候选键的主属性时,根据实体完整性约束规则,其值是不允许 为空的。 4.说明关系代数有哪些基本运算,并用这些基本运算表示关系代数的其他运算。 答:关系代数有5种基本运算操作:并、差、笛卡儿积、投影和选择运算。其他运算,如交、 连接和除等,可利用这些基本运算表达。 交:R∩S=R-(R-S)或R∩S=S-(S-R) 连接: R FS=σF (R×S) 连接运算是在两个关系的广义笛卡儿积中选取满足条件 F 的元组, F 是逻辑表达式, F AθS.A=S. 若形为R.B,则是 θ 连接;若形为R.B,则是等值连接;若在等值连接的结果上再做 投影去掉重复列,则为自然连接。 除:R÷S=πX (R)-πX ((πX (R)×S)-R) X 是在 R 中但不在 S 中的属性组,即除运算结果中包含的属性。 5.说明关系的笛卡儿积、等值连接和自然连接的联系。 答:关系的笛卡儿积是两个关系上的基本运算,是连接运算的基础。 等值连接是在笛卡儿积运算的结果上选取两个关系在某些属性上值相等的元组,计算等 价式为 RA=BS≡σA= B ( R.S.R×S) 其中, A 和 B 分别是 R 和 S 上可包含多个属性的属性个数相等且可比的属性组,若包含的属 性个数有 k 个,则A=A1=B1∧R.S.Ak =Bk 。 B 表示R.S.A2=B2∧…∧R.S. 自然连接是在两个关系的公共属性上进行等值连接,并去掉连接结果中的重复属性,计算 等价式为 RS≡πZ1,Z2,…,Zm (RA=AS)或RS≡πZ1,Z2,…,Zm (σA= A (R×S)) R.S. 其中 A 是两个关系的公共属性,Z2,…,是从RA=AS 中去掉重复属性S.A2,…, Z1,Zm A1,S. S.后的属性。 Ak 34 35 6.对于关系R (a,b)和S (c,d),用等价的关系代数表达式表示如下元组关系演算表 达式: {t|R(t)∧(.u)(S(u)∧u[1]≠t[2])} 答:表达式中涉及R 和S 两个关系中元组的属性值比较,需要用条件连接,结果元组来 自关系R,需要对连接结果在R 的属性上进行投影,则等价的关系代数表达式可为 πa,b(σR.b≠S.c(R×S)) 7.用三种不同的关系代数表达式给出关系R 和S 的半连接R∝S 的等价表示。 答:假设关系R 和S 的属性集分别为AR 和AS ,公共属性集为A =AR ∩AS ,则R∝S 可 用以下三种形式表示: R∝S=πAR (σR.A=S.A (R×S)) R∝S=πAR (R R.A=S.AS) R∝S=πAR (R S) 8.图3-13中关系R 和S 的πC (S)、σB500(Employee Works Project)) 或 πDept_No(σBudget>500(Project) Works Employee) 元组关系演算表达式: {t(1)|(.u)(.v)(.w )(Employee(u)∧Works(v)∧Project(w )∧u[1]=v[1]∧ v[2]=w [1]∧w [3]>500∧t[1]=u[3])} (2)查询员工“王广”和“王丽”都参与的预算超出10万元的工程项目名称。 39 答:关系代数表达式: πPro_Name(πPro_No,Pro_Name(σBudget>10∧Emp_Name='王广'(Employee Works Project))∩ πPro_No,Pro_Name(σBudget>10∧Emp_Name='王丽'(Employee Works Project))) 或 πPro_Name(σBudget>10((πPro_No(σEmp_Name='王广'(Employee) Works)∩ πPro_No(σEmp_Name='王丽'(Employee) Works)) Project)) 元组关系演算表达式: {t(1)|(.u)(.v)(.w)(.x)(.y)(Employee(u)∧Works(v)∧Project(w)∧Employee(x)∧ Works(y)∧u[1]=v[1]∧v[2]=w [1]∧y[2]=w [1]∧x[1]=y[1]∧ w [3]>10∧u[2]='王广'∧x[2]='王丽'∧t[1]=w [2])} (3)查询所在部门编号为D2的员工没有参与的工程项目编号及名称。 答:关系代数表达式: πPro_No,Pro_Name(Project)-πPro_No,Pro_Name(σDept_No='D2'(Employee Works Project)) 或 πPro_No,Pro_Name((πPro_No(Project)-πPro_No(σDept_No='D2'(Employee) Works)) Project) 元组关系演算表达式: {t(2)|(.u)(Project(u)∧(.v)(Works(v)∧(v[2]=u[1]→..(.w )(Employee(w )∧ w [3]='D2'∧v[1]=w [1])))∧t[1]=u[1]∧t[2]=u[2])} 或 {t(2)|(.u)(.w )(Project(u)∧Employee(w )∧w [3]='D2'∧(..(.v)(Works(v)∧ v[2]=u[1]∧v[1]=w [1]))∧t[1]=u[1]∧t[2]=u[2])} (4)查询所有部门都参与的工程项目编号和名称。 答:关系代数表达式: πPro_No,Pro_Name,Dept_No(Employee Works Project)÷πDept_No(Department) 元组关系演算表达式: {t(2)|(.u)(.w )(.v)(.x)(Project(u)∧Department(w )∧Employee(v)∧Works(x)∧ w [1]=v[3]∧v[1]=x[1]∧x[2]=u[1]∧t[1]=u[1]∧t[2]=u[2])} (5)查询所在部门编号为D2的所有员工的编号、姓名,及其参加的工程项目编号和承担 的工作。 答:关系代数表达式: πEmp_No,Emp_Name,Pro_No,Job((σDept_No='D2'(Employee)) Works) 元组关系演算表达式: {t(4)│(.u)(Employee(u)∧u[3]='D2'∧t[1]=u[1]∧t[2]=u[2]∧ ((.v)(Works(v)∧u[1]=v[1]∧t[3]=v[2]∧t[4]=v[3])∨ (.v)(Works(v)∧v[1]≠u[1]∧t[3]=NULL∧t[4]=NULL)))}