数据库系统原理教程.docx
《数据库系统原理教程.docx》由会员分享,可在线阅读,更多相关《数据库系统原理教程.docx(27页珍藏版)》请在冰豆网上搜索。
![数据库系统原理教程.docx](https://file1.bdocx.com/fileroot1/2023-2/22/0c3ade70-758d-430d-ac0d-902db5bc2161/0c3ade70-758d-430d-ac0d-902db5bc21611.gif)
数据库系统原理教程
《数据库系统原理教程》学习指导书
第一章绪论
重点难点释疑
一、用数据库系统来管理软件所具有的特点
首先必须理解数据库系统的相关基本概念。
在此基础上进一步理解其特点所在。
(1)数据结构化:
这是数据库与文件系统的根本区别,这一特点使得数据之间的联系必须以某种约定规则进行描述;
(2)数据的共享性好,冗余度低:
数据库系统中的数据不是面向单个具体应用,而是面向整个系统,既能减少数据冗余,又能避免数据的不相容和不一致;
(3)数据独立性高:
理解两种映像。
一类存在于数据的总体逻辑结构与局部逻辑结构之间;另一类存在于数据的存储结构与逻辑结构之间;
(4)数据由DBMS统一管理和控制:
了解DBMS的主要管理功能和控制功能。
二、理解概念模型
首先必须理解相关的基本概念,如实体、属性、码、域等;进一步理解实体之间的联系及其类型定义,此处比较难的是多对多联系的概念。
由于是初次接触数据库原理,可能对这个概念的认识有限,必须在本教材后继章节中不断体会其定义的内涵所在。
注意教材第11页到第12页文字部分对其形式化的定义和分析。
学习简单的E-R图,理解教材中所举的例子。
需要注意的是,联系本身也是一种实体型,也可以有属性。
三、掌握最常用的数据模型,特别是其中的关系模型
任何一个数据库管理系统都至少提供了一种数据模型,因此数据模型是数据库研究的基础。
根据某种数据模型,人们可以用数据世界来合理表示现实世界的某一部分,并且将数据世界映照成一个意识世界(用户界面)。
数据模型有两方面含义:
数据以何种形式存储、用户以何种形式看待数据。
常见的数据模型有层次模型、网状模型、关系模型、逻辑模型、实体联系(E-R)模型和面向着对象模型等。
层次模型的每一个结点代表一个记录类型,而这些记录类型之间的关系具有层次性。
一般它只能直接表示一对多的联系,如果要用它表示多对多联系则必须使用冗余结点法或虚拟结点法进行分解。
网状模型允许结点没有或有多个双亲结点,也允许两个结点之间出现多个联系。
层次模型可视为其特例。
关系数据模型最为常用和复杂。
其相关基本概念在教材21页至22页,这里只是简单陈述,具体内容将会在后继章节中展开。
四、关于数据库设计步骤
需求分析阶段要在用户调查的基础上,通过分析,逐步明确用户对系统的需求,包括数据需求和围绕这些数据的业务处理需求。
通过对组织、部门、企业等进行详细调查,在了解现行系统的概况、确定新系统功能的过程中,收集支持系统目标的基础数据及其处理方法。
概念设计阶段要产生反映企业各组织信息需求的数据库概念结构,即概念模型。
概念模型必须具备丰富的语义表达能力、易于交流和理解、易于变动、易于向各种数据模型转换、易于从概念模型导出与DBMS有关的逻辑模型等特点。
逻辑设计阶段除了要把E-R图的实体和联系类型,转换成选定的DBMS支持的数据类型,还要设计子模式并对模式进行评价,最后为了使模式适应信息的不同表示,需要优化模式。
物理设计阶段的主要任务是对数据库中数据在物理设备上的存放结构和存取方法进行设计。
数据库物理结构依赖于给定的计算机系统,而且与具体选用的DBMS密切相关。
物理设计常常包括某些操作约束,如响应时间与存储要求等。
第二章关系数据库
重点难点释疑
一、关于关系的定义
关系是笛卡尔积的子集,所以关系可以看作是一个二维表,表的每行对应一个元组,表的每列对应一个域。
若关系中的某一属性组的值能够唯一标识一个元组,而其真子集不行,则称该属性组为候选码。
若一个关系有多个候选码,则选定其中一个作为主码。
关系可以有三种类型:
基本关系(通常又称为基本表或基表)、查询表和视图表。
基本关系有六条性质:
(1)每一列中分量的数据类型相同。
一般还要进一步要求每一列的数据量范围相同,即同一列的数据值不能偏差过大;
(2)域名和属性名之间要有一个转换映射的关系;
(3)列的顺序可以交换,不影响基本表的内容描述;
(4)不能有完全一样的两个元组出现同一张基本表中,否则就会产生数据冗余;
(5)行的次序也可以交换;
(6)分量不可再分。
这也就是说,每一个分量必须是最小的描述单位,不能使用原子描述的集合来构造为一个分量。
二、理解关系模式
关系模式是一个五元组。
关系模式用来描述关系这个元组集合的结构特性,即它是有哪些属性构成的,这些属性来自哪些域等等。
它可以形式化地表示为:
R(U,D,DOM,F)
其中R为关系名,U为组成该关系的属性名集合,D为属性组U中属性所来自的域,DOM为属性向域的映像集合,F为属性间数据的依赖关系集合。
深入理解关系和关系模式的“关系”。
关系实际上是关系模式在某一时刻的状态或内容。
也就是说,关系模式是类型,关系是该类型中的值。
关系模式是静态的、稳定的,而关系是动态的、随时间不断变化的,因为关系操作在不断地更新数据库中的数据。
三、参照完整性
理解参照完整性之前必须先弄清楚实体完整性规则:
若属性A是基本关系R的主属性,则属性A不能取空值。
注意这里的不能取空值是针对基本关系的所有主属性而并非仅仅主码整体,主码整体相当是属性的集合,这是不同的概念。
为了更好地掌握参照完整性的内涵,还要认真学习几个基本定义。
设F是基本关系R的一个或一组属性,但不是关系R的码,如果F与基本关系S的主码KS相对应,则称F是基本关系R的外码,并称基本关系R为参照关系,基本关系S为被参照关系或目标关系。
关系R和S不一定是不同的关系。
注意,KS和F必须定义在同一个(或一组)域上。
参照完整性规则是指如果属性(或属性组)F是基本关系R的外码,它与基本关系S的主码KS相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为或者是取空值(注意是每个属性值都空)或者等于S中的某个元组的主码值。
四、关系代数
关系代数是一种抽象的查询语言,是关系数据操纵语言的一种传统表达方式。
它的运算对象是关系,运算结果也为关系。
它的运算符包括四类,即集合运算符、专门的关系运算符、算术比较符和逻辑运算符。
专门的运算符主要包括以下类型:
(1)选择:
又称限制,是在关系R中选择满足给定条件的诸元组。
它实际上是从关系R中选取是逻辑表达式F为真的元组。
这是从行的角度进行的运算;
(2)投影:
是指从关系R中选择出若干属性列组成新的关系。
投影是从列的角度进行的运算;
(3)连接:
是指从两个关系的笛卡尔积中选取属性间满足一定条件的元组。
连接运算又分为等值连接和自然连接两种;
(4)除:
给定关系R(X,Y)和S(Y,Z),其中X,Y,Z均为属性组。
R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在X属性列上的投影:
元组在X上分量值x的象集YX包含S在Y上投影的集合。
除操作是同时从行和列角度进行运算。
五、关系演算
按照教材内容编排,主要掌握以下两大类关系演算语言:
(1)元组关系演算语言ALPHA:
主要包括GET,PUT,HOLD,UPDATE,DELETE,DROP六条语句,基本格式是操作语句+工作空间名(表达式)+:
+操作条件。
其中表达式用于指定语句的操作对象,可以是关系名或属性名,一条语句可以同时操作多个关系或多个属性。
操作条件是一个逻辑表达式,用于将操作对象限定在满足条件的元组中,操作条件可以为空;
(2)域关系演算语言QBE:
域关系演算以元组变量的分量即域变量作为谓词变元的基本对象。
QBE最突出的特点是它的操作方式。
它是一种高度非过程化的基于屏幕表格的查询语言,用户通过终端屏幕编辑程序以填写表格的方式构造查询要求,而查询结果也是以表格形式显示。
第三章关系数据库标准语言SQL
重点难点释疑
一、关系数据库标准语言SQL的特点
是一个标准的数据库语言,是面向集合的描述性非过程化语言。
它功能强,效率高,简单易学易维护。
然而SQL语言由于以上优点,同时也出现了这样一个问题:
它是非过程性语言,即大多数语句都是独立执行的,与上下文无关,而绝大部分应用都是一个完整的过程,显然用SQL完全实现这些功能是很困难的。
所以大多数数据库公司为了解决此问题,作了如下两方面的工作:
(1)扩充SQL,在SQL中引入过程性结构;
(2)把SQL嵌入到高级语言中,以便一起完成一个完整的应用。
二、SQL语言共分为四大类
数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL。
(1)数据查询语言DQL:
数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE子句组成的查询块;
(2)数据操纵语言:
数据操纵语言DML主要有三种形式:
1)插入:
INSERT,
2)更新:
UPDATE,3)删除:
DELETE;
(3)数据定义语言DDL:
数据定义语言DDL用来创建数据库中的各种对象------表、视图、索引、同义词、聚簇等;
(4)数据控制语言DCL:
数据控制语言DCL用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,对数据库实行监视等。
三、数据定义
SQL数据定义功能包括定义数据库、基本表、索引和视图。
这部分主要有以下要点和难点:
(1)基本表的定义及变更:
基本表是非导出关系,其定义涉及表名、列名及数据类型等,新建的表由两部分组成:
其一为表和一组列名,其二是实际存放的数据(即可在定义表的同时,直接存放数据到表中);列名为用户自定义的易于理解的名称,列名中不能使用空格;
[NOTNULL/NULL]指出该列是否允许存放空值,SQL语言支持空值的概念,所谓空值是“不知道”或“无意义”的值,值得注意的是数据“0”和空格都不是空值,系统一般默认允许为空值,所以当不允许为空值时,必须明确使用NOTNULL;
[UNIQUE]将列按照其规定的顺序进行排列,如不指定排列顺序,则按列的定义顺序排列;
[PRIMARYKEY]用于指定表的主键(即关系中的主属性),实体完整性约束条件规定:
主键必须是唯一的,非空的;
(2)视图定义与删除:
在SQL中,视图是外模式一级数据结构的基本单位。
它是从一个或几个基本表中导出的表,是从现有基本表中抽取若干子集组成用户的“专用表”。
这种构造方式必须使用SQL中的SELECT语句来实现。
在定义一个视图时,只是把其定义存放在系统的数据中,而并不直接存储视图对应的数据,直到用户使用视图时才去求得对应的数据。
(3)索引的定义与删除:
索引属于物理存储概念,而不是逻辑的概念。
在SQL中抛弃了索引概念,直接使用主键概念。
值得一提的是,有些关系DBMS同时包括索引机制和主键机制,推荐使用主键机制,因为它对系统资源占用较低且效率较高。
四、查询
本节内容是全书的重点,也是考点分布比较集中的部分,请同学们多花精力学习。
(1)SQL是一种查询功能很强的语言,只要是数据库存在的数据,总能通过适当的方法将它从数据库中查找出来。
SQL中的查询语句只有一个:
SELECT,它可与其它语句配合完成所有的查询功能。
SELECT语句的完整语法,可以有6个子句。
完整的语法如下:
SELECT目标表的列名或列表达式集合
FROM基本表或(和)视图集合
[WHERE条件表达式]
[GROUPBY列名集合[HAVING组条件表达式]]
[ORDERBY列名[集合]…]
整个语句的语义如下:
从FROM子句中列出的表中,选择满足WHERE子句中给出的条件表达式的元组,然后按GROUPBY子句(分组子句)中指定列的值分组,再提取满足HAVING子句中组条件表达式的那些组,按SELECT子句给出的列名或列表达式求值输出。
ORDER子句(排序子句)是对输出的目标表进行重新排序,并可附加说明ASC(升序)或DESC(降序)排列。
在WHERE子句中的条件表达式F中可出现下列操作符和运算函数:
算术比较运算符:
>,>=,=,>。
逻辑运算符:
AND,OR,NOT。
集合运算符:
UNION(并),INTERSECT(交),EXCEPT(差)。
集合成员资格运算符:
IN,NOTIN
谓词:
EXISTS(存在量词),ALL,SOME,UNIQUE。
聚合函数:
AVG(平均值),MIN(最小值),MAX(最大值),SUM(和),COUNT(计数)。
运算对象还可以是另一个SELECT语句,即SELECT语句可以嵌套。
上面只是列出了WHERE子句中可出现的几种主要操作,由于WHERE子句中的条件表达式可以很复杂,因此SELECT句型能表达的语义远比其数学原形要复杂得多。
(2)条件查询:
条件查询即带有WHERE子句的查询,所要查询的对象必须满足WHERE子句给出的条件。
使用UNIQUE是不从查询结果集中去掉重复行,如果使用DISTINCT则会去掉重复行。
另外逻辑运算符的优先顺序为NOT→AND→OR。
当查询涉及多个基本表时用嵌套查询逐次求解层次分明,具有结构程序设计特点。
在嵌套查询中,IN是常用到的谓词。
若用户能确切知道内层查询返回的是单值,那么也可用算术比较运算符表示用户的要求。
(3)计算查询:
计算查询是指通过系统提供的特定函数(聚合函数)在语句中的直接使用而获得某些只有经过计算才能得到的结果。
常用的函数有:
COUNT(*)计算元组的个数;
COUNT(列名)对某一列中的值计算个数;
SUM(列名)求某一列值的总和(此列值是数值型);
AVG(列名)求某一列值的平均值(此列值是数值型);
MAX(列名)求某一列值中的最大值;
MIN(列名)求某一列值中的最小值。
五、数据更新
数据更新包括数据插入、删除和修改操作。
它们分别由INSERT语句,DELETE语句及UPDATE语句完成。
这些操作都可在任何基本表上进行,但在视图上有所限制。
其中,当视图是由单个基本表导出时,可进行插入和修改操作,但不能进行删除操作;当视图是从多个基本表中导出时,上述三种操作都不能进行。
(1)数据插入:
将数据插入SQL的基本表有两种方式:
一种是单元组的插入,另一种是多元组的插入。
(2)数据删除:
SQL的删除操作是指从基本表中删除满足WHERE的记录。
如果没有WHERE子句,则删除表中全部记录,但表结构依然存在。
其语句格式为:
SQL的删除语句和修改语句中的WHERE子句用法与SELECT中WHERE子句用法相同。
数据的删除和修改操作,实际上要先做SELECT查询操作,然后再把找到的元组删除或修改。
六、视图
视图是原始数据库数据的一种变换,是查看表中数据的另外一种方式。
可以将视图看成是一个移动的窗口,通过它可以看到感兴趣的数据。
视图是从一个或多个实际表中获得的,这些表的数据存放在数据库中。
那些用于产生视图的表叫做该视图的基表。
一个视图也可以从另一个视图中产生。
视图的定义存在数据库中,与此定义相关的数据并没有再存一份于数据库中。
通过视图看到的数据存放在基表中。
视图看上去非常像数据库的物理表,对它的操作同任何其它的表一样。
当通过视图修改数据时,实际上是在改变基表中的数据;相反地,基表数据的改变也会自动反映在由基表产生的视图中。
由于逻辑上的原因,有些视图可以修改对应的基表,有些则不能(仅仅能查询)。
视图有以下的作用:
*简单性。
看到的就是需要的。
视图不仅可以简化用户对数据的理解,也可以简化他们的操作。
那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件;
*安全性。
通过视图用户只能查询和修改他们所能见到的数据。
数据库中的其它数据则既看不见也取不到。
数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定的列上。
通过视图,用户可以被限制在数据的不同子集上;
*逻辑数据独立性。
视图可帮助用户屏蔽真实表结构变化带来的影响。
七、数据控制
由于数据库管理系统是一个多用户系统,为了控制用户对数据的存取权利,保持数据的共享及完全性,SQL语言提供了一系列的数据控制功能。
其中,主要包括安全性控制、完整性控制、事务控制和并发控制。
(1)安全性控制:
数据的安全性是指保护数据库,以防非法使用造成数据泄露和破坏。
保证数据安全性的主要方法是通过对数据库存取权力的控制来防止非法使用数据库中的数据。
即限定不同用户操作不同的数据对象的权限。
存取权控制包括权力的授予、检查和撤消。
权力授予和撤消命令由数据库管理员或特定应用人员使用。
系统在对数据库操作前,先核实相应用户是否有权在相应数据上进行所要求的操作。
(2)完整性控制:
数据库的完整性是指数据的正确性和相容性,这是数据库理论中的重要概念。
完整性控制的主要目的是防止语义上不正确的数据进入数据库。
关系系统中的完整性约束条件包括实体完整性、参照完整性和用户定义完整性。
而完整性约束条件的定义主要是通过CREATETABLE语句中的[CHECK]子句来完成。
另外,还有一些辅助命令可以进行数据完整性保护。
如UNIQUE和NOTNULL,前者用于防止重复值进入数据库,后者用于防止空值。
(3)事务控制:
事务是并发控制的基本单位,也是恢复的基本单位。
在SQL中支持事务的概念。
所谓事务,是用户定义的一个操作序列(集合),这些操作要么都做,要么一个都不做,是一个不可分割的整体。
一个事务通常以BEGINTRANSACTION开始,以COMMIT或ROLLBACK结束。
(4)并发控制:
数据库作为共享资源,允许多个用户程序并行地存取数据。
当多个用户并行地操作数据库时,需要通过并发控制对它们加以协调、控制,以保证并发操作的正确执行,并保证数据库的一致性。
第四章关系数据库设计理论
重点难点释疑
一、“依赖”的几个基本定义
数据依赖是关系中各属性间互相依存,互相制约的各种不同形式。
它是数据内在的性质。
有许多类型的数据依赖,其中最重要的是函数依赖和多值依赖。
(1)设R(U)是属性集U上的关系模式,X、Y是U的子集,只要r是R的当前值,对r中任意两个元组s和t都有s[X]=t[X]蕴涵s[Y]=t[Y],那么称X’函数确定Y’或Y’函数依赖于X’,记作X→Y。
这里,s[X]表示元组s在属性集X上的值,t[X]类同。
当前值r的两个不同的元组中,如果X值相同,就一定要求Y值相同。
也就是说一个X值就有一个精确的Y值与对应,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不相等。
若X→Y,则称X为决定因素。
如果X→Y,但Y¢X,则称X→Y是非平凡的函数依赖。
(2)在R(U)中,如果X→Y,并且对于X的任何真子集X’,都有Y不函数依赖于X’(记作X→Y),则称Y对X完全函数依赖。
在R(U)中,如果X→Y,(Y¢X),X→Y,Y→Z,则称Z对X传递函数依赖。
(3)设K为关系模式R上的属性或属性组合,U为R上的所有属性集合,如果U完全函数依赖于K,则K为R的侯选码。
如果侯选码多于一个,则可选定其中的一个作为主码,也可称为主关键字。
包含在任何一个候选码中的属性称为主属性,不包含在任何码中的属性称为非主属性或非码属性。
如果关系模式R中的属性或属性组X不是R的码,但X是另一个关系模式的码,则称X是R的外部码(Foreignkey)。
二、关于范式
关系的全体包括规范化的和非规范化的。
关系模式的规范化是指把一个低级的范式通过模式分解转换为若干个高一级范式关系模式的集合。
(1)第一范式(1NF):
如果关系模式R的每一个关系r的属性值都是不可分的原子值,那么称关系R属于第一范式(1NF)。
属于1NF的关系称为规范化关系,不属于1NF的关系称为非规范化关系。
(2)第二范式(2NF):
如果关系模式R属性1NF,并且每一个非主属性完全函数依赖于各个候选码,那么称R属于第二范式(2NF)。
如果某个数据库模式中的每个关系模式都是2NF,则这个数据模式称为2NF,则这个数据库模式称为2NF的数据库模式。
(3)第三范式(3NF):
如果关系模式R是1NF,且每个非主属性都不传递函数依赖于R的侯选码,则称R属于第三范式(3NF)。
如果某个数据库模式中的每个关系模式都是3NF,则称为3NF的数据库模式。
(4)BCNF:
BCNF(BoyceCoddNormalForm)是由Boyce和Codd提出的,比3NF又进一步,通常认为BCNF是修正的第三范式,有时也称为第三范式。
如果关系模式R是1NF,如果X→Y且Y¢X时X必含有码,则R属于BCNF。
如果一个数据库模式中的每个关系模式都属于BCNF,则称该数据库模式是属于BCNF的数据库模式。
也就是说,关系R属于BCNF,当且仅当每个决定因素都包含码。
可以证明,如果一个关系R属于BCNF,则R属于3NF。
但是,如果R属于3NF,那么R并不一定属于BCNF。
一个关系如果属于BCNF,那么所有的非主属性对每一个码都是完全函数依赖;所有的主属性对每一个不包含它的码也是完全函数依赖;不存在任何属性能够完全函数依赖于不是码的任何一组属性。
三、关系模式的规范化应遵循的原则
(1)关系模式进行无损连接分解。
关系模式分解过程中数据不能丢失或增加,必须把全局关系模式中的所有数据无损地分解到各个子关系模式中,以保证数据地完整性;
(2)合理选择规范化程度。
考虑到存取效率,低级模式造成地冗余度很大,既浪费了存储空间,又影响了数据地一致性,因此希望一个字模式地属性越少越好,即取高级范式;若考虑到查询效率,低级范式又比高级范式好,此时连接运算的代价较小,这是一对矛盾,所以应根据情况,合理选择规范化程度;
(3)正确性与可实现性原则。
四、关系模式规范化的基本步骤
(1)对1NF关系进行投影,消除原关系中非主属性对码的函数依赖,将1NF关系转换为若干个2NF关系;
(2)对2NF关系进行投影,消除原关系中非主属性对码的传递函数依赖,从而产生一组3NF关系;
(3)对3NF关系进行投影,消除原关系中主属性对码的部分函数依赖褐传递函数依赖(也就是说,使决定属性都成为投影的候选码),得到一组BCNF关系。
以上三步也可以合并为一步:
对原关系进行投影,消除决定属性不是候选码的任何函数依赖;
(4)对BCNF关系进行投影,消除原关系中非平凡且非函数依赖的多值依赖,从而产生一组4NF关系;
(5)对4NF关系进行投影,消除原关系中不是由候选码所蕴含的连接依赖,即可得到一组5NF关系。
第五章数据库保护
重点难点释疑
一、数据库的安全性
(1)数据库的安全性是指保护数据以防止不合法的使用所造成的数据泄露,更改或破坏。
计算机系统都有这个问题,在数据系统中大量数据集中存放,为许多用户共享,使安全性问题更为突出。
在一般的计算机系统中,安全措施是一级一级设置的。
在DB存储这一级可采用密码技术,当物理存储设备失窃后,它起到保密作用。
在数据库系统这一级中提供两种控制:
用户标识和鉴定,数据存取控制。
(2)在ORACLE多用户数据库系统中,安全机制所做的工作包括防止非授权的数据库存取;防止非授权的对模式对象的存取;控制磁盘使用;控制系统资源使用(如CPU时间);审计用户动作。
在ORACLE服务器上提供了一种任意存取控制,是一种基于特权限制信息存取在方法。
用户要存取对象必须有相应的特权授给该用户。
已授权的用户可任意地将它授权给其它用户,由于这个原因,这种安全性类型叫做任意型。
ORACLE利用下列机制管理数据库安全性:
数据库用户和模式、特权、角色、存储设置和空间份额、资源限制以及审计。
二、数据库的完整性
数据库的完整性是指数据的正确性和相容性。
DBMS必须提供一种功能来保证数据库的数据完整性,这种功能称为完整性检查。
数据完整性是为了防止数据库存在不符合语义的数据,防止错误信息输入和输出,即数据要遵守由DBA或应用开发者决定的一组预定义的规则。
ORACL