一、 基本概念
数据(data): 数据库中存储的基本对象 定义: 描述事物的符号记录
数据库(
DB): 长期存储在计算机内的、有组织的、可共享的大量数据的集合
数据库管理系统(
DBMS) :位于用户和操作系统之间的一层管理软件
主要功能 :数据定义功能;数据组织、存储和管理功能;数据操纵功能;
数据库的事物管理和运行管理功能;数据库的建立和维护功能;
数据库系统(
DBS) :由数据库、数据管理系统(及其应用开发工具)、应
用程序和数据库管理员、组成的存储、管理、处理和维护数据的系统
数据管理 :对数据进行分类、组织、编码、存储、检索和维护
数据管理技术的发展过程
人工管理阶段、文件系统阶段、数据库系统阶段
数据库系统的特点 :
数据结构化;数据的共享性高、冗余度低、易扩充;数据独立性高
数据独立性 :物理独立性、逻辑独立性【由 DBMS 的二级映像功能保证】
物理独立性 :用户的应用程序与存储在数据库中数据的物理存储是相互
独立的。当数据的物理存储改变了,应用程序不用改变。
逻辑独立性 :用户的应用程序与数据库的逻辑结构是相互独立的。数据
的逻辑结构改变了,用户程序也可以不变。
数据库管理系统提供的数据控制功能 :
数据的安全性(security)保护 :保护数据以防止比合法使用造成的数据
泄密和破坏
数据的完整性(integrity)检查 :将数据控制在有效的范围内,并保证数
据间满足一定关系
并发(
concurrency)控制 :对多用户的并发操作加以控制和协调,防止
相互干扰而得到错误的结果
数据库恢复( Recovery) :将数据库从错误状态恢复到某一已知的正确状
态
二、数据模型: 数据结构、数据操作、完整性约束
1、概念 :数据模型是对现实世界的模拟
2、类型 :第一类:概念模型 第二类:逻辑模型、物理模型
概念模型 :也称信息模型,它是按用户的观点来对数据和信息建模,用
于数据库设计
逻辑模型 :主要包括层次模型、网状模型、关系模型、面向对象模型等,
按计算机系统的观点对数据建模,用于 DBMS 实现
物理模型 :对数据最底层的抽象,描述数据在系统内部的表示方式和存
取方法,在磁盘或磁带上的存储方式和存取方法
3、客观对象的抽象过程---两步抽象
现实世界中的客观对象抽象为概念模型(现实世界抽象为信息世界)
把概念模型转换为某一 DBMS 支持的数据模型 (信息世界转换成机器世界)
4、数据模型的组成要素 :
数据结构 :数据结构是对系统静态特性的描述
数据操作 :对系统动态特性的描述
数据的完整性约束条件 :一组完整性规则的集合
5、概念模型 :
实体 :客观存在并可相互区别的事物 实体集 :同一类型实体的集合
实体型 :用实体名及其属性名集合来抽象和刻画同类实体
联系 :现实世界中,事物内部、事物之间的联系概念模型的表示方法:实体——
联系方法(
E-R 模型)
6、常用的数据模型 :
层次模型、网状模型、关系模型、面向对象数据模型、对象关系数据模型、半结
构化数据模型
层次模型 :
有且只有一个结点没有双亲结点,该节点称为根结点
根以外的其他结点有且只有一个双亲结点
网状模型 :允许一个以上结点无双亲、一个结点可以有多余一个的双亲
三、关系模型 :
数据结构 :
关系(Relation) :一个关系对应通常说的一张表
元组(Tuple) :表中的一行即为一个元组
属性(Attribute) :表中的一列即为一个属性
码(kay) :表中可以唯一确定一个元组的属性组
域(
domain) :一组具有相同数据类型的值的集合
分量 :元组中的一个属性值
【关系的每一个分量必须是一个不可分的数据项,即不允许表中有表】
数据操纵 :查询、插入、删除和更新数据
关系模型的数据操纵是 集合 操作,操作对象和结果都是关系
完整性约束条件 :实体完整性、参照完整性、用户完整性
四、数据库系统的结构:
1、三级模式结构:实例 :模式的一个具体值
外模式 :视图和部分基本表 模式 :基本表 内模式 :存储文件
模式 :也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用
户的公共数据视图,数据库系统模式结构的中间层,一个数据库只有一个模式
外模式 :也称子模式、用户模式,是数据库用户(包括应用程序员和最终用户)
能够看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,
与某一应用有关的逻辑表示
【模式——外模式:一对多 外模式——应用程序:一对多】
内模式 :存储模式,数据物理结构和存储方式的描述,是数据在数据库内部的表
示方法,一个数据库只有一个内模式
2、两级映像 :
外模式/模式映像 :
模式:描述的是数据的全局逻辑结构 外模式:描述的是数据的局部逻辑结构
同一个模式可以有任意多个外模式,每一个外模式,数据库系统都有一个外模式
/模式映象,定义外模式与模式之间的对应关系
数据的逻辑独立性 :当模式改变时,数据库管理员修改有关的外模式/模式映象,
使外模式保持不变
模式/内模式映像
定义了数据全局逻辑结构与存储结构之间的对应关系 数据的物理独立性 :当数据库的存储结构改变了(例如选用了另一种存储结构),
数据库管理员修改模式/内模式映象,使模式保持不变应用程序不受影响
五、数据库系统的组成:
数据库、数据库管理系统(及其应用开发工具)、应用程序和数据库管理员
数据库管理员:
决定数据库中的信息内容和结构
决定数据库的存储结构和存取
定义数据的安全性要求和完整性约束条件
监控数据库的使用和周期性的转储数据、维护日志文件等
数据库的改进和重组、重构
=================================2==================================
1、关系
目(度):关系中属性的个数
候选码:关系中能唯一标识一个元组的属性组,而其子集不能
主码:若一个关系中有多个候选码,则选定其中一个为主码
主属性:候选码中的属性
非主属性:不包含在候选码中的属性【非码属性】
全码:关系的所有属性是该关系模式的候选码
关系的三种类型 :基本关系(基本表、基表)、查询表、视图表
2、关系模式 :关系模式是型、关系是值,关系模式是对关系的描述
R(U,D,DOM,F)
R:关系名 U:组成关系的属性名集合 D:U 中属性来自的域
DOM:属性向域的映像集合 F:属性间数据的以来关系集合
3、关系操作 :特点:集合操作
查询操作和插入、删除、修改操作两大类
查询操作分类 :选择、投影、连接、除、并、差、交、笛卡尔积
五种基本操作 :选择、投影、并、差、笛卡尔积
特点 :集合操作方式,操作的对象和结果都是集合
4、关系完整性
实体完整性 :主属性不可取空值
参照完整性 :若属性(属性组)F 是基本关系 R 的外码,它与基本关系 S 的主码
相对应,则对于 R 中每个元组在 F 上的值必须:要么取空值,要么等于 S 中某个
元组的主码值
用户定义的完整性 :针对某一具体关系数据库的约束条件,反映某一具体应用所
涉及的数据必须满足的语义要求
外码 :关系 S 的主码 F 作为关系 R 的属性(组),则 F 称为 R 的外码,称基本关
系 R 为参照关系,S 为被参照关系
5、关系代数
传统的集合运算:
并:RUS={t|t∈R V t∈S}
交:R∩S={t|t∈R ∧ t∈S}:R-(R-S)
差:R-S={t|t∈R ∧ t ∉ S}
笛卡尔积:R×S={tr⌒ts|tr∈R ∧ ts∈S}
专门的关系代数运算: 选择 :在关系 R 中选择满足给定条件的诸元组【从行的角度进行的运算】
σ F (
R)={t|t∈R ∧ F(t)=“真”}
逻辑表达式 F 基本形式:X1 θ Y1 θ :比较运算符
投影 :从 R 中选择若干属性列组成新的关系【从列的角度进行的运算】
п A (
R)={t[A]|t∈R}
连接 :从两个关系的笛卡尔积中选取属性间满足一定条件的元组
= σ F (
RXS)
i,j 分别是 R,S 上列数相等且可比的属性组
等值连接 : θ 为“=”的连接运算
自然连接 :特殊的等值连接,两个关系中进行比较的分量必须是同名的属性
组,在结果中把重复的属性列去掉【记作 R ⋈ S】
悬浮元组 :做自然连接时被舍弃的元组
外连接:把悬浮元组也保存在结果关系中,而在其他属性上填空值
左外连接:只保留左边关系 R 中的悬浮元组
右外连接:只保留右边关系 R 中的悬浮元组
除运算 :T 包含所有在 R 但不在 S 中的属性及其值,T 的元组与 S 的元组的
所有组合都在 R 中【
T=R÷S】【同时从行和列得角度进行计算】
=================================3==================================
结构化查询语言(SQL)是关系数据库的标准语言
非关系模型(层次模型、网状模型)的数据语言 :
模式数据定义语言(模式 DDL)
外模式数据定义语言(外模式 DDL/子模式 DDL)
数据存储有关的描述语言(
DSDL)
数据操纵语言(
DML)
SQL 集 数据查询、数据操纵、数据定义、数据控制 功能于一体
SQL 特点 :综合统一、高度非过程化、面向集合的操作方式、以同一种语法结构
提供多种使用方式、语言简洁,易学易用
基本概念 :
基本表 :本身独立存在的表,一个关系对应一个基本表;一个或多个基本表对应
一个存储文件,一个表可以带若干索引
存储文件 :逻辑结构组成了关系数据库的内模式,物理结构对用户透明
视图 :从一个或多个基本表导出的表;数据库只存放视图的定义而不存放视图对
应的数据;视图是一个虚表;用户可以在视图上在定义视图;基本表中数据发生
变化,则从视图中查询出的数据也就随之变化了
二、数据定义
数据定义功能 :模式定义、表定义、视图和索引定义
1、 模式定义与删除 :
CREATE SCHEMA <模式名>AUTHORIZATION<用户名>; DROP SCHEMA<模式名>;
CASCADE(级联):全删 RESTRICT(限制):无下属对象时删除
2、 基本表的定义、删除和修改 :
CREATE TABLE <表名>(
<列名><数据类型> [ <列级完整性约束条件>]
[,<列名> <数据类型>[ <列级完整性约束条>]]
……[,<表级完整性约束条件>] );
如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上:
PRIMARY KEY (Sno,Cno)/*主码由两个属性构成,必须作为表级完整性定义*/
列级完整性约束 :直接在数据类型后加关键字
表级完整性约束 :关键字(相应属性名)
FOREIGN KEY (Sno) REFERENCES Student(Sno)
/*表级完整性约束条件,Sno 是外码,被参照表是 Student */
PRIMARY KEY:主码 UNIQUE:取唯一值 NOT NULL:不能取空值
修改基本表 :
ALTER TABLE <表名>
ADD [COLUMN] <新列名><数据类型>[完整性约束条件]: 增加新列 (级完整性)
ADD[表级完整性约束]:增加新的表级完整性约束
DROP [COLUMN] <列名> [CASCADE|RESTRICT]:删除表中的列
DROP CONSTRAINT <完整性约束名> [CASCADE|RESTRICT]:删除指定完整性约束
ALTER COLUMN <列名><数据类型>: 修改原有列定义 (列名、数据类型)
删除基本表 : DROP TABLE <表名>[ CASCADE|RESTRICT];
3、 索引的建立与删除 :
建立索引 : CREATE [UNIQUE][CLUSTER] INDEX <索引名>
ON<表名>(
<列名>[<次序>])【
ASC:升序 DESC:降序】
修改索引 : ALTER INDEX <旧索引名>RENAME TO<新索引名>
删除索引 : DROP INDEX <索引名>
4、数据字典 :关系数据库管理系统内部一组系统表,它记录了数据库所有的定
义信息。
三、数据查询
SELECT [ALL|DISTINCT] <目标列表达式> [,<目标列表达式>] ..
FROM <表名或视图名>[,<表名或视图名> ] |[AS]<别名>
[ WHERE <条件表达式> ]
[ GROUP BY <列名 1> [ HAVING <条件表达式> ]]
按列名 1 的值分组,HAVING:满足条件的组才予以输出
[ ORDER BY <列名 2> [ ASC|DESC ]];按列名 2 值升降
确定范围:(NOT)BETWEEN(下限) AND(上限)
确定集合:(NOT)IN
字符匹配:LIKE‘<匹配符>’[ESCAPE‘<换码字符>’]
通配符: % :任意长度的字符串 _ :任意单个字符
涉及空值查询:属性名 IS (NOT)NULL
多重条件查询:AND、OR
聚集函数 :
计数:COUNT(*)COUNT([DISTINCT|ALL] <列名>)
计算总和:SUM([DISTINCT|ALL] <列名>) 計算平均値:AVG ([DISTINCT|ALL] <列名>)
最大最小値 MAX(
MIN) ([DISTINCT|ALL] <列名> )
WHERE 子句与 HAVING 短语区别在于作用对象不同,WHERE 子句作用于基本表或视
图,从中选择满足条件的元组。HAVING 短语作用于组,从中选择满足条件的组
连接查询 :
等值连接 :
SELECT Student.*,SC.*;FROM Student,SC;WHERE Student.Sno=SC,Sno;
自身连接 :SELECT FIRST.Cno,SECOND.Cpno;FROM Course FIRST, Course SECOND
WHERE FIRST.Cpno=SECOND.Cno
嵌套查询 :
定义 :将一个查询块嵌套在另一个查询块的 WHERE 子句或 HAVING 短语的条件中
的查询
查询块 :一个 SELECT-FROM-WHERE 语句称为一个查询块
SELECT Sname/*外层查询父查询*/
FROM Student
WHERE Sno IN(SELECT Sno /*内层查询子查询*/
FROM SC
WHERE Cno='2');
不相关子查询 :子查询的查询条件不依赖于父查询
相关嵌套查询 :子查询条件依赖于父查询的查询语句
=
<>或!=
<
<=
>
>=
ANY
IN
--
<=MAX
>MIN
>=MIN
ALL
--
NOT IN
<=MIN
>MAX
>=MAX
带有 EXISTS 谓词的子查询 :不返回任何数据,只产生逻辑真假
基于派生表的查询 :子查询出现在 FROM 子句中
FROM (子查询)AS [派生表名]
【
AS 关键字可省略,但必须为派生关系指定一个别名】
四、数据更新
插入数据 :
INSERT INTO Student(Sno,Sname,Sdept,Sage)
VALUES(‘20121001’,’陈冬’,’IS’,18)
修改数据 :
UPDATE Student SET Sage=22 WHERE Sno=’20161001’
删除数据 :DELETE FROM Student WHERE Sno=’20161001’
五、视图
建立视图 :
CREATE VIEW<视图名>【“(表中各列名)”】
AS【<子查询>】
SELECT Sno,Sname,Sage
FROM Student
WHERE Sdept=’IS’;
[WITH CHECK OPTION]
删除视图 :DROP VIEW<视图名>[CASCADE]
查询视图 :与基本表相同 视图的作用 :
视图能够简化用户的操作
视图使用户能以多种角度看待同一数据
视图对重构数据库提供了一定程度的逻辑独立性
视图能够对机密数据提供安全保护
利用视图可以更清晰地表达查询
====================================4===============================
数据库的安全性 :保护数据库以防止不合法使用所造成的数据泄露、更改或破坏
数据库的不安全因素 :
非授权用户对数据库的恶意存取和破坏
数据库中重要或敏感的数据被泄露
安全环境的脆弱性
安全级别划分的指标 :安全策略、责任、保证和文档
安全性控制常用方法 :用户标识和鉴别、存取控制、视图、审计、密码存储
存取控制 :
定义用户权限,并将用户权限登记到数据字典中
合法权限检查
自主存取控制方法 :C2 级、灵活
用户权限:数据库对象、操作类型
定义用户权限:定义用户可以在哪些数据库对象上进行哪些类型的操作
授权:定义存取权限【不允许循环授权】
GRANT <权限>,…
ON<对象类型><对象名>,…
TO<用户>,…
[WITH GRANT OPTION]:指定获得某权限的用户是否可以把该权限授予别的用户
REVOKE <权限>,…
ON<对象类型><对象名>,…
FROM<用户>,…[CASCADE|RESTRICT]
审计 :把用户对数据库的所有操作自动记录下来放入审计日志
审计事件 :服务器事件、系统权限、语句事件、模式对象事件
审计功能 :
基本功能,提供多种审计查阅方式
提供多套审计规则
提供审计分析和报表功能
审计日志管理功能
AUDIT:设置审计功能 NOAUDIT:取消审计功能
==============================5=====================================
一、数据库完整性 :数据的正确性、相容性
实体完整性(
PRIMARY KEY) :基本关系的主属性不可取空值
参照完整性(
FOREIGN KEY) :若属性(属性组)F 是基本关系 R 的外码,它与基
本关系 S 的主码 Ks 相对应(基本关系 R 和 S 不一定是不同的关系),则对于 R
中每个元组在 F 上的值必须为:取空值或等于 S 中某个元组的主码值
用户定义的完整性 :
列值非空(
NOT NULL)、列值唯一(
UNIQUE) 检查列值是否满足一个条件表达式(
CHECK 短语)
【例:Ssex CHAR(2)CHECK(sex IN(‘男’,‘女’)】
完整性约束命名子句 :CONSTRAINT<完整性约束条件名><完整性约束条件>
二、触发器 :用户定义在关系表上的一类由事件驱动的特殊过程,由服务器自动
激活,可以实施更为复杂的检查和操作,具有更精细和更强大的数据控制能力
定义触发器 :触发器又叫事件-条件-动作规则,当特定的系统事件发生,对规则
进行检查,如果条件成立则执行规则中的动作,否则不执行动作
CREATE TRIGGER<触发器名>
触发事件 :INSERT、DELETE、UPDATE(组合)
触发器类型 :行级触发器、语句级触发器
激活触发器 :
执行该表上的 BEFORE 触发器
激活触发器的 SQL 语句
执行该表上的 AFTER 触发器
删除触发器 :DROP TRIGGER<触发器名>ON<表名>
=================================6==================================
关系模式存在的问题 :数据冗余度大、更新异常、插入异常、删除异常
一、规范化
1、函数依赖 :设 R(U)是一个属性集 U 上的关系模式,X 和 Y 是 U 的子集。若对
于 R(U)的任意一个可能的关系 r, r 中不可能存在两个元组在 X 上的属性值相等
而在 Y 上的属性值不等,则称“X 函数确定 Y” 或“Y 函数依赖于 X",记作 X->Y
平凡:X->Y,但 Y ⊆ X X: 决定属性组【决定因素】
完全函数依赖 :在 R(U)中,如果 X->Y,并且对于 X 的任何一个真子集不成
立,则称 Y 对 X 完全函数依赖,记作 X-F->Y
部分函数依赖 :Y 可依赖于 X 的真子集,记作 X-P->Y
传递函数依赖 :在 R(U)中,如果 X->Y(Y ⊈ X ),Y-/->X,Y->Z,Z ⊈ Y,则称 Z
对 X 传递函数依赖,记作 X 传递>Z
直接函数依赖 :传递依赖中 Y->X,记作 X 直接>Z
2、码
候选码 :K 为 R中的属性或属性组合,U 对 K 完全函数依赖,K 为 R 候选码
超码 :U 部分依赖于 K【候选码是最小的超码】
主码 :候选码多于一个,则选定其中一个为主码
主属性 :包含在任何一个候选码中的属性
全码 :整个属性组是码
外码 :关系模式 R 中属性或属性组 X 并非 R 的码,是另外一个关系模式中的码
3、范式 :符合某一种级别的关系模式的集合
规范化 :一个低一级的关系模式通过模式分解可以转换为若干个高一级的关系模
式的集合,这种过程就叫规范化
1NF :关系模式 R 的所有属性都是不可分的基本数据项
2NF :R∈1NF,且每一个非主属性完全函数依赖于任何一个候选码
3NF :2NF 中非主属性不存在传递依赖
BCNF :不存在码以外的决定因素
不属于 2NF,会出现的问题 :
插入异常 :该插入的未插入 删除异常 :不应删除的也删除了
修改复杂
1NF->2NF :消除非主属性对码的部分函数依赖
2NF->3NF :消除非主属性对码的传递函数依赖
3NF->BCNF :消除主属性对码的部分和传递依赖
==================================7=================================
1、数据库设计步骤 :需求分析、概念结构设计、逻辑结构设计、物理结构设计、
数据库实施、数据库运行和维护
2、概念结构设计 :将需求分析得到的用户需求抽象为信息结构(概念模型)
E-R 图 :实体型:矩形 属性:椭圆 联系:菱形
实体型之间的联系 :一对一,一对多,多对多
E-R 图的集成 :自顶向下、自底向上
合并 :解决各分 E-R 图之间的冲突,将分 E-R 图合并起来生成初步 E-R 图
修改和重构 :消除不必要的冗余,生成基本 E-R 图
冲突 :属性冲突、命名冲突、结构冲突
属性冲突 :属性域冲突、属性取值单位冲突
命名冲突 :同名异义、异名同义
3、逻辑结构设计 :E-R 图转换、数据模型的优化、设计用户子模式
E-R 图向关系模型的转换 :一个实体型转换为一个关系模式,关系的属性就是实
体的属性,关系的码就是实体的码
1:1 联系 :
转换为独立的关系模式:
属性:与该联系相连的各实体码以及联系本身属性
候选码:各个实体的码
与某一端实体合并:在该关系模式属性中加入另一关系模式的码和联系本身属性
1:n 联系 :独立、与 n 端对应关系模式合并
独立:
属性:联系相连各实体码以及本身属性
码:n 端实体的码
m:n 联系:
属性:与该联系相连的各实体的码以及联系本身的属性 码:各实体的码
4、物理结构设计 :为一个给定的逻辑数据模型选取一个最适合应用要求的物理
结构的过程【为哪些表,在哪些字段,建立什么样的索引】
数据库物理结构 :数据库在物理设备上存取结构和存取方法
常用存取方法 :索引方法和聚簇方法
5、数据库的实施和维护 :
数据库维护工作:
数据库的转储和恢复
数据库的安全性、完整性控制
数据库性能的监督、分析和改造
数据库的重组织与重构造
===================================8=============================
嵌入式 SQL :将 SQL 语句嵌入程序设计语言中,被嵌入的语言称为 宿主语言 游标 :系统为用户开设的一个数据缓冲区,存放 SQL 语句的执行结果,每一个游
标区都有一个名字。用户可以通过游标逐一获取记录并赋给主变量
SQL 通信区 :EXEC SQL INCLUDE SQLCA
主(指示)变量 :BEGIN DECLARE SECTION 与 END DECLARE SECTION 间说明
建立数据库连接 :EXEC SQL CONNECT TO
关闭数据库连接 :EXEC SQL DISCONNECT[connection]
说明游标 :EXEC SQL DECLARE<游标名>CURSOR FOR;
打开游标 :EXEC SQL OPEN<游标名>; 关闭 :EXEC SQL CLOSE<游标名>
推进游标指针并获取当前记录 :EXEC SQL FETCH<游标名>INTO<主变量>[指示]
==================================9=================================
查询处理步骤 :查询分析、查询检查、查询优化、查询执行
查询分析 :对查询语句进行扫描、词法分析和语法分析
查询检查 :对合法的查询语句进行语义检查
查询优化 :选择一个高效执行的查询处理策略
代数优化:关系代数表达式的优化
物理优化:存取路径和底层操作算法的选择(基于规则、代价、语义)
查询执行 :代码生成器
检查通过后一般把 SQL 查询语句转化成等价的 关系代数表达式
关系数据库管理系统一般用 查询树 ( 语法分析树 )表示扩展的关系代数表达式
=================================10===============================
事务处理技术 :数据库恢复技术、并发控制技术
1、事务 :用户定义的一个数据操作序列,这些操作要么全做,要么全不做,是
一个不可分割的单位【并发控制的基本单位】
定义事务的语句:BEGIN TRANSACTION;COMMIT;ROLLBACK;
以 BEGIN TRANSACTION 开始,以 COMMIT/ROLLBACK 结束
2、事务的 ACID 特性 :
原子性 :事务是数据库的逻辑工作单位,事务中的操作要么……
一致性 :事务的执行结果必须是使数据库从一个一致性状态变到另一个
一致性状态
隔离性 :一个事务的执行不能被其他事务干扰
持续(永久)性 :一个事务一旦提交,它对数据库中数据的改变就应该
是永久性的。接下来其他操作或故障不应该对其执行结果有任何影响
可能遭到破坏的因素 :
多个事务并行运行时,不同的事务的操作交叉执行
事务在运行过程中被强行停止
3、数据库恢复 :把数据库从错误状态恢复到某一已知的正确状态
4、故障的种类 :
事务故障 :有的是可以通过事务程序本身发现的,有的是非预期的,不能交由事
务程序处理
系统(软)故障 :造成系统停止运转的任何事件,使得系统要重新启动
发生系统故障时,事务未提交:强行撤销(
UNDO)所有未完成的,事务已提交
发生系统故障时,事务已提交:重做(
REDO)所有已提交的事务
介质(硬)故障 :磁盘损坏、磁头碰撞,瞬时强磁场干扰等破坏数据库部分数据
库 计算机病毒 :人为的故障或破坏,可以繁殖和传播的计算机程序
5、恢复的实现技术
数据恢复的基本原理 :冗余,利用存储在系统其它地方的冗余数据来重建已被破
坏或不正确的数据
恢复机制涉及问题 :如何建立冗余数据、如何利用冗余数据实施数据库恢复
建立冗余数据 :数据转储、登记日志文件
数据转储 :
转储 :数据库管理员定期地将整个数据库复制到磁带、磁盘或其他存储介质上保
存起来的过程,这些备用的数据称为 后备副本 或 后援副本
静态转储 :在系统中无运行事务时进行的转储操作,转储期间不允许对数据库的
任何存取、修改活动转储必须等待正运行的用户事务结束,新的事务必须等转储
结束才能执行
动态转储 :转储期间允许对数据库进行存取或修改,即转储和用户事务可以并发
执行,必须把转储期间各事务对数据库的修改活动登记下来,建立 日志文件 ,后
援副本+日志文件=正确状态
海量转储 :每次转储全部数据库
增量转储 :每次只转储上一次转储后更新过的数据
日志文件 :用来记录事务对数据库的更新操作的文件
格式 :以记录为单位的日志文件、以数据块为单位的日志文件
登记日志文件原则 :
登记的次序严格按并发事务执行的时间次序
必须先写日志文件,后写数据库
6、恢复策略 :
事务故障的恢复 :事务故障:事务在运行至正常终止点前被终止
反向扫描文件日志(即从最后向前扫描日志文件),查找该事务的更新操作
对该事务的更新操作执行逆操作。即将日志记录中“更新前的值”写入数据
库;插入操作,“更新前的值”为空,则相当于做删除操作;删除操作,“更
新后的值”为空,则相当于做插入操作;若是修改操作,则相当于用修改前
值代替修改后值
继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理
如此处理下去,直至读到此事务的开始标记,事务故障恢复就完成了
系统故障的恢复 :
正向扫描日志文件,找出在故障发生前已经提交的事务,将其事务标识记入
重做队列。同时找出故障发生时尚未完成的事务,将其事务标识记入撤销队
列
对撤销队列中的各事务进行撤销(
UNDO)处理
对重做队列中的各个事务进行重做处理
撤销处理方法 : 反向扫描日志文件,对每个 UNDO 事务的更新操作执行逆操作,
即将日志记录中“更新前的值”写入数据库
重做处理方法 :正向扫描日志文件,对每个 REDO 事务重新执行日志文件登记的
操作,即将日志记录中“更新后的值”写入数据库
介质故障的恢复 :重装数据库,然后重做已完成的事务
==============================11===================================
并发控制责任 :保证事务的隔离性和一致性,对并发操作进行正确调度 并发操作数据不一致性 :丢失修改、不可重复读、读“脏”数据
并发控制的主要技术 :封锁、时间戳、乐观控制法、多版本并发控制
主要方法 :封锁机制
封锁 :类型:排他锁(
X 锁)、共享锁(
S 锁)
排他锁(写锁) :若事务 T 对数据对象 A 加上 X 锁,则只允许 T 读取和修改 A,
其它任何事务都不能再对 A 加任何类型的锁,直到 T 释放 A.上的锁
共享锁(读锁) :若事务 T 对数据对象 A 加上 S 锁,则事务 T 可读 A 但不能
修改 A,其它事务只能再对 A 加 S 锁,而不能加 X 锁,直到 T 释放 A 上的 S
锁
封锁协议 :
一级封锁协议 :事务 T 在修改数据 R 前必须先对其加 X 锁,直到事务结
束后才释放,解决“丢失修改”问题
二级封锁协议 :在一级封锁协议基础上增加事务 T 在读取数据 R 之前必
须先对其加 S 锁,读完后即可释放 S 锁,解决“丢失修改”和读“脏”
数据问题
三级封锁协议 :在一级封锁协议基础上增加事务 T 在读取数据 R 之前必
须先对其加 S 锁,直至事务结束才释放。解决三个问题
活锁 :某个事务总在等待资源,永远得不到满足
避免 :先来先服务策略
死锁 :所有事务都在等待别的事务永远不会释放的资源
解决方法 :预防死锁、死锁的诊断与解除
预防死锁 :一次封锁法、顺序封锁法
死锁的诊断与解除 :超时法、等待图法
可串行化调度 :多个事务的并发执行是正确的,当且仅当其结果与按某一次序串
行地执行这些事务时的结果相同
可串行性: 并发事务正确调度的准则
冲突操作 :不同事务对同一数据的读写操作和写写操作
Ri(X)与 Wj(
X)、Wi(
X)和 Wi(X)
冲突可串行化调度 是可串行化调度的充分条件
两段锁(
2PL)协议 :指所有事务必须分两个阶段对数据项加锁和解锁
在对任何数据进行读、写操作之前,事务首先要获得对该数据的封锁
在释放一个封锁之后,事务不再申请和获得任何其他封锁
含义 :
第一阶段是获得封锁,也称为扩展阶段
事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁
第二阶段是释放封锁,也称为收缩阶段
事务可以释放任何数据项上的任何类型的锁,但是不能再申请任何
锁 封锁粒度 :封锁对象的大小
增:数据抽象 :分类、聚集
数据类型 :number(x,y);x:有效数字数 y:小数个数【
varchar(n)】
1、Armstrong 公理系统的三条推理规则 :自律性、增广性、传递律
2、关系 R 中所有属性都是主属性 ,规范化程度至少:2NF
视图与基本表的区别和联系
视图是从一个或几个基本表导出的表,它与基本表不同,是一个虚表,数据库中 只存放视图的定义,而不存放视图对应的数据,这些数据存放在原来的基本表中,
当基本表中的数据发生变化,从视图中查询出的数据也就随之改变。视图一经定
义就可以像基本表一样被查询、删除,也可以在一个视图之上再定义新的视图,
但是对视图的更新操作有限制。
==================================================================
1、检索至少学过课程号为“C135”和“C219”的课程的学生的信息,包括学号、
姓名和专业。
SQL 语句:
SELECT 学号,姓名,专业 FROM 学生 WHERE 学号 IN
(SELECT X1.学号 FROM 学习 X1,学习 X2 WHERE X1.学号=X2.学号
AND X1.课程号=‘C135’AND X2.课程号=‘C219’)
关系代数:
( π 学号,课程号 (学习)÷ π 课程号 ( 课程号=‘C135’∨课程号=‘C219’ (课程))) π 学号,姓名,专业 (学生)
2、设有关系 R 和函数依赖 F: R(
W,X,Y,Z),F = { X→Z,WX→Y }。
(
1)R 是 1NF。侯选码为 WX,则 Y,Z 为非主属性,又由于 X→Z,因此 F 中
存在非主属性对侯选码的部分函数依赖。
(
2)将关系分解为:R1(
W,X,Y),F1 = { WX→Y }
R2(
X,Z),F2 = { X→Z }消除了非主属性对码的部分函数依赖。
F1 和 F2 中的函数依赖都是非平凡的,并且决定因素是候选码,均是 BCNF。
3、设有关系 STUDENT(S#,SNAME,SDEPT,MNAME,CNAME,GRADE),(S#,CNAME)为候
选码,设关系中有如下函数依赖:
(
1)关系 STUDENT 是 1NF,因为 F 中存在非主属性 SNAME,SDEPT,MNAME 对候选
码(S#,CNAME)的部分函数依赖。
(
2)首先消除部分函数依赖(S#,CNAME)→SNAME,SDEPT,MNAME 将关系分解为:
R1(S#,SNAME,SDEPT,MNAME),F1 = { S#→SNAME,SDEPT,MNAME}
R2(S#,CNAME,GRADE),F2={(S#,CNAME)→GRADE}
在关系 R1 中存在非主属性对候选码的传递函数依赖 S#→SDEPT,所以将 R1 进一
步分解: R11(S#,SNAME,SDEPT) ,F11 = { S#→SNAME,SDEPT}
R12(SDEPT,MNAME) ,F12 = { SDEPT→MNAME}
在 R2,R11,R12 关系模式中函数依赖都是非平凡的,并且决定因素均是候选码,
所以上述三个关系模式均是 BCNF。