数据库概论.docx
《数据库概论.docx》由会员分享,可在线阅读,更多相关《数据库概论.docx(17页珍藏版)》请在冰豆网上搜索。
![数据库概论.docx](https://file1.bdocx.com/fileroot1/2023-1/27/d28feda7-c044-4812-803d-15d81200cc10/d28feda7-c044-4812-803d-15d81200cc101.gif)
数据库概论
第一章数据库概论
数据库技术发展的三个阶段:
人工管理阶段、文件系统阶段、数据库阶段。
文件系统的缺点:
数据沉余性、数据不一致性、数据联系弱。
数据描述的三个领域:
现实世界、信息世界、机器世界。
信息世界:
实体集、实体、属性、实体标识符。
机器世界:
文件、记录、字段、键。
数据联系的描述:
1:
1、1:
N、M:
N。
数据模型:
表示实体类型及实体间联系的模型成为数据模型。
概念数据模型:
独立于计算机系统的模型,完全不涉及数据在计算机系统内的表示。
是面向信息世界的模型,是现实世界的第一层抽象。
如“实体联系模型”。
结构数据模型:
直接面向数据库的逻辑结构,是现实世界的第二层抽象,有严格的形式化定义,便于在计算机系统内实现。
比如层次模型、网状模型、关系模型。
结构模型的三个部分:
数据结构:
是对实体类型和实体间联系的表达和实现。
数据操作:
是对数据进行检索和更新两类操作的实现。
数据完整性约束:
给出数据及数据间联系应具备的制约和依赖规则。
层次模型:
用树型结构表示实体类型及实体间的联系,记录之间的联系通过指针实现。
缺点是:
一、只能实现1:
N联系。
二、编写程序复杂。
网状模型:
用有向图表示实体类性及实体间联系,记录间联系通过指针实现,M:
N联系很容易实现。
缺点是编写应用程序复杂。
关系模型:
用二维表格表示实体集,外键表示实体间联系。
三级结构:
内部级、概念级、外部级。
外部级:
对单个用户的数据视图的描述称为外模式。
概念级:
对全局数据视图的描述称为概念模式。
内部级:
对物理存储数据视图的描述称为内模式。
两级映像:
模式/内模式映像:
位于概念级和内部级之间,定义概念模式和内模式之间的对应性。
一般在内模式中描述。
外模式/模式映像:
位于外部级和概念级之间,定义外模式和概念模式之间的对应性。
一般在外模式中描述。
两级数据独立性:
物理数据独立性:
内模式改变时,尽量保持概念模式不变。
逻辑数据独立性:
概念模式改变时,尽量保持外模式不变。
数据库管理系统(DBMS):
数据库系统中管理数据库的软件,是数据库系统的核心组成部分。
DBMS的功能:
数据库定义、数据库操纵、数据库保护、数据库的存储管理、数据库维护、数据字典。
数据库定义:
使用数据库定义语言(DDL),定义三级模式、完整性约束、安全控制约束。
数据库操纵:
使用数据库操纵语言(DML)。
过程性DML,需要指出需要什么数据及怎样获得这些数据;非过程性DML,比如SQL只需要指出需要什么数据,操作简便但增加系统开销,需要查询优化技术弥补。
数据字典:
存放三级结构定义的数据库称为数据字典
DBMS组成:
查询处理器、存储管理器。
查询处理器:
DDL编译器、DML编译器、嵌入式DML预编译器、查询运行核心程序。
存储管理器:
授权和完整性管理器、事物管理器、文件管理器、缓冲区管理器。
DBS组成:
DB、软件、硬件、DBA。
DBS用户:
DBA:
控制数据库整体结构的人士,负责物理结构、逻辑结构的定义和修改,与DBMS的界面是数据库模式。
专业用户:
数据库设计中的上层人士,如系统分析员,使用专用的查询语言操作数据,与DBMS的界面是数据库查询。
程序员:
使用宿主语言和DML编写应用程序的计算机工作者,与DBMS的界面是应用程序。
最终用户:
使用应用程序的非计算机人员,与DBMS的界面是应用程序的运行界面。
第二章关系模型
超键:
在关系中能唯一标识元组的属性集。
候选键:
不含多余属性的超键。
主键:
用户选做元组标识的候选键。
关系模式的三级结构:
关系模式、关系子模式、存储模式。
概念模式是关系模式的集合,外模式是关系子模式的集合,内模式是存储模式的集合。
关系模型的三个组成部分:
数据结构、数据操作、数据完整性约束。
数据结构:
基本的数据结构是关系。
数据操作:
提供了完备的关系运算――关系代数和关系演算。
数据完整性约束:
关系模型的三类完整性规则。
关系模型的三类完整性规则:
实体完整性、参照完整性、用户定义完整性。
实体完整性:
键的属性不能为空。
参照完整性:
不能引用不存在的实体。
用户定义完整性:
由应用环境决定的对某一具体数据的约束条件。
外联接:
保留在自然联接中应该舍弃的元组,并在这些元组新增加的属性上填上空值(NULL)。
外部并:
两个关系R和S在做并运算时,如果两个关系的模式不同则在新关系中保留所有属性(公共属性只保留一次),新关系由属于R或属于S的元组构成,同时这些元组在新增加的属性值上填空值(NULL)。
第三章关系数据库SQL语言
SQL的四个组要成分:
数据定义、数据操纵、数据控制、嵌入式SQL使用规定。
视图:
外模式一级数据结构的基本单位是视图,是由一个或几个基本表导出的虚表。
索引:
索引属于物理存储的路径概念,不是逻辑概念。
在SQL86、SQL89中没有关键码的概念,用索引机制弥补。
SQL的两种使用方式:
嵌入式、交互式。
嵌入式SQL的两种处理方式:
扩充宿主语言编译程序、预处理。
预处理方式的步骤:
首先预处理程序对源程序进行扫描,识别出SQL语句,并翻译成宿主语言的函数调用形式;然后用宿主语言的编译程序将源程序编译成目标程序。
游标:
SQL语句处理的是记录的集合,而宿主语言一次只能处理一条记录,因此需要用游标机制将集合方式转化为单记录方式。
第四章关系数据库的模式设计
关系数据库设计理论的三方面内容:
数据依赖、范式、模式设计方法,其中数据依赖起核心作用。
第五章数据库设计
数据库设计的步骤:
规划、需求分析、概念设计、逻辑设计、物理设计。
概念设计的主要步骤:
数据抽象,设计局部概念模式;将局部概念模式合并成全局概念模式;评审。
数据抽象方法:
聚集、概括。
聚集是将若干对象及它们之间的联系组成一个新的对象。
概括是将一组具有某些共同特征的对象合并成更高一层意义上的对象。
基本ER模型的扩展:
依赖联系:
一个实体的存在以另外一个实体的存在为前提,前者称为弱实体。
子类:
某类实体类型中所有的实体也是另一实体类型中的实体,则前一实体类型称为子类,有一实体类型称为超类。
子类有继承性,继承超类的全部属性外,自身还可以包含其他属性。
局部ER模型合并的冲突:
属性冲突、结构冲突、命名冲突。
属性冲突:
属性域冲突、取值单位冲突。
结构冲突:
同一对象的不同抽象、同一实体的属性组成不同。
命名冲突:
属性名冲突、联系名冲突、实体名冲突。
同名异议、异名同义。
概念设计的结果:
得到一个与DBMS无关的概念模式。
逻辑设计的目的:
将概念设计的结果转化为具体机器上的DBMS所支持的逻辑结构。
第六章数据库保护
事务:
是一个不可分割的操作序列,这些操作要么都做要么都不做。
事务的性质:
原子性、一致性、隔离性、持久性。
、
原子性:
事务是一个不可分割的操作序列。
原子性由事务管理子系统完成。
一致性:
数据不会因为事务的执行而遭到破坏。
一致性由编写事务的程序员完成或者由系统测试完整性约束自动完成。
隔离性:
一个事务的执行不必关心其他事务,事务并发执行的结果应当与前后分别执行的结果一致。
隔离性由并发控制子系统完成。
持久性:
事务一旦完成所有操作后,它对数据库的更新应永久地反映在数据库中。
即使以后系统出现故障也应保存执行的痕迹。
持久性由恢复管理子系统实现。
故障的类型:
事物故障、系统故障、介质故障。
恢复的原则:
沉余,即数据的重复存储。
恢复的方法:
定期转储、建立日志、恢复
定期转储:
每次转储全部数据称为海量转储。
每次只转储上次转储后更新的数据称为增量转储。
转储期间不允许对数据进行存取、修改成为静态转储。
转储其间允许对数据存取、修改,即转储可以和用户事务并发执行,称为动态转储。
建立日志:
日志中每条记录的内容:
事务标识、操作类型、更新前数据的旧值、更新后数据的值、更新日期、更新时间。
恢复:
如果数据库已经损坏,则恢复最近的备份,按照日志REDO。
如果数据库未遭到破坏,只是某些数据不可靠,则先按照日志文件UNDO再REDO。
UNDO的方法:
反向扫描日志,对更新操作进行反操作,即对插入的记录删除、对删除的记录重新插入、对修改的数据用旧值替代新值。
并发操作带来的问题:
丢失更新、不一致分析、脏数据读出。
调度:
事务的执行次序成为调度。
可串行化调度:
如果并发调度的执行结果与某一串行调度的执行结果等价,则这个并发调度成为可串行化调度。
可串行化调度用来判断一个并发调度是否正确。
PX协议:
“任何企图更新记录R的事物必须先执行LOCKX(R)操作,以获得对该记录进行寻址的能力,并对它取得X封锁。
如果未取得X封锁,那么这个事务进入等待状态,一直到获准X封锁,事务才继续做下去。
”
PX协议可以解决一些丢失更新的问题,但由ROLLBACK引起的丢失更新问题需要引出PXC协议,即PX协议+“X封锁必须保留到事物终点(COMMIT或ROLLBACK)”。
PS协议:
“任何企图更新记录R的事物必须先执行LOCKR(R)操作,以获得对该记录进行寻址的能力,并对它取得S封锁。
如果未取得S封锁,那么这个事务进入等待状态,一直到获准S封锁,事务才继续做下去。
当事务获准S封锁后,在修改记录R前必须执行UPGRADE把S封锁升级为X封锁。
”
PSC协议:
PS协议+“S封锁必须保留到事物终点”。
S封锁的优点:
在并发操作中X封锁可以少一些,增加了并发的可能性。
S封锁的缺点:
增加了死锁的可能。
活锁:
可能有某个事务永远处于等待状态得不到执行。
解决办法:
采用“先到先服务”的原则按照请求封锁的顺序建立事物队列,每当数据上的封锁释放,就批准队列中的第一个事务获得封锁。
死锁:
有两个或多个事务处于等待状态,每个事务都在等待其中另一个事物接触封锁,才能执行下去,结果任何一个事物都无法执行。
解决办法:
撤销其中某个事务。
两段封锁协议:
(1)对任何数据进行读写操作前,事务首先要取得对该数据的封锁。
(2)在释放一个封锁后,事务不再取得其他任何封锁。
两段式封锁是可串行化调度的充分条件,但不是必要条件。
两段式封锁仍可能发生死锁,而且可能会更多。
数据库的完整性:
是指数据的正确性和相容性。
完整性子系统的功能:
(1)监督事务的执行,测试是否违反完整性规则。
(2)如果违反,采取适当操作,如拒绝、报告、改正。
每个完整性规则的三个组成部分:
触发条件、约束条件、ELSE子句。
触发条件:
什么时候检查。
约束条件:
检查什么样的错误。
ELSE子句:
对错误怎样处理。
关系数据库的三类完整性规则:
域完整性规则、域关系规则、关系完整性规则。
域完整性规则:
定义属性的取值范围。
域联系规则:
定义一个或多个关系中属性值之间的联系、影响和约束。
关系完整性规则:
定义对更新操作对数据库中值的影响和限制。
这些规则通过DDL定义,存放在数据字典中。
SQL中的完整性约束:
主键约束、外键约束、属性值约束、全局约束。
断言:
如果完整性约束与多个关系有关时可以使用断言。
数据库的安全性:
是指保护数据库,防止不合法的使用,避免数据泄漏、破坏、非法更改。
安全性级别:
环境级、职员级、OS级、网络级、数据库系统级。
SQL的安全性控制:
视图机制、授权子系统。
视图:
是从一个或几个基本表导出的虚表。
视图的对应的数据并不实际存储在数据库中,只是在数据字典中存储它的定义。
视图可以和基本表一样被查询、删除,但更新操作受到限制。
视图具有数据安全性、数据独立性、操作简便性。
视图可以用来对无权用户屏蔽数据。
授权子系统:
允许有特定存取权的用户有选择地和动态的把这些权限授予其他用户。
第七章分布式数据库系统
分布式数据库系统(DDBS):
数据分布存放在计算机网络各个场地的计算机中,每个场地上拥有自治处理能力并能完成局部应用;而每一场地也参与至少一种全局应用程序的执行,全局应用程序可以通过网络通信访问系统中多个场地上的数据。
分布式数据库具有逻辑整体性和数据分布性。
分布式和分散式的区别在于是否支持全局应用。
DDBS的透明性:
位置透明性、复制透明性。
DDBS的分类:
同构同质、同构异质、异构。
同构同质:
各场地使用同一类数据模型,同一型号DBMS。
同构异质:
各场地使用同一类数据模型,不同型号DBMS。
异构:
各场地使用不同类数据模型。
分布式数据存储:
数据分配、数据分片。
数据分配:
数据在各个场地上的分配策略。
集中式:
所有数据均安排在同一场地上。
分割式:
数据只有一份,被分别安置在在若干个场地。
全复制式:
数据在各个场地重复存储。
混合式:
介于分割式和全复制式之间,数据被划分为若干个相交的子集,每一子集安置在一个或多个场地上,但每个场地未必保存全部数据。
数据分片:
数据在各个场地上存储的单位不是关系,而是关系的片段。
数据分片是通过关系代数基本运算实现的。
水平分片:
对全局关系进行选择运算的结果。
垂直分片:
把全局关系分为若干子集,并在这些子集上进行投影运算。
混合分片:
对上述两种分片方式得到的片段再继续做另一种方式的分片。
分片需遵守的条件:
完备性条件、重构条件、不相交条件。
完备性条件:
确保将全局关系映射到各个分片。
重构条件:
确保由各个分片重构全局关系。
不相交条件:
各个分片的内容不重叠。
不相交条件只针对水平分片,因为垂直分片中,键需要重复存储。
DDBS的结构:
在集中式数据库体系结构之上增加了:
全局外模式、全局概念模式、分片模式、分配模式。
分布透明性:
即分布独立性,可以归入物理独立性的范围。
分片透明性:
用户对全局数据进行操作,而不必考虑解数据的分片情况。
分片透明性是最高层次的分布透明性,位于全局视图和分片视图之间,当分片模式改变时只需改变全局模式到分片模式的映像而不必影响全局模式和应用程序。
位置透明性:
用户和应用程序当了解分片的情况,但不必了解片段的存储场地。
位置透明性位于分片视图和分配视图之间,当存储场地改变时,只需改变分片模式到分配模式的映像,而不必影响分片视图、全局视图和应用程序。
局部数据模型透明性:
用户或应用程序当了解分片及个片段的存储场地,但不必了解各个场地上使用的是何种数据模型。
局部数据模型透明性位于分配视图和局部概念视图之间。
分布式数据库管理系统(DDBMS)的组成:
查询子系统、完整性子系统、调度子系统、可靠性子系统。
基于半联接的查询优化:
不参与联接的值或者无用的值不必在网络中传输。
第八章具有面向对象特征的数据库系统
嵌套关系模型:
是从平面关系模型发展而来的,允许属性的值又是一个关系,而且可以多次嵌套。
复合对象模型:
如果在嵌套关系模型的基础上,进一步放松对元组和集合必须严格交替出现的限制,就形成了复合对象模型,这时属性的值可以是基本数据类型、结构类型、集合类型。
对象联系图:
椭圆代表对象类型,椭圆之间的边表示其间的函数,单箭头表示函数值是单值,双箭头表示函数值是多值,小圆圈表示属性值是基本数据类型。
数据的泛化/细化:
是对概念之间联系进行抽象的一种方式,当较低层次上抽象表达了与之联系的较高层次上抽象的特殊情况时,就称较高层次上抽象为较低层次上抽象的“泛化”,而较低层次上抽象是较高层次上抽象的“细化”。
泛化/细化是一种“isa”联系。
“超类”和“子类”之间就是“泛化/细化”关系,子类继承超类的特征,而子类本身又有其他特征。
对象关系模型:
在传统的关系模型上增加集合、元组、数组等一类新的数据类型,以及对新数据类型进行操作的能力,形成的数据模型。
ORDB的复合类型:
数组:
同类元素的有序集合。
结构:
不同类元素的有序集合。
集合:
同类元素的无序集合,每个成员只能出现一次。
多集:
同类元素的无序集合,允许一个成员多次出现。
面向对象数据模型的基本概念:
对象结构:
客观对象的实体抽象为问题空间的对象,对象是对一组信息及其操作的描述。
包括一组变量、一组消息、一组方法。
变量:
包含对象的数据,相当于ER模型的属性。
消息:
是对象间的接口,对象间的交互靠发送和执行消息完成。
消息有零个或多个参数。
方法:
是实现消息的程序代码,返回值作为消息的响应。
对象类:
类是类似对象的集合。
类中所有对象共享一个公共定义,而变量值各不相同。
类对象:
一个类在数据库中也表示为一个对象,包括:
一个集合值变量:
包含类所有实例。
New消息对应的方法:
由于创造类的新实例。
继承性:
是一种数据间“泛化/细化”的联系,是一种“isa”联系。
继承性允许不同类的对象共享它们公共部分的定义。
继承性可以用超类和子类的层次联系实现。
对象标识:
没个对象有一个标识,在对象创建的瞬间由系统分配,在系统内唯一,在生存期内不可改,与物理存储位置无关。
对象包含:
是一种“ispartof”联系。
持久化程序设计语言:
对现有OOPL进行扩充,使之能够处理数据库。
和嵌入式语言的区别:
可直接操纵持久数据,体现为以下两方面:
(1)嵌入式语言和宿主语言的类型系统不同。
而持久化语言具有统一的类型系统。
(2)持久化语言可以直接操纵持久数据,而嵌入式语言需要将数据从数据库读入内存,更改后再写回数据库。
持久化语言查找数据库中对象的方法:
按对象名查找;按对象标识符查找;对象聚集存放,程序循环查找。
附录
(一):
重点例题
关系注释
S(S#,SNAME,AGE,SEX)学生关系(学生号,姓名,年龄,性别)
SC(S#,C#,GRADE)学习关系(学生号,课程号,分数)
C(C#,CNAME,TEACHER)课程关系(课程号,课程名,教师名)
一、按要求给出关系关系代数表达式
(1)检索学习课程号为C2的学成的学号与成绩:
(2)检索选修课程号为C2的学生号与姓名:
(3)检索至少选修课程名为MATHS的学生号与姓名:
(4)检索修课程号为C2或C4的学生号:
(5)检索至少选修课程号为C2和C4的学生号:
(6)检索不学课程号为C2的学生姓名与年龄:
(7)检索学习全部课程的学生姓名:
(8)检索所学课程包含学生S3所学课程的学生号:
二、按要求给出元组关系演算
(1)检索学习课程号为C2的学成的学号与成绩:
(2)检索选修课程号为C2的学生号与姓名:
(3)检索至少选修课程名为MATHS的学生号与姓名:
(4)检索修课程号为C2或C4的学生号:
(5)检索至少选修课程号为C2和C4的学生号:
(6)检索不学课程号为C2的学生姓名与年龄:
(7)检索学习全部课程的学生姓名:
(8)检索所学课程包含学生S3所学课程的学生号:
三、按要求给出SQL语句
(1)检索学习课程号为C2的学成的学号与成绩:
SELECTSC.S#,SC.GRADE
FROMSC
WHERESC.C#=’C2’
(2)检索选修课程号为C2的学生号与姓名:
SELECTSC.S#,S.SNAME
FROMSC,S
WHERESC.S#=S.S#
ANDSC.C#=’C2’
(3)检索至少选修课程名为MATHS的学生号与姓名:
SELECTS.S#,S.SNAME
FROMSC,S,C
WHERESC.S#=S.S#
ANDSC.C#=C.C#
ANDC.CNAME=’MATHS’
(4)检索修课程号为C2或C4的学生号:
SELECTSC.S#
FROMSC
WHERESC.C#=’C2’
ORSC.C#=’C2’
(5)检索至少选修课程号为C2和C4的学生号:
SELECTSC.S#
FROMSCASX,SCASY
WHEREX.S#=Y.S#
ANDX.C#=’C2’
ANDY.C#=’C4’
(6)检索不学课程号为C2的学生姓名与年龄:
SELECTS.SNAME,S.AGE
FROMS
WHERES.S#NOTIN(SELECTS#
FROMSC
WHERESC.C#=’C2’)
(7)检索学习全部课程的学生姓名:
SELECTS.SNAME
FROMS
WHERENOTEXISTS(SELECT*
FROMC
WHEREC.C#NOTIN(SELECTC#
FROMSC
WHERESC.S#=S.S#)
(8)检索所学课程包含学生S3所学课程的学生号:
SELECTS.SNAME
FROMS
WHERENOTEXISTS(SELECT*
FROMSCASX
WHEREX.S#=’S3’
ANDX.C#NOTIN(SELECTC#
FROMSCASY
WHEREY.S#=S.S#)
(9)求男学生的总人数和平均年龄:
SELECTCOUNT(*),AVG(S.AGE)
FROMS
WHERES.SEX=’M’
(10)统计选修了课程的学生人数:
SELECTCOUNT(DISTINCT*)
FROMSC
(11)统计每一年龄选修课程的学生人数
SELECTS.AGE,COUNT(DISTINCTS.S#)
FROMS,SC
WHERES.S#=SC.S#
GROUPBYAGE
(12)求基本表中男同学的每一年龄组(超过50人)有多少人?
要求按人数升序排列,人数相同的按年龄降序排列:
SELECTS.AGE,COUNT(S.S#)AS_COUNT
FROMS
WHERESEX=’M’
GROUPBYAGE
HABINGCOUNT(S.S#)>50
ORDERBY_COUNTASC,AGEDESC
(13)检索至少一门成绩超过学生S4一门成绩的学生学号:
SELECTDISTINCTX.S#
FROMSCASX
WEHREX.GRADE>SOME(SELECTY.GRADE
FROMSCASY
WHEREY.S#=’S4’)
(14)检索平均成绩最高的学生学号:
SELECTX.S#
FROMSCASX
GROUPBYX.S#
HAVINGAVG(X.GRADE)>=ALL(SELECTAVG(Y.GRADE)
FROMSCASY
GROUPBYY.S#)
(15)把C4课程中小于该课平均成绩的的元组从基本表SC中删除
DELETEFROMSC
WHERESC.C#=’C4’
ANDSC.GRADE<(SELECTAVG(Y.GRADE)
FROMSCASY
WHEREY.C#=’C4’)
(16)将所有成绩低于该门平均成绩的课程提高%5
UPDATESC
SETSC.GRADE=SC.GRADE*1.05
WHERESC.GRADE<(SELECTAVG(Y.GRADE)
FROMSCASY
WHEREY.C#=SC.C#)
(17)为三个关系建表:
CREATETABLES
(S#CHAR(4),
SNAMECHAR(8)NOTNULL,
AGESMALLINT,
SEXCHAR
(1),
PRIMARYKEY(S#