非计算机应用专业教材 数据库原理与应用 李 明 科学出版社
[学习目标] 了解数据模型概念、层次、网状和面向对象模型概念; 掌握关系的完整性中的实体完整性和参照完整性定义; 掌握传统的集合运算和笛卡尔积的运算; 熟练掌握关系模型概念和特点以及二维表、关系术语; 熟练掌握关系运算(选择、投影、联接等)。
第2章 关系模型 2.1 概述 2.2 关系操作 2.3 关系的完整性
2.1 概述 如何处理现实世界中的数据和信息,在数据库中是用数据模型这个工具来实现的。 2.1 概述 如何处理现实世界中的数据和信息,在数据库中是用数据模型这个工具来实现的。 人们常常首先将现实世界抽象为信息世界,然后将信息世界转换为机器世界。 机器 世界 概念模型 现实世界
模型分两类或者说两个层次 一个是概念模型(也称信息模型):按用户的观点来对数据和信息建模, 另一个是数据模型(后面要讲述的如网状、层次和关系模型等):是按计算成机系统的观点来对数据建模。
数据模型由三部分组成 静 网状 态 1 数据结构 层次 关系 查询 数据模型 2 数据操作 插入 更新 删除 修改 实体 1 数据结构 层次 关系 查询 数据模型 2 数据操作 插入 更新 删除 修改 实体 3 完整性规则 参照 用户定义 静 态 动 态 约束
2.1.1数据结构 数据库系统通常按照数据结构的类型来命名数据模型 : 层次模型 网状模型 关系模型 面向对象的模型 格式化模型
2.1.2层次模型 某 某 大 学 经济学院 工程学院 文科学院 电机系 计算机科学系 硬件专业 软件专业
层次模型有以下两个特征: 1.有且仅有一个结点,而且该结点无 父结点,此结点即为树的根; 2.其它结点有且仅有一个父结点。
2.1.3网状模型 北 京 西 安 上 海 重 庆 广 州
网状模型有以下两个特征: 1.允许有一个以上的结点无父结点; 2.一个结点可以有多个父结点。
2.1.4关系模型 1 二维表 在日常生活中,我们经常会碰到像花名册、工资单和成绩单等二维表格,这些二维表的共同特点是由许多行和列组成,列有列名,行有行号。
通过这张表可以总结出以下特点: (1)表有表名,如06班学生名单。 (2)表由两部分构成,一个表头和若干行数据。 (3)表有若干列,每列有列名如学号和姓名等。 (4)同一列的值取自同一个定义域,例如,籍贯只能取自32个省、直辖市、自治区,学号只能取自20000001到20006000范围。 (5)每一行的数据代表一个学生的信息,同样每一个学生在表中也具有一行,行有行号(在本例中行号是隐含的)。
2.关系术语 关系:一个关系就是一张二维表,每个关系有一个关系名。在计算机里,一个关系可以存储为一个文件。 关系模式:对关系的描述称为关系模式,格式:关系名(属性名l,属性名2,…,属性名n)。一个关系模式对应一个关系文件的结构。如,R(A1,A2,…,An)。 一般用大写字母A,B,C...表示属性,如R(A,B,C,D); R(U),用大写字母U,V,W,X,Y,Z表示几个属性构成的属性组;用小写字母表示属性值。
元组:表中的行称为元组。一行为一个元组,对应存储文件中的一个记录值。单个数据项称之为分量。 列:表中的某一字段,亦称为属性,在一个二维表里,每一列有一个属性名。属性值相当于记录中的数据项或者字段值。 域:属性的取值范围,即不同元组对同一个属性的取值所限定的范围。例如,逻辑型属性只能从逻辑真或逻辑假两个值中取值
码: 超码、候选码、主码、 备用码和外码 关键字=候选码或主码。 超 码:关系中惟一地标识每个元组的属性或属 超 码:关系中惟一地标识每个元组的属性或属 性组。一个关系可能有多个超 码。 候选码:关系中能惟一标识每个元组的最小属性 或属性组。一个关系可能有多个候选码。 主 码:从候选码中选择一个作为该关系的主码。 (身份证号、学生的学生号)
备用码:除了主码之外的所有候选码都是该关系 的备用码等。一个关系可能没有备用 码,也可以具有一个或多个备用码。 外 码:如果一个关系中的属性或属性组并非该 关系的关键字,但它们是另外一 个关系 的关键字,则称其为该关系的外码,也可 称为外关键字。
设教学管理库中有以下三个表: 学生(学号,姓名,性别,出生日期,系名); 选课(学号,课程号,成绩); 课程(课程号,课程名,学分);
学号 姓名 性别 出生日期 系名 学号 课程号 成绩 课程号 课程名 学分
注意:图学生—选课—课程 这三张表的公共字段属性:学生表的学生号和选课表的学生号,课程表的课程号和选课表的课程号,正是公共字段属性把这几张表联系起来。选课关系中的学生号和课程号是参照学生关系和课程关系的外关键字。因此,有了外关键字,才能实现关系之间的动态联接。 (再看一次)
●主属性:在实体中能作为码的属性,如学生关系中的学生号。 ●非主属性。在实体中不能作为码的属性,例:学生关系中的姓名、性别等。 ●元数:关系模式中属性的数目是关系的元数。如图2.3中的选课关系和课程表关系是三元关系,学生关系是五元关系。
3.关系模型的特点 须满足一定的要求,(第三章节所介绍的范式) (2)数据结构单一:无论是实体还是实体之间的联系都用 关系表示。 (1)关系必须规范化:指关系模型中的一个关系模型都必 须满足一定的要求,(第三章节所介绍的范式) (2)数据结构单一:无论是实体还是实体之间的联系都用 关系表示。 (3)集合操作:操作对象和结果都是元组的结合,即关 系。 (4)在关系模型中,用户对数据的检索操作就是从原来的 表中得到一张新的表。
在数据库中关系还具有以下性质: (1)每一列中的分量是同一类型的数据,来自同一个域。 (2)不同的列可出自同一个域,每一列为一个属性,不同的属性要给予不同的属性名。 (3)列的顺序是无关紧要的,即列的次序可以任意交换。 (4)任意两个元组不能完全相同。 (5)行的次序可以任意交换,没有行号。 (6)分量必须取原子值,即每一个分量都必须是不可分的数据项。
2.1.5面向对象模型 面向对象的数据库是面向对象的概念与数据库技术相结合的产物。 它处理的不仅是数字和文本数据,而且要处理图形、多媒体应用的图象和声音等数据信息。所处理的信息的基本单位为对象,每个对象包含记录的概念,但比记录含义更广更复杂。它不仅描述对象(实体)的状态特征(属性),而且要包含所描述对象的行为特征。
面向对象模型的基本特征 面向对象模型中最基本的概念是对象(Object)和类(class)。 对象具有封装性、继承性和多态性。 VFP不但支持标准的过程化程序设计,而且还在语言上进行了扩展.提供了面向对象程序设计。
2.2 关系操作 关系操作的方式是集合操作,即操作的对象与结果都是集合。关系操作是用两种方式来表示的:关系代数和关系演算。 关系操作方式亦称为一次一集合(set-at-a-time)的方式, 非关系模型的数据操作方式则为一次一记录(record-at-a-time)的方式。 关系操作是高度非过程化的 。
2.2.1关系代数 关系代数是一种抽象的查询语言,就是对关系的运算。 传统的集合运算 关系的基本运算有两类: 专门的关系运算
关系代数就是在关系上定义了一些运算,结果仍然是关系关系代数的运算包括: 4个集合运算: 交(INTERSECT) 并(UNION) 差(EXCEPT) 笛卡尔积(EXTENDED CARTESIAN PRODUCT);
4个关系运算: 选择(SELECT) 投影(PROJECT) 连接(JOIN) 除(DIVIDE); 以及辅助这些运算的比较运算、逻辑运算。关系代数就是用这些运算表达对关系数据库的各种查询的,关系代数的运算符如表2.4所示。
一、传统的集合运算 1.并 并运算是一个二元运算符,是由两个关系产生一个新关系。这两个关系的属性个数必须一样。同一位置上的属性的域必须相同。新关系的关系模式与原来的关系的关系模式相同。关系实例是两个关系的关系实例的并。
2.交 交运算类似于并运算,只是新关系的关系实例是两个关系的关系实例的交。两个关系R和S的交运算(如图2.3所示)可以表示成:
3.差 差运算类似于并运算,新关系的关系实例是两个关系的关系实例的差。两个关系R和S的差运算(如图2.4所示)可以表示成:
4.广义笛卡尔积 两个分别具有n个属性和m个属性的关系R和S的广义笛卡尔积是一个具有(n+m)个属性的关系。新关系的关系模式由关系R和关系S连接而成,关系实例中的元组的前n列是关系R的一个元组,后m列是关系S的一个元组。
选择是一个一元运算符,选择的结果产生了一个新关系,新关系的关系模式与被操作关系的关系模式相同,关系实例是被操作关系中满足条件的元组, 二、 专门的关系运算 1.选择 选择是一个一元运算符,选择的结果产生了一个新关系,新关系的关系模式与被操作关系的关系模式相同,关系实例是被操作关系中满足条件的元组, S=δc(R) S的模式与R的模式相同; C是条件表达式。
S=ΠA1,A2,,…,An(R) 2.投影 投影是指从指定的关系中保留一些列,去掉其他列后形成新的关系。 投影运算的一般表达式为: S是投影运算产生的新关系,它只是具有R的属性A1,A2,,…,An所对应的列。
注意:投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组,因为取消了某些属性列后,就可能出现重复行,应取消这些完全相同的行。见下例 例2.6 设一个关系模式为R(A,B,C),对应的关系内容为R={{1,10,50},{2,10,60},{3,20,72},{4,30,60}},如表2.12所示。则ПB(δC<70(R))的运算结果中包含2个元组,每个元组包含1个分量,如表2.13所示。
ПB(δC<70(R)) A B C 1 10 50 2 60 3 20 72 4 30 B 10 30
3.连接 连接运算是从两个关系的笛卡尔积中,在水平方向进行选择运算,在垂直方向进行投影运算从而产生一个新的关系,关系R和S的连接运算可以记作 : R 条件 S 条件形式是AθB,θ= { =,>,≥,<,≤,≠}; A是关系R中的属性或一个常数,B是关系S中的属性或一个常数,A和B必须是同一个定义域(相同的类型)。
θ为“=”的连接运算称为等值连接。自然连接是一种特殊的等值连接 。表2.18 自然连接示例 θ为“=”的连接运算称为等值连接。自然连接是一种特殊的等值连接 。表2.18 自然连接示例 学号 成绩 总评 001 30 15 002 18 20 003 12 004 25 005 43 35 总 评 等级 15 及格 20 中等 30 良好 45 优秀 学号 成绩 总评 等级 001 30 15 及格 002 18 20 中等 003 12 004 25 优秀
(2)左连接(left join)运算 左连接运算是一种特殊的扩展连接方式,简记LJN。当满足条件就连接起来形成中间表中的新元组外,还把第一个表中的没有形成连接的所有元组也加入到中间表中。这些元组在第二个表上所对应的列值被自动置空。
例2.9 左连接;(R)LJN(S)得到的结果 学号a 平时成绩b 总评c 等级d 001 30 15 及格 002 18 20 中等 003 12 004 25 良好 NULL 45 优秀
(3)右连接(Right Join)运算 右连接运算简记RJN,对于右连接,除了满足条件就连接起来形成中间表中的新元组外,还把第二个表中的没有形成连接的所有元组也加入到中间表中。这些元组在第一个表上所对应的列值被自动置空。
例 2.10 右连接运算,R)RJN(S)得到的结果 学号a 平时成绩b 总评c 等级d 001 30 15 及格 002 18 20 中等 003 12 004 25 良好 005 43 35 NULL
图2.8 连接运算
*4.除 给定关系R(X,Y)和S(Y,Z),其中X,Y,Z为属性组。R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域集。R与S的除运算得到一个新的关系P(X),对于任何一个元组t∈P(X),有t∈πX(R),并且t×πY(S) ∈ R。
πSno,Grade(σCno='1137'(SC)) πSno, Sname(S(σCno='1137'(SC))) 2.2.3 用关系代数表示关系操作 关系代数可以用来表示对关系的查询操作和更新操作。 [例1] 查询学习课程号1137的学生的学号和成绩。 πSno,Grade(σCno='1137'(SC)) [例2] 查询学习课程号为1137的学生的学号和姓名。 πSno, Sname(S(σCno='1137'(SC))) [例3] 查询选修课程名为“管理学”的学生的学号和姓名。 πSno, Sname(S(σCname='管理学'(C))SC)
πSno(σCno='1024' ∨ Cno='1136'(SC)) [例4] 查询选修课程号为1024或1136的学生的学号。 πSno(σCno='1024' ∨ Cno='1136'(SC)) [例5] 查询至少选修课程号为1024与1136的学生的学号。 π1(σ1=4 ∧ 2='1024' ∧ 5='1136'(SC×SC)) 在本例中SC×SC表示关系SC自身进行笛卡尔积,结果中有列重名的现象,这时,不能写Sno=Sno,因为Sno具有二义性(有两个列的名称都叫Sno),所以用1=4来表示,1表示第1列,4表示第4列。
πSname, Dept(S)-πSname, Dept(S(σCno='1156'(SC))) [例6] 查询不学课程号为1156的学生的姓名和所在系。 πSname, Dept(S)-πSname, Dept(S(σCno='1156'(SC))) [例7] 查询学习全部课程的学生的学号。 πSno(SC)÷C
[例8] 查询所学课程包含学生葛波所学课程的学生的姓名。 学生葛波所学的课程可以表达为: πCno(σsname=‘江峰'(S)) 所学课程包含学生葛波所学课程的学生的学号是: πSno(SC)÷πCno(σsname='江峰'(S)) 这些学生姓名是: πSname(S(πSno(SC)÷πCno(σsname='江峰'(S))))
(4) 查询优化 查询优化的目的是针对一个查询,找出一种既省时间,又省空间,而且效率又比较高的方案。查询优化一般可分为代数优化和物理优化。代数优化是指关系代数表达式的优化;物理优化则是指存取路径和低层操作算法的选择。查询优化在关系数据库系统中有着非常重要的地位。
优化的策略主要有以下几点: 1)一元选择(针对一个关系、只涉及一个属性的 选择)先做; 2)投影、选择同时做; 3)乘积、选择合并做(把笛卡尔积与随后以选择 形式出现的连接条件一起做连接运算); 4)索引、排序预先做。 以上几点需要理解。根据表达式优化的算法步骤对给定表达式进行优化。
*2.2.2关系演算 关系演算是以数理逻辑中的谓词演算为基础的。把数理逻辑中的谓词演算应用到关系运算中就得到关系演算。关系演算分为元组关系演算和域关系演算两种。元组关系演算以元组为变量,简称元组演算;域关系演算以域为变量,简称域演算。 以上两类演算需要一定的离散数学基础,对非计算机应用专业的学生不作要求。
关系数据库语言可以分为以下三类 关 系 数 据 库 语 言 关系代数 ISBL 元组关系演算语言 ALPHA ,QUE 关系演算语言 域关系演算语言 例如 QBE 具有关系代数和关系演算双重特点的语言 SQL 关 系 数 据 库 语 言
2.3关系的完整性 关系模型的完整性共有三类: 实体完整性 参照完整性 用户定义的完整性。 关 系 完 整 性
2.3.1实体完整性 实体完整性规则:若属性A是基本关系R的主属性,则属性A不能取空值。或者说任何关系中每个元组的主码不能为空。如果出现空值,那么主键值就起不了惟一标织元组的作用。
2.3.2参照完整性 参照完整性规则:如果属性集K是关系模式R1的主键,K也是关系模式R2的外键,那么在R2的关系中,K的取值只允许两种可能,或者为空值,或者等于R1关系中某个主键值。这条规则的实质是“不允许引用不存在的实体”
2.3.3用户定义的完整性 实体完整性和参照完整性用于任何关系数据库系统。用户定义的完整性则是针对某一 具体数据库的约束条件,由应用环境决定,它反映了某一具体应用所涉及的数据必须满足的语义要求。
本 章 小 结 1.数据库管理系统所支持的数据模型分为四种: 层次模型、网状模型、关系模型、面向对象模型。 传统的说法,有三种数据模型,即前三种。 其中,层次模型和网状模型可统称为格式化模型。 2.关系模型的特点:关系必须规范化、数据结构单一和集合操作
3.一个关系就是一个二维表。表中的一行是关系的一个元组,表中的一列为关系中一个同属性的具体值。应当掌握关系模型的持点和关系运算。关系运算包括传统的集合运算(并、差、交)和专门的关系运算(选择、投影、联接)。此外关键字是一个很重要的概念,它是使关系之间建立联系的手段。
4.在连接运算中自然连接是一种特殊且有用的连接,它是把两个关系按属性名相同进行等值连接,对于每对相同的属性只保留一个在结果中。在等值连接中,其中连接存在着与连接条件对应的重复取值的属性,为了减少数据的重复存储,应通过投影去掉一个属性。 5 .自然连接还有两种特殊的扩展连接方式,左连接和右连接。
6.在关系模型中,实体和实体之间的联系都是用关系表示的。二维表中存放了两类数据:实体本身的数据;实体间的联系。 7.关系术语:关系、元组、列(属性)、域、码、主属性、非主属性、关系模式、元数、关系模式和外关键字。 8.传统集合运算是二目运算,包括:并,差,交,广义笛卡尔积四种运算;专门的关系运算包括:投影、选择、连接和除等四种运算。
9.查询优化的目的就是为了系统在执行时既省时间又能提高效率,在关系代数运算中,通常是先进行笛卡尔积或联接运算,再进行选择(使关系中元组个数尽量少)和投影(使关系中属性个数较少),恰当地安排选择、投影和联接的顺序,就可实现查询优化。
完