810 likes | 985 Views
第二章 关系数据库. 学习要点. 关系模型 关系数据结构的形式化定义 关系完整性 关系代数 关系演算. 序言. 值得记住的 1970 年, E.F.Codd 提出关系数据库理论基础 E.F.Codd, “A Relational Model of Data for Large Shared Data Banks”, 《Communication of the ACM》,1970 关系数据库试验系统 System R, INGRES 关系数据库应用数学方法来处理数据库中的数据 , 80 年代后成为最重要、最流行的数据库系统 典型实验系统
E N D
学习要点 • 关系模型 • 关系数据结构的形式化定义 • 关系完整性 • 关系代数 • 关系演算
序言 • 值得记住的 • 1970年,E.F.Codd提出关系数据库理论基础 • E.F.Codd, “A Relational Model of Data for Large Shared Data Banks”, 《Communication of the ACM》,1970 • 关系数据库试验系统System R, INGRES • 关系数据库应用数学方法来处理数据库中的数据, 80年代后成为最重要、最流行的数据库系统 • 典型实验系统 • System R, University INGRES • 典型商用系统 • ORACLE, SYBASE, INFORMIX, DB2, INGRES
2.1 关系模型概述 • 关系模型由以下三部分组成 • 关系数据结构 • 关系(一张二维表) • 关系操作: • 查询操作 • 选择(Select)、投影(Project)、连接(Join)、除(Divide)、并(Union)、交(Intersection)、差(Difference) • 更新操作 • 增加(Insert)、删除(Delete)、修改(Update) • 关系完整性约束 • 实体完整性、参照完整性、用户定义完整性 由应用语义约束 关系的两个不变性, 由系统自动支持
三种语言在表达能力上完全等价 关系代数语言 例如ISBL 元组关系演算语言 例如APLHA, QUEL 关系演算语言 关系数据语言 域关系演算语言 例如QBE 具有关系代数和关系演算双重特点的语言 例如SQL 关系语言 • 关系操作特点 • 操作对象和结果都是集合 • 高度非过程化的语言,不必借助循环结构就可以完成数据操作,能嵌入高级语言中使用
关系模型语言 • 关系代数语言 • 把关系当作集合,用集合运算和特殊的关系运算来表达查询要求和条件 • 是一种抽象的查询语言 • 关系演算语言 • 用谓词来表达查询要求和条件 • 谓词变元的基本对象可以是元组变量或域变量,故可分为元组关系演算和域关系演算两类 • 是一种抽象的查询语言 • SQL • 介于关系代数和关系演算之间 • 集DDL、DML和DCL一身的关系数据语言
2.2 关系数据结构的形式化定义 • 关系模型建立在集合代数基础上,从集合论角度讨论 • 关系的形式化定义 • 定义1:域(Domain)-形式化表示为D • 一组具有相同数据类型的值的集合,如整数、实数等。定义2:笛卡尔积(Cartesian Product) P47 • 一组域D1,D2,…Dn的笛卡尔积 • (d1,d2,d3,…dn)称为一个元组,di称为一个分量,集合中唯一元素的数量是集合的基数 • 若Di的基数为Mi,则笛卡尔集的基数M为
笛卡尔积 • 计算实例 例1:D1={甲,乙}, D2={1,2}, D3={a,b,c} 1)D1,D2,D3基数分别是多少? 2)D1×D2=?(基数?) 3)D1×D2×D3=?(基数?) • 笛卡尔集可表示为一个二维表 • 请将例子表示为二维表
导师 专业 研究生 例2.已知三个域 D1=导师集合={张清正,刘逸} D2=专业集合={计算机,信息} D3=学生集合={李勇,刘晨,王敏} 计算思考 1)基数? 2)计算D1×D2×D3=?基数? 3)计算结果中的元组有无实际意义? 张清正 计算机 李勇 张清正 计算机 刘晨 张清正 计算机 王敏 张清正 信息 李勇 张清正 信息 刘晨 张清正 信息 王敏 刘逸 计算机 李勇 刘逸 计算机 刘晨 刘逸 计算机 王敏 刘逸 信息 李勇 刘逸 信息 刘晨 刘逸 信息 王敏 D1,D2,D3的笛卡尔积(上图)
关系数据结构的形式化定义定义3:关系 • D1×D2×···×Dn的子集叫做在D1, D2, …, Dn上的关系,表示为 R(D1, D2, …, Dn) • n:关系的度或目,表的列数,一般称n元关系 • 相关术语 • 候选码:能够唯一标识一个元组的属性组 • 一个关系可以有多个候选码 • 主码:一个关系中选定的一个候选码 • 主属性:主码的各个属性 • 非主属性(非码属性):不包含在任何候选码中的属性 • 全码:若关系模式的所有属性组是这个关系模式的候选码 请举例
三类关系 • 基本关系(基本表或基表) • 实际存在的表,是实际存储数据的逻辑表示 • 查询表 • 查询结果对应的表 • 视图表 • 由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据
例.已知三个域 • D1=导师集合S={张清正,刘逸} • D2=专业集合SP={计算机,信息} • D3=学生集合P={李勇,刘晨,王敏} • 计算思考 • 从笛卡尔集中取出一个子集,选择有意义的结果组成关系 • R=(导师,专业,研究生) • 一个研究生只能有一个专业,如李勇和王敏是计算机专业、刘晨是信息专业 导师S 专业SP 研究生P 张清正 计算机 李勇 张清正 计算机 刘晨 张清正 计算机 王敏 张清正 信息 李勇 张清正 信息 刘晨 张清正 信息 王敏 刘逸 计算机 李勇 刘逸 计算机 刘晨 刘逸 计算机 王敏 刘逸 信息 李勇 刘逸 信息 刘晨 刘逸 信息 王敏 现在导师与研究生是什么关系? 现在导师与研究生是什么关系? 限定一个学生只能有一个导师,如张是计算机导师,刘是信息专业导师 D1,D2,D3的笛卡尔积(上图)
关系 • 关系的限定及扩充 • 关系数据中的关系是有限集合 • 为关系的每一列附以属性名以取消关系元组的有序性 • 关系的性质 • 列同质,即每一列是同一类型的数据 • 不同的列可出自同一个域,每一列为一个属性,不同的属性被赋予不同的属性名 • 列的次序可以任意交换 • 任意两个元组不能完全相同 • 行的次序可以任意交换 • 分量必须取原子值,即不可再分 在许多实际关系数据库产品中,基本表并不完全具有这六条性质。
举例 • 列的顺序无所谓,次序可以任意交换 • 遵循这一性质的数据库产品(如ORACLE),增加新属性时,永远是插至最后一列 • 但也有许多关系数据库产品没有遵循这一性质,例如FoxPro仍然区分了属性顺序 • 任意两个元组不能完全相同,由笛卡尔积的性质决定 • 但许多关系数据库产品没有遵循这一性质,例如Oracle,FoxPro等都允许关系表中存在两个完全相同的元组,除非用户特别定义了相应的约束条件
举例 • 行的顺序无所谓,行的次序可以任意交换 • 遵循这一性质的数据库产品(如ORACLE),插入一个元组时永远插至最后一行 • 但也有许多关系数据库产品没有遵循这一性质,例如FoxPro仍然区分了元组的顺序
关系模式 • 关系模式是对关系的描述,形式化表示为 R(U, D, dom, F) U:组成该关系的属性名集合 D:属性组U中属性所来自的域 dom:属性向域的映象集合,如属性的类型、长度 F:属性间数据的依赖关系集合 ★可简记为R(U)或R(A1, A2, …, An),其中Ai为属性名 • 关系模式与关系 • 关系模式是型,是对关系的描述,是静态的,稳定的 • 关系是值,由赋予它的元组语义来确定的,是动态的,不断变化的,是关系模式在某一时刻的状态或内容 ★实际应用中常常将关系模式和关系都称为关系
关系数据库 • 在给定应用领域中,所有表示实体及实体之间联系的关系的集合构成一个关系数据库 • 关系数据库也有型和值之分 • 关系数据库的型称为关系数据库模式,是对关系数据库的描述 • 若干域的定义 • 在这些域上定义的若干关系模式 • 关系数据库的值是这些关系模式在某一时刻对应的关系的集合,通常简称为关系数据库
课堂思考 • 给出导师、学生、专业三个实体可能组成的关系数据库及其概念模型(ER图)
2.3 关系的完整性 • 实体完整性 • 参照完整性 • 用户定义完整性 • 关系模型必须满足,称为关系的不变性 • 由关系数据库系统自动支持
实体完整性 • 规则:若属性A是基本关系R的主属性,则属性A不能取空值 • 说明:基本关系的所有主属性不能取空值,而不仅是主码整体不能取空值 • 依据:现实世界的实体是唯一可分的 例:学生(学号,姓名,性别,专业号,年龄) 课程(课程号,课程名,学分) 选修(学号,课程号,成绩)
参照完整性 • 关系间的引用 • 外码 • 参照完整性规则
关系间的引用 • 在关系模型中实体及实体间的联系都是用关系来描述的,因此可能存在着关系与关系间的引用 例1 学生实体、专业实体以及专业与学生间的一对多联系 学生(学号,姓名,性别,专业号,年龄) 专业(专业号,专业名)
关系间的引用 例2 学生、课程、学生与课程之间的多对多联系 学生(学号,姓名,性别,专业号,年龄) 课程(课程号,课程名,学分) 选修(学号,课程号,成绩)
关系间的引用 例3 学生实体及其内部的领导联系(一对多) 学生(学号,姓名,性别,专业号,年龄,班长)
外码(Foreign Key) • 外码 • 设F是基本关系R的一个或一组属性,但不是关系R的码。如果F与基本关系S的主码Ks相对应,则称F是基本关系R的外码 FKr 基本关系R(F, …) 基本关系S(Ks,…) 被参照关系 Referenced Relation 或:目标关系 Target Relation 参照关系 Referencing Relation
外码说明 • 关系R和S不一定是不同的关系 • 目标关系S的主码Ks 和参照关系的外码F必须定义在同一个(或一组)域上 • 关于取名 • 外码并不一定要与相应的主码同名 • 当外码与相应的主码属于不同关系时,往往取相同的名字,以便于识别
学号 课程号 学生关系 选修关系 课程关系 参照完整性举例 例1:学生实体与专业实体间的关系: 学生(学号,姓名,性别,专业号,年龄) 专业(专业号,专业名) 外码 参照关系 被参照关系 专业号 学生关系 专业关系 关系参照图 例2:学生,课程,学生与课程之间的多对多联系: 学生(学号,姓名,性别,专业号,年龄) 课程(课程号,课程名,学分) 选修(学号,课程号,成绩) 被参照关系 被参照关系 参照关系 主码?外码? 关系参照图
参照完整性举例 例3:学生(学号,姓名,性别,专业号,年龄,班长) 参照关系 被参照关系 外码
参照完整性规则 • 已知基本关系R的外码F(与基本关系S的主码Ks相对应),每个元组在F上的值必须为: • 或者取空值(F的每个属性值均为空值) • 或者等于S中某个元组的主码值。 FKr 基本关系R(F, …) 基本关系S(Ks,…)
参照完整性规则举例 学生(学号,姓名,性别,专业号,年龄) • “专业号”属性只取下面两类值: • 空值,表示尚未给该学生分配专业 • 非空值,这时该值必须是专业关系中某个元组的“专业号”值,表示该学生不可能分配到一个不存在的专业中 • “学号”和“课程号”是选修关系中的主属性,按照实体完整性和参照完整性规则,它们只能取相应被参照关系中已经存在的主码值 选修(学号,课程号,成绩)
参照完整性规则举例 • “班长”属性值可以取两类值: • 空值,表示该学生所在班级尚未选出班长,或该学生本人即是班长; • 非空值,这时该值必须是本关系中某个元组的学号值 学生(学号,姓名,性别,专业号,年龄,班长)
用户定义的完整性 • 用户定义的完整性是针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求 • 关系模型应提供定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,而不要由应用程序承担这一功能
用户定义的完整性举例 • “课程名”属性必须取唯一值 • 非主属性“课程名”也不能取空值 • “学分”属性只能取值{1,2,3,4} 其它 • 成绩:0-100之间 • 身份证位数、身份证和生日对应关系 课程(课程号,课程名,学分)
2.4 关系代数 • 关系代数语言 • 用传统的集合运算和专门的关系运算来表达查询的抽象语言 • 关系代数 运算符 • 关系代数表达式 • 关系代数中有限次运算复合后形成的式子
表示记号 • R,tR,t[Ai],A,t[A], A • 设关系模式为R(A1,A2,…,An),它的一个关系设为R • tR表示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在属性列A上诸分量的集合 • A则表示{A1,A2,…,An}中去掉{Ai1,Ai2,…,Aik}后剩余的属性组
传统的集合运算 • 若R和S是同类关系(即它们都具有n个属性且相应属性取自同一个域),则可进行并、差、交运算 • 对两者进行集合运算之前,要对两者的属性列进行排序,保证两个关系的属性顺序相同 由属于R或属于S的元组组成 由属于R而不属于S的元组组成 由既属于R又属于S的元组组成 S R
表示记号 • tr ts • R为n目关系,S为m目关系 • tr R,tsS, tr ts称为元组的连接。它是一个n + m列的元组,前n个分量为R中的一个n元组,后m个分量为S中的一个m元组
广义笛卡尔积 • R × S,其关系模式是R和S的模式的并集,是R和S的元组以所有可能的方式组合起来。当R和S有同名的属性,至少要为其中一个属性重新命名。 数学描述:若关系R有k1个元组n个属性,关系S有k2个元组m个属性,则两个关系的广义笛卡尔积有k1 * k2个元组n+m个属性(前n个属性来自于R,后m个属性来自于S) 广义笛卡尔积和笛卡尔积的关系?运算对象? 什么情况下二者等价?
RS RS A B C A B C a1 b1 c1 a1 b2 c2 a2 b2 c1 a1 b3 c2 a1 b2 c2 a2 b2 c1 R S A B C A B C a1 b1 c1 a1 b2 c2 a2 b2 c1 a1 b2 c2 a1 b3 c2 a2 b2 c1 R-S A B C a1 b1 c1 RS R.A R.B R.C S. A S.B S.C a1 b1 c1 a1 b2 c2 a1 b1 c1 a1 b3 c2 a1 b1 c1 a2 b2 c1 a1 b2 c2 a1 b2 c2 a1 b2 c2 a1 b3 c2 a1 b2 c2 a2 b2 c1 a2 b2 c1 a1 b2 c2 a2 b2 c1 a1 b3 c2 a2 b2 c1 a2 b2 c1
例子:学生—课程数据库 • 例:包括S,C,SC三个关系 • 用此例讲解专门的关系运算 S(Sno, Sname, Sex, Sage, Sdept) C(Cno, Cname, Cpno, Ccredit) SC(Sno, Cno, Grade)
S Sno Sname Ssex Sage Sdept 95001 李勇 男 20CS 95002 刘晨 女 19 IS 95003 王敏 女 18 MA 95004 张立 男 19 IS C SC • Cno Cname Cpqo Ccredit • 1 数据库 5 4 • 2 数学 2 • 信息系统 1 4 • 4 操作系统 6 3 • 5 数据结构 7 4 • 6 数据处理 2 • 7Pascal语言 6 4 Sno Cno Grade 95001 1 92 95001 2 85 95001 3 88 95002 2 90 95002 3 80
专门的关系运算 投影:该运算作用于关系R将产生一个新关系S,S只具有R的某几个属性列 选择:该运算作用于关系R也将产生一个新关系S,S的元组集合是R的一个满足某条件C的子集 自然连接:其关系模式是R和S模式的并集。假设A1、A2、……An是R和S的模式中的公共属性,那么如果R的元组r和S的元组s在这些属性上取值都相同,r和s组合而成的元组就归入该自然连接中 θ连接(包含等值连接):先将R和S笛卡儿积,然后从R×S的元组中选择满足条件θ的元组集合
专门的关系运算:选择 • 记号:tR表示t是R的一个元组 • 选择: 从关系R中选取使逻辑表达式F为真的元组,行选。记作 • 逻辑表达式F由逻辑运算符连接算术表达式 • 逻辑运算符: • 算术表达式: 基本形式为“X1 Y1 ” • 表示比较运算符(>,≥,<,≤,=或<>) • X1,Y1是属性名或常量或简单函数,属性名可以用它的序号来代替 例子:F=Sage<20 或 F=4<20 S(Sno, Sname, Sex, Sage, Sdept)
Sno 学 号 Sno 姓 名 Sname Sname 性 别 Ssex 年 龄 Sage Ssex 系 Sdept Sage Sdept 95001 李勇 男 20 CS 95002 刘晨 女 19 IS 95002 刘晨 女 19 IS 95003 王敏 女 18 MA 95004 张立 男 19 IS 95004 张立 男 19 IS σ 选择运算举例 • 选择运算是从行的角度进行的运算 查询信息系(IS系)全体学生 σSdept= 'IS'(Student) σ5 ='IS'(Student)
Sno Sname Ssex Sage Sdept 95002 刘晨 女 19 IS 95003 王敏 女 18 MA 95004 张立 男 19 IS 选择运算例 查询年龄小于20岁的学生: Sdept < 20(Student) 或 4 <20(Student) 课堂练习: 1)查询CS系的所有女生 2)查询先行课代号为6的所有课程
关系代数:投影 • 定义:从关系R中选择若干属性列组成新的关系,列选 其中表示元组t中相应于属性Ai的一个分量。
π 投影(Projection) • 投影操作主要是从列的角度进行运算 • 但投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组(避免重复行)
Sname Sdept Sdept 李勇 CS CS IS 刘晨 IS MA 王敏 MA 张立 IS 投影运算例 查询学生的姓名和所在系: Sname,Sdept(Student) 或 2,5(Student) 查询学生关系S中有哪些系: Sdept(Student)或5(Student)
关系代数:连接 • 连接 • 从关系R和S的笛卡尔积中选取属性间满足条件的元组 • 其中A和B分别是关系R和S上可比的属性组, 是比较运算符 • 等值连接 • 从关系R和S的笛卡尔积中选取A,B属性值相等的元组 • 自然连接 • 特殊的等值连接,R和S具有相同的属性组B,在结果中去掉重复的属性列
R AθB S 连接 • 一般的连接操作是从行的角度进行运算 • 自然连接还需要取消重复列,所以是同时从行和列的角度进行运算