530 likes | 658 Views
湖南工学院计算机系. 数据库原理 Principles of Database 第 2 章 关系数据模型. 第 2 章 关系数据模型.
E N D
湖南工学院计算机系 数据库原理 Principles of Database 第2章关系数据模型 数据库原理
第2章关系数据模型 • 1970年,美国IBM公司的E. F. Codd在发表的著名论文《A Relational Model of Data for Large Shared Data Banks》中首先提出了关系数据模型,之后他又发表了多篇文章,奠定了关系数据库的理论基础,标志着数据库系统新时代的来临。20世纪80年代以来,计算机厂商推出的数据库管理系统(DBMS)几乎都支持关系模型,非关系系统的产品也都加上了关系接口。关系数据库系统几乎成了当今数据库的代名词。 数据库原理
第2章关系数据模型 • 【本章掌握内容】 1、关系的定义2、关系代数3、关系演算【本章了解内容】 1、关系运算的安全限制2、关系代数表达式的优化 数据库原理
2.1 关系数据模型的基本概念 • 2.1.1 关系、元组、属性、域、分量、关系模式 • 2.1.2 关键字 • 2.1.3 关系数据模型的集合论定义 • 2.1.4 关系数据模型的完整性约束 数据库原理
1.关系 • 每一个关系用一张二维表来表示,常称为表。每一个关系表都有个区别于其他关系表的名称,称为关系名。关系是概念模型中同一类实体及实体之间联系集合的数据模型表示,如图2-1所示的员工人事数据表。 数据库原理
2.元组 • 二维表中的每一行数据总称为一个元组或记录。一个元组是对应概念模型中一个实体的所有属性值的总称。由若干个元组就可构成一个具体的关系,一个关系中不允许有两个完全相同的元组。 • 3.属性 • 二维表中的每一列即为一个属性,每个属性都有一个显示在每一列首行的属性名。在一个关系表当中不能有两个同名属性。关系的属性对应概念模型中实体型及联系的属性。 • 4.域 • 关系中每个属性的值是有一定变化范围,每一个属性所对应的变化范围叫做属性的变域或简称域,它是属性值的集合,关系中所有属性的实际取值必须来自于它对应的域。 数据库原理
5.分量 • 一个元组在一个属性域上的取值称为该元组在此属性上的分量。 • 6.关系模式 • 二维表的表头那一行称为关系模式,即一个关系的关系名及其全部属性名的集合。关系模式是概念模型中实体型及实体型之间联系的数据模型表示。 一般表示为:关系名(属性名1,属性名2,……,属性名n) 数据库原理
关系模式和关系是型与值的联系 • 关系模式指出了一个关系的结构;而关系则是由满足关系模式结构的元组构成的集合。关系模式是稳定的、静态的,而关系则是随时间变化的、动态的。但通常在不引起混淆的情况下,两者可都称为关系。 数据库原理
2.1.2 关键字 • 在关系数据库中,对每个指定的关系经常需要根据某些属性的值来唯一地操作一个元组,也就是要通过某个或某几个属性来唯一地标识一个元组,把这样的属性或属性组称为指定关系的关键字。 • 1.超关键字 • 2.候选关键字 • 3.合成关键字 • 4.主关键字 • 5.主属性 • 6.外部关键字 数据库原理
1.超关键字 • 在一个关系中若通过一个属性集合的取值就能唯一确定每一个元组,即该关系中所有元组在这个属性集合上的分量是不同的,则称该属性集合为该关系的超关键字或者简称为超键(super key)。因此超关键字具有唯一的标识性。 例:图2-1 数据库原理
2.候选关键字 • 如果某一集合是超关键字,但去掉其中任意属性后就不再是超关键字,则称该属性集合为候选关键字(Candidate key)。候选关键字不但要求属性集合具有唯一的标识性,还要求属性集合的元素数目最少。 例:图2-1 数据库原理
3.合成关键字 • 当某个候选关键字包含多个属性时,则称该候选关键字为合成关键字(Composite key)。 4.主关键字 • 为关系组织物理文件存储时,通常选用一个候选关键字作为插入、删除、检索元组的操作变量。这个被选用的候选关键字称为主关键字(Primary key),有时也称为“主码”。 5.主属性 • 包含在任何一个候选关键字之中的属性称为主属性(Main attribute),不包含在任何一个候选关键字之中的属性称为非主属性。 数据库原理
6.外部关键字 • 如果关系R1的某一(些)属性A不是R1的候选关键字,但是在另一关系R2中属性A是候选关键字,则称A是R1的外部关键字(Foreign key),有时也称“外码”。 数据库原理
2.1.3 关系数据模型的集合论定义 • 关系数据模型是从集合论中的关系(Relation)概念发展过来的,它有严格的数学理论基础。 1.笛卡儿积 2.关系 3.关系模式 数据库原理
1.笛卡儿积 • 定义2.1 设有一个有限集合D1,D2,D3、…,Dn,则在D1,D2,D3,…,Dn上的笛卡儿积(Cartesian Product)为: 其中每一个元素 (d1,d2,d3,…,dn)叫做一个n元组(n-tuple)或简称元组(Tuple)。元素中的每一个值叫做一个分量(Component)。 数据库原理
笛卡儿积的元素个数 若Di(i=1,2,3,…,n)为有限集,其基数(Cardinal Number)为mi (i=1,2,3,…,n),则D1×D2×D3×……×Dn的基数为: 数据库原理
例2.1 设有三个集合如下:A={a1,a2},B={b1,b2},C={c1,c2}则集合A、B、C上的笛卡儿积为 数据库原理
2.关系 • 笛卡儿积D1×D2×D3×…×Dn的任意一个子集叫做在D1,D2,D3,…,Dn上的一个n元关系,简称关系(Relation)。每个关系都有一个关系名。 • 二维表的名称就是关系的名称,二维表的每一列都是一个属性。n元关系就会有n个属性。一个关系中的每一个属性都有一个名字,且各个属性的属性名都不同,对应参与笛卡儿积运算的每个集合的名称。一个属性的取值范围Di (i=1,2,3,…,n)称为该属性的域(Domain)。 数据库原理
3.关系模式 • 实际上完整的关系模式的数学定义为: R (U、D、dom、F) 其中:R为关系模式名,U为组成该关系的属性名的集合,D为属性组U中属性所来自的域的集合,dom为属性向域映像的集合,F为属性间函数依赖关系的集合。 • 关系模式通常简写为: R (U)或R (A1,A2,A3,…,An) 其中:R为关系名,Ai (i=1,2,3,…,n)为属性名。域名构成的集合及属性向域映像的集合一般为关系模式定义中的属性的类型和长度。 数据库原理
2.1.4 关系数据模型的完整性约束 • 关系模型中共有四类完整性约束:域完整性、实体完整性、参照完整性、用户自定义完整性。其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件,任何关系系统都应该能自动维护。 数据库原理
1.域完整性 关系数据模型规定元组在属性上的分量必须来自于属性的域,这是由完整性约束指出的。域完整性约束(Domain Integrity Constraint)是最简单、最基本的约束。 • 2.实体完整性 因此在具体的RDBMS中,实体完整性(Entity Integrity)应变为:任一关系主关键字之中的属性不能为空。 数据库原理
3.参照完整性 参照完整性约束(Referential Integrity Constraint)就是不同关系之间或同一关系的不同元组必须满足的约束。它要求关系的外部关键字和被引用关系的主关键字之间遵循参照完整性约束:设关系R1有一外部关键字FK,它引用关系R2的主关键字PK,则R1中任一元组在外部关键字FK上的分量必须满足以下两种情况: • 等于R2中某一元组在主关键字PK上的分量。 • 取空值(FK中每一个属性的分量都是空值)。 数据库原理
4.用户自定义完整性 • 用户自定义的完整性约束就是对某一具体关系数据库的约束条件,它反映了某一具体应用所涉及的数据必须满足的语义要求。 数据库原理
2.2 关系的运算 关系操作可以使用两种方法定义。 • 一种方式是基于代数的定义,称为关系代数; • 另一种方法是基于逻辑的定义,称为关系演算。 根据使用的变量的不同,关系演算又分为元组关系演算和域关系演算。 数据库原理
2.2.1 关系代数 关系代数运算是通过对关系的运算来表达查询的。它的运算对象是关系,运算结果也是关系。关系代数的运算可分为两类: • (1)传统的集合运算:并、差、交和乘积。 • (2)专门的关系运算,即专门针对关系数据库设计的运算:选择、投影、连接和除。 数据库原理
1.传统的集合运算 (1)并 (2)差 (3)交 (4)乘积设关系R有m个属性、i个元组;关系S有n个属性、j个元组,则关系R和S的乘积是一个有(m+n)个属性的元组集合。每个元组的前r个分量来自关系R的一个元组,后s个分量来自S的一个元组,且元组的数目有i×j个。 数据库原理
2.专门的关系运算 • 在关系运算中,由于关系数据结构的特殊性,在关系代数中除了需要一般的集合运算外,还需要一些专门的关系运算,包括选择、投影、连接和除等。 数据库原理
(1)选择 • 选择运算是在关系R中选择满足条件F的所有元组组成的一个关系。记作 F(R)={t | tRF(t)=true} 其中,F表示选择条件,它是一个逻辑表达式,取值为“true”或“false”。 逻辑表达式F的基本形式为:X1Y1[X2Y2…] θ表示比较运算符,它可以是>、≥、<、≤、=和≠。X1、Y1等是属性名或简单函数。属性名也可以用它在关系中从左到右的序号来代替。Φ表示逻辑运算符,它可以是。[ ]表示任选项 数据库原理
(2)投影 投影运算是从一个关系中选取某些属性(列),并对这些属性进行重新排列,最后从得出的结果中删除重复的行,从而得到一个新的关系。 设R是n元关系,R在其分量Ai1,Ai2,…,Aim (m≤n;i1,i2,…,im为1到m之间的整数,可不连续)上的投影操作定义为: πil,i2…im={t | t=<til,ti2,…tim>∧<t1,…til,ti2…tim,…tn>R} 即取出所有元组在特定分量Ai1,Ai2,…,Aim上的值。 数据库原理
(3)连接 连接是从两个关系的广义笛卡儿积中选取属性间满足一定条件的元组。连接又称θ连接。记作: 其中,A和B分别是R和S上个数相等且可比的属性组(名称可不相同)。AθB作为比较公式F,F的一般形式为F1∧F2∧…∧Fn,每个Fi是形为tr[Aiθts][Bj]的公式。对于连接条件的重要限制是条件表达式中所包含的对应属性必须来自同一个属性域,否则是非法的,即属性的来源必须相同。 数据库原理
① 等值连接 • 一个连接表达式中的所有运算符θ都取“=”时的连接就是等值连接,是从两个关系的广义笛卡儿乘积中选取A、B属性集间相等的元组。 • ② 自然连接 • 等值连接可能出现数据冗余,而自然连接将去掉重复的列。 数据库原理
自然连接与等值连接的区别 • 等值连接进行相等比较的属性可以是相同的属性,也可以是不同的属性;而自然连接进行相等比较的属性必须是相同的属性。 • 自然连接必须去掉重复的属性,即去掉进行相等比较的属性,而等值连接则无此要求。 • 自然连接一般用于有公共属性的情况。如果两个关系没有公共属性,那么它们的自然连接就退化为广义笛卡儿乘积。如果是两个关系模式完全相同的关系自然连接运算,则变为交运算。 数据库原理
(4)除 给定关系R(X,Y)和S(Y,Z),其中X,Y,Z为属性或属性集。R中的Y和S中的Y可以有不同的属性名,但必须出自相同的域集。R÷S是满足下列条件的最大关系:其中每个元组t与S中的各个元组s组成的新元组<t,s>必在R中。定义形式为: • ① R÷S的新关系属性是由属于R但不属于S的所有属性构成的。 • ② R÷S的任一元组都是R中某元组的一部分。但必须符合下列要求:即任取属于R÷S的一个元组t,则t与S的任一元组相连后,结果都为R中的一个元组。 • ③ 数据库原理
例2.14 查询所有女生的基本情况。 • 分析:关系Student的属性已包含了查询所需的数据,现要查询女生情况,只需对关系表做水平分解的条件运算即可。 πStudent(бSex='女'(Student)) 数据库原理
例2.15 查询年龄大于20岁的男生的基本情况。 分析:本例和例2.14的求解思想一样,应先做关系的水平选择分解运算,再做投影运算。 数据库原理
例2.16 查询张小倩同学所选修的课程号和相应的成绩。 分析:题目中所包含的数据信息有“张小倩”、“课程号”和“成绩”。其中“张小倩”是包含在Student关系表中的姓名属性值,“课程号”和“成绩”是Study关系表中的属性。因此本例中所包含的信息分布在两个不同的关系表中。在Study关系表中又存在外码“Sno”与Student关系表相联系,所以可以使用自然连接运算将两个关系表连接在一起形成一个新的关系。 数据库原理
例2.17 查询选修了C语言的学生的学号和姓名。 分析:题设中所包含的信息有“C语言”、“学号”和“姓名”。其中“C语言”是Course关系表中的课程名属性值,“学号”和“姓名”是Student关系表中的属性。这两个关系表虽没有直接的外码联系,但它们分别与Study关系表有外码联系。因此要进行这样的查询必须将三个关系表都自然连接在一起才能具备题目中的所有信息。 数据库原理
例2.18 查询选修了全部课程的学生的学号。 分析:题目中要查询的是study表中选修了全部课程的学号,使用除法可以达到这个目的。但Study关系表有三个属性“Sno”、“Cno”、“Grade”,直接用Study÷Course得出的关系模式会包含“Sno”和“Grade”属性而且达不到题目的要求。因此在进行除法运算之前先要对Study关系表进行投影操作,使得进行除运算之后只含有一个属性“Sno”。 πSno,Cno(Study)÷Course 数据库原理
例2.19 查询所有没选C04号课程的学生的学号。 分析:要实现题目的查询目的,可以先查询出选了C04号课程的学生有哪些,再用总的学生集合减去选了C04号课程的学生集合。 πSno(Student)-πSno(бCno='co4'(Study)) 数据库原理
2.2.3 关系演算 关系演算是利用谓词演算来表达关系操作的一种方法。按谓词变量的不同,关系演算又分为两种: • 一种是元组关系演算,以元组为变量,简称元组演算; • 另一种是域关系演算,以域为变量,简称域演算。 在元组演算中,元组关系演算表达式的一般形式为{t/φ(t)}。其中,t是元组变量,它表示一个定长的元组。φ(t)为元组演算公式,简称公式,它由原子公式和运算符组成。 数据库原理
1.原子公式 原子公式是构成关系演算最基本的单位,它有三种形式。 • 1)R(t),其中R是关系名,t是元组变量。R(t)表示:t是关系R的一个元组。 • (2)t[i]θu[j],其中t和u是元组变量,θ是比较运算符。该原子公式表示:元组t的第i个分量与元组u的第j个分量之间满足θ关系。 • (3)t[i]θc或cθt[i],其中t是元组变量,c是一个常量,该原子公式表示:元组t的第i个分量与常量c之间满足θ关系。 数据库原理
2.运算符 关系演算使用的运算符有:算术,比较运算符、量词、逻辑运算符和括号。运算符的优先级关系为: • (1)算术,比较运算符的优先级最高。 • (2)存在量词和全称量词的优先级次之,而存在量词的优先级高于全称量词。 • (3)逻辑运算符的优先级最低。 • (4)若有括号,则括号的优先级最高。 数据库原理
4.元组关系演算与关系代数的等价性 • (1)并 • (2)差 • (3)广义笛卡儿积 • (4)选择 • (5)投影 数据库原理
元组演算实例 • (1)所有女学生的学生信息 {x[Srudent]|Student(x)x[Sex]='女'} • (2)男生的学号,年龄 • (3)所有年龄小于22的男生姓名,课程号,成绩 数据库原理
2.3 查询优化 • 查询检索是数据库系统最主要的功能,查询速度的快慢直接影响系统效率。关系模型虽有坚实的理论基础,但其主要的缺点就是查询效率较低。若不能解决这个问题,则关系模型也很难得到推广。 数据库原理
2.3.2 查询优化的一般准则 (1)尽可能早地执行选择操作。在查询优化中,这是最基本的一条。 (2)在一些使用频率较高的属性上,建立索引和分类排序。 (3)同一关系上的投影和选择运算同时进行,这样可避免重复扫描关系。 (4)把选择与选择前面的笛卡儿积结合起来成为一个连接运算。 (5)把投影运算与其前后的双目运算结合起来进行,以免重复扫描文件。 (6)找出公共子表达式,并将该表达式结果预先计算并加以保留,需要时直接从文件读取,以免重复计算。 数据库原理
2.3.4 关系代数表达式优化的算法 关系查询优化的步骤一般有以下四个: • (1)把查询结果转换成内部表示形式,一般是语法树。 • (2)选择合适的等价变换规则,把语法树转换成优化形式。 • (3)选择底层的操作算法,根据存取路径、数据的存储分布情况等,为语法树中的每个操作选择合适的操作算法。 • (4)生成查询执行方案。由以上三条最后生成了一系列的内部操作。根据这些内部操作要求的执行次序,确定一个执行方案。 数据库原理
2.3.4 关系代数表达式优化的算法 (1)利用关系代数等价变换规则4把形如σF1F2…Fn(E)的式子变换为 σF1(σF2(…σF(E)…)) (2)对于每一个选择,使用变化规则4到规则8,尽可能把它移到树的叶端(即尽可能使它提早一点执行)。 (3)对每一个投影,利用变化规则3、5、9,也把它尽可能移到树的叶端。 (4)利用规则3、4、5把选择和投影串接成单个选择、单个投影或一个选择后跟一个投影,使多个选择或投影能同时执行或在一次投影中同时完成。 (5)将上述得到的语法树的内结点分组,每个二目运算(×、∩、∪、-)结点与其直接祖先被分为一组(这些直接祖先由σ、π表示)。如果它的子结点一直到叶子都是单目运算(σ、π),则把它们并入该组。但当二目运算是笛卡儿积(×),且后面不是能与它结合成等值连接的选择时,这些一直到叶子的单目运算必须单独分为一组。 (6)每一组的计算必须在其后代组计算后才能进行。根据此限制,生成求表达式的程序。 数据库原理
举例说明 BOOKS(TITLE、AUTHOR、PNAME、LC_NO) READERS(NAME、ADDR、CITY、CARD_NO) LOANS(CARD_NO、LC_NO、DATE) 现在需查询“找出2005年元旦以前借出书籍的书名和读者姓名”。显然这个问题可以写成如下的关系代数运算表达式: COANS. (BOOKS×READERS×LOANS) 数据库原理
生成初始语法树 数据库原理