数据库是长期储存在计算机内、有组织的、可共享的大量数据的集合。
数据库的基本特征:数据按一定的数据模型组织、描述和储存。可为各种用户共享。冗余度
较小。数据独立性较高。易扩展。
什么是数据库管理系统:位于用户与操作系统之间的一层数据管理软件。是基础软件,是一
个大型复杂的软件系统
数据模型是对现实世界数据特征的象征。是用来描述数据、组织数据和对数据进行操作的。
数据模型是数据库系统的核心和基础。
数据模型分为两类(两个不同的层次)
(1) 概念模型 也称信息模型,它是按用户的观点来对数据和信息建模,用于数据库设
计。 (2) 逻辑模型和物理模型
逻辑模型主要包括网状模型、层次模型、关系模型、面向对象数据模型、对象关系数据模型、
半结构化数据模型等。按计算机系统的观点对数据建模,用于 DBMS 实现。
物理模型是对数据最底层的抽象,描述数据在系统内部的表示方式和存取方法,在磁盘或磁
带上的存储方式和存取方法。
数据模型通常由数据结构、 数据操作 、数据的完整性约束条件三部分组成。
数据结构是对系统静态特性的描述
数据操作:对数据库中各种对象(型)的实例(值)允许执行的操作的集合,包括操作及有
关的操作规则
数据的完整性约束条件:一组完整性规则的集合
完整性规则:给定的数据模型中数据及其联系所具有的制约和依存规则
用以限定符合数据模型的数据库状态以及状态的变化,以保证数据的正确、有效和相容
域是一组具有相同数据类型的值的集合.
一个域允许的不同取值个数称为这个域的基数
笛卡尔积的表示方法:可表示为一张二维表,表中的每行对应一个元组,表中的每列对应一
个域
关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域
属性:关系中不同列可以对应相同的域,为了加以区分,必须对每列起一个名字,称为属性
n 目关系必有 n 个属性
若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码
若一个关系有多个候选码,则选定其中一个为主码
三类关系类型:基本关系(基本表或基表。实际存在的表,是实际存储数据的逻辑表示
查询表。查询结果对应的表
视图表。由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据
基本关系的性质:① 列是同质的② 不同的列可出自同一个域,其中的每一列称为一个属性
不同的属性要给予不同的属性名③ 列的顺序无所谓,,列的次序可以任意交换④ 任意两个
元组的候选码不能相同⑤ 行的顺序无所谓,行的次序可以任意交换⑥ 分量必须取原子值
关系数据库的型也称为关系数据库模式,是对关系数据库的描述。
关系数据库的值是这些关系模式在某一时刻对应的关系的集合
基本操作:选择、投影、并、差、笛卡尔积
关系模型中有三类完整性约束:实体完整性和参照完整性、用户定义的完整性
关系模型必须满足的完整性约束条件称为关系的两个不变性,应该由关系系统自动支持
数据库的安全性是指保护数据库以防止不合法使用所造成的数据泄露、更改或破坏 。
数据库的不安全因素:
1.非授权用户对数据库的恶意存取和破坏 2.数据库中重要或敏感的数据被泄露
[WITH ADMIN OPTION]
3.安全环境的脆弱性
数据库角色:被命名的一组与数据库操作相关的权限,角色是权限的集合
1.角色的创建:CREATE ROLE <角色名>
2.给角色授权:GRANT <权限>[,<权限>]… ON <对象类型>对象名 TO <角色>[,<角
色>]…
3.将一个角色授予其他的角色或用户:GRANT <角色 1>[,<角色 2>]… TO <角色 3>[,<
用户 1>]…
一个角色的权限:直接授予这个角色的全部权限加上其他角色,授予这个角色的全部权限
4.角色权限的收回
REVOKE <权限>[,<权限>]…
例题:
(1)首先创建一个角色 R1
(2)然后使用 GRANT 语句,使角色 R1 拥有 Student 表的 SELECT、UPDATE、INSERT 权限
GRANT SELECT, UPDATE, INSERT ON TABLE Student
(3)将这个角色授予王平,张明,赵玲。使他们具有角色 R1 所包含的全部权限
ON <对象类型> <对象名>
FROM <角色>[,<角色>]…
CREATE ROLE R1;
TO R1;
GRANT R1 TO 王平,张明,赵玲;
(4) 可以一次性通过 R1 来回收王平的这 3 个权限
REVOKE R1
FROM 王平;
FROM R1;
使 R1 减少了 SELECT 权限
[例 4.12] 角色的权限修改
GRANT DELETE ON TABLE Student TO R1;
[例 4.13]
REVOKE SELECT ON TABLE Student
数据库的完整性:
1 数据的正确性:是指数据是符合现实世界语义,反映了当前实际状况的
2 数据的相容性:是指数据库同一对象在不同关系表中的数据是符合逻辑的
关系数据库管理系统使得完整性控制成为其核心支持的功能,从而能够为所有用户和应用提
供一致的数据库完整性
关系模型的参照完整性定义:在 CREATE 、 TABLE 中用 FOREIGN KEY 短语定义哪些列为外
码。用 REFERENCES 短语指明这些外码参照哪些表的主码
参照完整性违约处理
(1) 拒绝执行:不允许该操作执行。该策略一般设置为默认策略
(2) 级联操作:当删除或修改被参照表(Student)的一个元组造成了与参照表(SC)的
不一致,则删除或修改参照表中的所有造成不一致的元组
(3)设置为空值:当删除或修改被参照表的一个元组时造成了不一致,则将参照表中的所
有造成不一致的元组的对应属性设置为空值。
触发器是用户定义在关系表上的一类由事件驱动的特殊过程
触发器又叫做事件-条件-动作规则
数据依赖:是一个关系内部属性与属性之间的一种约束关系。通过属性间值的相等与否体现
出来的数据间相互联系。是现实世界属性间相互联系的抽象。是数据内在的性质。是语义的
体现
函数依赖和多值依赖
函数依赖是语义范畴的概念,只能根据数据的语义来确定一个函数依赖。
如果 U 部分函数依赖于 K,即 K → U,则 K 称为超码。候选码是最小的超码,即 K 的任意一
个真子集都不是候选码。
包含在任何一个候选码中的属性 ,称为主属性 。不包含在任何码中的属性称为非主属性或
非码属性。全码:整个属性组是码。若关系中的一个属性或属性组的值能够唯一地标识一个
元组,且他的真子集不能唯一的标识一个元组,则称这个属性或属性组做候选码。
数据字典是关于数据库中数据的描述,即元数据,不是数据本身。数据字典在需求分析阶段
建立,在数据库设计过程中不断修改、充实、完善。数据字典是进行详细的数据收集和数据
分析所获得的主要结果
数据字典的内容:数据项、数据结构、数据流、数据存储、处理过程
查询处理步骤:查询分析、查询检查、查询优化、查询执行
查询优化分为代数优化、物理优化
查询优化的优点:
1 用户不必考虑如何最好地表达查询以获得较好的效率 2 系统可以比用户程序的“优化”做得
更好
在集中式数据库中,查询执行开销主要包括磁盘存取块数(I/O 代价)、处理时间(CPU 代
价)以及查询的内存开销。
计算查询代价时一般用查询处理读写的块数作为衡量单位。
代数优化策略是通过对关系代数表达式的等价变换来提高查询效率
典型的启发式规则:
(1)选择运算应尽可能先做(2)把投影运算和选择运算同时进行
(3) 把投影同其前或其后的双目运算结合起来,没有必要为了去掉某些字段而扫描一遍关
系。(4) 把某些选择同在它前面要执行的笛卡尔积结合起来成为一个连接运算,连接特别
是等值连接运算要比同样关系上的笛卡尔积省很多时间。 (5) 找出公共子表达式
物理优化就是要选择高效合理的操作算法或存取路径,求得优化的查询计划
物理优化方法:1 基于规则的启发式优化 2 基于代价估算的优化
3 两者结合的优化方法:常常先使用启发式规则,选取若干较优的候选方案,减少代价估算
的工作量。然后分别计算这些候选方案的执行代价,较快地选出最终的优化方案
事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割
的工作单位。
事务的 ACID 特性:原子性、一致性、隔离性、持续性
SQL:
GRANT 语句的一般格式:
GRANT <权限>[,<权限>]...
ON <对象类型> <对象名>[,<对象类型> <对象名>]…
TO <用户>[,<用户>]...
[WITH GRANT OPTION];
语义:将对指定操作对象的指定操作权限授予指定的用户
把对 Student 表和 Course 表的全部权限授予用户 U2 和 U3
GRANT ALL PRIVILIGES ON TABLE Student,Course TO U2,U3;
把对表 SC 的 INSERT 权限授予 U5 用户,并允许他再将此权限授予其他用户
GRANT INSERT ON TABLE SC TO U5 WITH GRANT OPTION;
REVOKE
语义:授予的权限可以由数据库管理员或其他授权者用 REVOKE 语句收回
REVOKE 语句的一般格式为:
REVOKE <权限>[,<权限>]...
ON <对象类型> <对象名>[,<对象类型><对象名>]…
FROM <用户>[,<用户>]...[CASCADE | RESTRICT];
FROM U4;
把用户 U4 修改学生学号的权限收回
REVOKE UPDATE(Sno) ON TABLE Student
所有用户:PUBLIC
把用户 U5 对 SC 表的 INSERT 权限收回
REVOKE INSERT ON TABLE SC FROM U5 CASCADE ;
将用户 U5 的 INSERT 权限收回的时候应该使用 CASCADE,否则拒绝执行该语句
触发器:
CREATE TRIGGER <触发器名>
{BEFORE | AFTER} <触发事件> ON <表名>
REFERENCING NEW|OLD ROW AS<变量>
FOR EACH {ROW | STATEMENT}
[WHEN <触发条件>]<触发动作体>
例 子 : create trigger liukai after delete on student for each row delete from sc where
sno=old.sno;
建立索引的目的:加快查询速度
语句格式
CREATE [UNIQUE] [CLUSTER] INDEX <索引名>
CREATE UNIQUE INDEX Stusno ON Student(Sno);
Create table Student (Sno char(9) primary key,Sname char(20) unique,Ssex char(2),Sage
smallint,Sdept char(20));
Insert into Student(Sno,Sname,Ssex,Sdept,Sage) values('201601001','BOB','GG','IS',18);
Create table Course (Cno char(4) primary key,Cname char(40) not null,Cpno char(4),Ccredit
smallint,foreign key (Cpno) references Course(Cno));
Insert into Course (Cno,Cname, Cpno, Ccredit) values('1','bmath','1',5.5);
Create table SC (Sno char(9),Cno char(4),Grade smallint,primary key (Sno,Cno),foreign key
(Sno) references Student(Sno), foreign key (Cno) references Course(Cno));
Insert into SC (Sno,Cno, Grade) values(‘201601001’,‘0001’,NULL);
关系代数:关系代数是一种抽象的查询语言,它用对关系的运算来表达查询
R∪S :仍为 n 目关系,由属于 R 或属于 S 的元组组成 R∪S = { t|t R∨t S }
R - S :仍为 n 目关系,由属于 R 而不属于 S 的所有元组组成 R -S = { t|tR∧tS }
R∩S:仍为 n 目关系,由既属于 R 又属于 S 的元组组成 R∩S = { t|t R∧t S }
R∩S = R –(R-S)
R×S :列:(n+m)列元组的集合 元组的前 n 列是关系 R 的一个元组、后 m 列是关系 S
的一个元组 行:k1×k2 个元组 R×S = {tr ts |tr R ∧ tsS }
自然连接是一种特殊的等值连接
两个关系中进行比较的分量必须是相同的属性组,在结果中把重复的属性列去掉
分析论述:
1.关系模式:
模式:(也称逻辑模式)是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共
数据视图
一个数据库只有一个模式
模式的地位:是数据库系统模式结构的中间层
模式的定义:数据的逻辑结构(数据项的名字、类型、取值范围等);数据之间的联系;
数据有关的安全性、完整性要求
外模式:(也称子模式或用户模式)是数据库用户能够看见和使用的局部数据的逻辑结构和
特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示
外模式的地位:介于模式与应用之间
模式与外模式的关系:一对多
外模式与应用的关系:一对多
外模式的用途:保证数据库安全性的一个有力措施;每个用户只能看见和访问所对应的外模
式中的数据
数据库的外模式面向具体的应用程序。
内模式:(也称存储模式)一个数据库只有一个内模式。是数据物理结构和存储方式的描述,
是数据在数据库内部的组织方式
三级模式是对数据的三个抽象级别
二级映象在数据库管理系统内部实现这三个抽象层次的联系和转换
模式:描述的是数据的全局逻辑结构
外模式/模式映像:
外模式:描述的是数据的局部逻辑结构
同一个模式可以有任意多个外模式
每一个外模式,数据库系统都有一个外模式/模式映象,定义外模式与模式之间的对应关系
映象定义通常包含在各自外模式的描述中
当模式改变时,数据库管理员对外模式/模式映象作相应改变,使外模式保持不变。应用程
序是依据数据的外模式编写的,应用程序不必修改,保证了数据与程序的逻辑独立性,简称
数据的逻辑独立性
模式/内模式映像 :
模式/内模式映象定义了数据全局逻辑结构与存储结构之间的对应关系。
数据库中模式/内模式映象是唯一的。
当数据库的存储结构改变了,数据库管理员修改模式/内模式映象,使模式保持不变。应用
程序不受影响。保证了数据与程序的物理独立性,简称数据的物理独立性。
2.范式
范式是符合某一种级别的关系模式的集合。关系数据库中的关系必须满足一定的要求。满足
不同程度要求的为不同范式。
一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,
这种过程就叫规范化
每个分量必须是不可分开的数据项。满足了这个条件的关系模式就属于第一范式(1NF)
若关系模式 R∈1NF,并且每一个非主属性都完全函数依赖于任何一个候选码,则 R∈2NF
一个关系模式不属于 2NF,会产生以下问题:
插入异常、删除异常、修改复杂
得 X→Y,Y→Z 成立,Y ↛ X 不成立,则称 R ∈ 3NF。
设关系模式 R∈1NF,若 R 中不存在这样的码 X、属性组 Y 及非主属性 Z(Z⊇ Y), 使
设关系模式 R∈1NF,若 X →Y 且 Y⊆ X 时 X 必含有码,则 R∈BCNF。
在关系模式 R中,如果每一个决定属性集都包含候选码,则 R∈BCNF。
BCNF 的关系模式所具有的性质:1 所有非主属性都完全函数依赖于每个候选码。2 所有主
属性都完全函数依赖于每个不包含它的候选码。3 没有任何属性完全函数依赖于非码的任何
一组属性
规范化的基本思想是:逐步消除数据依赖中不合适的部分,使模式中的各关系模式达到某种
程度的“分离”。规范化实质上是概念的单一化。
3. Armstrong 公理系统:
设 U 为属性集总体,F 是 U 上的一组函数依赖,于是有关系模式 R 。对 R 来
说有以下的推理规则:
A1 自反律(reflexivity rule):若 Y X U,则 X →Y 为 F 所蕴涵。
A2 增广律(augmentation rule):若 X→Y 为 F 所蕴涵,且 Z U,则 XZ→YZ 为 F 所蕴涵。
A3 传递律(transitivity rule):若 X→Y 及 Y→Z 为 F 所蕴涵,则 X→Z 为 F 所蕴涵。
注意:由自反律所得到的函数依赖
证明:A1 自反律:设 Y X U 。
对 R 的任一关系 r 中的任意两个元组 t、s:
若 t[X]=s[X],由于 Y X,有 t[Y]=s[Y],
所以 X→Y 成立,
A2 增广律:设 X→Y 为 F 所蕴涵,且 Z U。
对 R 的任一关系 r 中任意的两个元组 t、s:
若 t[XZ]=s[XZ],则有 t[X]=s[X]和 t[Z]=s[Z];
由 X→Y,于是有 t[Y]=s[Y],
所以 t[YZ]=s[YZ],XZ→YZ 为 F 所蕴涵,
A3 传递律:设 X→Y 及 Y→Z 为 F 所蕴涵。
对 R 的任一关系 r 中的任意两个元组 t、s:
若 t[X]=s[X],由于 X→Y,有 t[Y]=s[Y];
再由 Y→Z,有 t[Z]=s[Z],
所以 X→Z 为 F 所蕴涵,
三条推理规则:
合并规则:由 X→Y,X→Z,有 X→YZ。
伪传递规则:由 X→Y,WY→Z,有 XW→Z。
分解规则:由 X→Y 及 ZY,有 X→Z。
4.并发控制:
并发操作带来的数据不一致性:
1.丢失修改:两个事务 T1 和 T2 读入同一数据并修改,T2 的提交结果破坏了 T1 提交的结果,
导致 T1 的修改被丢失
2.不可重复读:不可重复读是指事务 T1 读取数据后,事务 T2 执行更新操作,使 T1 无法再
现前一次读取结果。
不可重复读包括三种情况:
(1)事务 T1 读取某一数据后,事务 T2 对其做了修改,当事务 T1 再次读该数据时,得到
与前一次不同的值 (2)事务 T1 按一定条件从数据库中读取了某些数据记录后,事务 T2
删除了其中部分记录,当 T1 再次按相同条件读取数据时,发现某些记录神秘地消失了。(3)
事务 T1 按一定条件从数据库中读取某些数据记录后,事务 T2 插入了一些记录,当 T1 再次
按相同条件读取数据时,发现多了一些记录。
后两种不可重复读有时也称为幻影现象
3.读“脏”数据。是指:
事务 T1 修改某一数据,并将其写回磁盘。事务 T2 读取同一数据后,T1 由于某种原因被撤
销。这时 T1 已修改过的数据恢复原值,T2 读到的数据就与数据库中的数据不一致
T2 读到的数据就为“脏”数据,即不正确的数据
产生不一致性的主要原因:并发操作破坏了事务的隔离性
并发控制就是要用正确的方式调度并发操作,使一个用户事务的执行不受其他事务的干扰,
从而避免造成数据的不一致性。
并发控制的主要技术:封锁、时间戳、乐观控制法、多版本并发控制
封锁是实现并发控制的一个非常重要的技术
1 排它锁。又称为写锁,简记为 X 锁。
若事务 T 对数据对象 A 加上 X 锁,则只允许 T 读取和修改 A,其它任何事务都不能再对 A
加任何类型的锁,直到 T 释放 A 上的锁。保证其他事务在 T 释放 A 上的锁之前不能再读取
和修改 A
2.共享锁。又称为读锁,简记为 S 锁。
若事务 T 对数据对象 A 加上 S 锁,则事务 T 可以读 A 但不能修改 A,其它事务只能再对 A
加 S 锁,而不能加 X 锁,直到 T 释放 A 上的 S 锁。保证其他事务可以读 A,但在 T 释放 A
上的 S 锁之前不能对 A 做任何修改
在运用 X 锁和 S 锁对数据对象加锁时,需要约定一些规则,这些规则为封锁协议
一级封锁协议:事务 T 在修改数据 R 之前必须先对其加 X 锁,直到事务结束才释放。一级
封锁协议可防止丢失修改,并保证事务 T 是可恢复的。
二级封锁协议:
在一级封锁协议基础上增加事务 T 在读取数据 R 之前必须先对其加 S 锁,读完后即可释放 S
锁。二级封锁协议可以防止丢失修改和读“脏”数据
三级封锁协议:
在一级封锁协议基础上增加事务 T 在读取数据 R 之前必须先对其加 S 锁,直到事务结束才
释放。三级封锁协议可防止丢失修改、读脏数据和不可重复读。
三级协议的主要区别:什么操作需要申请封锁以及何时释放锁(即持锁时间)。
封锁协议级别越高,一致性程度越高
避免活锁:采用先来先服务的策略
解决死锁两类方法
1. 死锁的预防
产生死锁的原因是两个或多个事务都已封锁了一些数据对象,然后又都请求对已为其他事务
封锁的数据对象加锁,从而出现死等待。
预防死锁的方法(1)一次封锁法:要求每个事务必须一次将所有要使用的数据全部加锁,
否则就不能继续执行。存在的问题:降低系统并发度
(2)顺序封锁法:顺序封锁法是预先对数据对象规定一个封锁顺序,所有事务都按这个顺
序实行封锁。顺序封锁法存在的问题:维护成本。难以实现
2. 死锁的诊断与解除:(1)超时法:如果一个事务的等待时间超过了规定的时限,就认为
发生了死锁(2)等待图法
解除死锁:
选择一个处理死锁代价最小的事务,将其撤消。释放此事务持有的所有的锁,使其它事务能
继续运行下去
多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行这些事务时的结果
相同,这种调度策略为可串行化调度
可串行性:是并发事务正确调度的准则。
一个给定的并发调度,当且仅当它是可串行化的,才认为是正确调度
“两段”锁的含义:事务分为两个阶段:第一阶段是获得封锁,也称为扩展阶段
事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁
第二阶段是释放封锁,也称为收缩阶段。
事务可以释放任何数据项上的任何类型的锁,但是不能再申请任何锁
若并发执行的所有事务均遵守两段锁协议,则对这些事务的任何并发调度策略都是可串行化
的
事务遵守两段锁协议是可串行化调度的充分条件,而不是必要条件
5.E-R
实体之间的联系:(1)两个实体型之间的联系:
①一对一联系(1∶1)②一对多联系(1∶n)③多对多联系(m∶n)
(2)两个以上的实体型之间的联系:
一般地,两个以上的实体型之间也存在着一对一、一对多、多对多联系。
(3)单个实体型内的联系:
同一个实体集内的各实体之间也可以存在一对一、一对多、多对多的联系。