数据库系统概念复习笔记
数据库系统由一个相互关联的数据的集合和一组用以访问这些数据的程序组成。这个数据集合通常称作数据库。
数据库系统的主要目标是提供一种可以方便,高效地存取数据库信息的途径。
数据库系统的目的:能够持久性地存储,大量数据,用户数据独立性,原子性,减少冗余,一致性,完整性,高效存储和访问,并发访问,安全。
**数据抽象:**视图层(外模式),逻辑层(模式),物理层(内模式)。
**实例:**特定时刻存储在数据库中的信息的集合称作数据库的一个实例。
**模式:**数据库的总体设计称作数据库模式。
**物理数据独立性:**应用程序如果不依赖与物理模式,它们就被称为是具有物理独立性,因此即使物理模式改变了它们也无需重写。
**数据模型:**关系模型,实体-联系模型,基于对象的数据模型,半结构化数据模型。网状数据模型,层次数据模型。
**数据操纵语言(DML):**它使得用户可以访问或操纵那些按照某种适当的数据模型组织起来的数据。(查询,插入,删除,更新)
DML中涉及信息检索的部分称作查询语言。(实践中常把查询语言和数据操纵语言作为同义词使用)
Pure:关系代数,元组关系演算,域关系演算。
Commercial:SQL。
数据定义语言(DDL):数据库模式是通过一系列定义来说明的,这些定义由数据定义语言来表达。
DDL的输出放在数据字典中,数据字典包含了元数据,元数据是关于数据的数据。可以把数据字典看作一种特殊的表,这种表只能由数据库系统本身(不是常规的用户)来访问和修改。在读取和修改实际的数据前,数据库系统先要参考数据字典。
数据字典包括:数据库模式和一致性约束。
一致性约束:域约束,参照完整性(主键,外键),断言,授权。
访问数据库:为了访问数据库,DML语言需要宿主语言来执行。有两种途径可以做到这一点:
数据库设计
实体-联系模型
数据库中的实体通过属性集合来描述。
同一类型的所有实体的集合称作实体集。
联系是几个实体之间的关联。
同一类型的所有联系的集合称作联系集。
一个重要的约束是映射基数,它表示某个联系集能与一实体进行关联的实体数目。
规范化
设计关系数据库所用到的另外一种方法是通常被称为规范化的过程。它的目标是生成一个关系模式集合,使我们存储信息时没有不必要的冗余,同时又能很轻易地检索数据。这种方法是设计一种符合适当的范式的模式,为确定一个关系模式是否符合想要的范式,我们需要额外的关于数据库建模的现实世界中机构的信息。最常用的方法是使用函数依赖。
一个不好的设计可能会包括如下不良特性:
存储管理器是数据库系统中负责在数据库中存储的底层数据与应用程序以及向系统提交的查询之间提供接口的部件。
存储管理器部件包括:权限及完整性管理器,事务管理器,文件管理器,缓冲区管理器。
存储管理器的数据结构,作为系统物理实现的一部分:
查询处理器组件包括: DDL解释器,DML编译器(一个查询通常可被翻译成多种等价的具有相同结果的执行方案的一种。DML编译器还进行查询优化,也就是从几种选择中选出代价最小的一种),查询执行引擎。
事务是数据库应用中完成单一逻辑功能的操作集合。
**ACID:**原子性,一致性,独立性,持久性。
数据挖掘是指半自动地分析大型数据库并从中找出有用的模式的过程。数据挖掘就是在数据库中发现知识。
大型企业有各种不同的可用于业务决策的数据来源。要在这些各种各样的数据上高效地执行查询,企业建立了数据仓库。
文本结构是非结构化的,与关系数据库中严格的结构化数据不同。查询非结构化的文本数据被称为信息检索。
使用DBS的一个主要原因是可以对数据和访问这些数据的程序进行集中控制。对系统进行集中控制的人称作数据库管理员。
关系用来指代表。
元组用来指代行。
属性用来指代列。
**关系实例:**一个关系的特定实例,也就是所包含的一组特定的行。
域:关于关系中的每个属性,都存在一个允许取值的集合,称为该属性的域。如果域中元素被看做是不可再分的单元,则域是原子的。
空:一个特殊的值,代表值未知或不存在。
数据库模式是数据库的逻辑设计。
数据库实例是给定时刻数据库中数据的一个快照。
超码是一个或多个属性的集合,这些属性的组合可以使我们在一个关系中唯一地标识一个元组。
候选码是最小的超码,它们的任意真子集都不能成为超码。
主码代表被数据库设计者选中的,主要用来在一个关系中区分不同元组的候选码。
外码:一个关系模式r1可能在它的属性中包括另一个关系模式r2的主码,这个属性在r1上称作参照r2的外码。关系r1也称为外码依赖的参照关系,r2叫做外码的被参照关系。
冲突指令交换:
如果调度 S S S可以经过一系列非冲突指令交换转换成 S 、 S^、 S、,我们称 S S S和 S , S^, S,是冲突等价的。
不是所有的串行调度相互之间都冲突等价。
若一个调度 S S S与一个串行调度冲突等价,则称调度 S S S是冲突可串行化的。
冲突指令的事务 T T T指向调度 T , T^, T,,该调度是冲突可串行化的当且仅当图不循环。
可恢复调度应满足:对于每对事务 T i T_i Ti和 T j T_j Tj,如果 T j T_j Tj读取了之前由 T i T_i Ti所写的数据项,则 T i T_i Ti先于 T j T_j Tj提交。
无级联调度应满足:对于每对事务 T i T_i Ti和 T j T_j Tj,如果 T j T_j Tj读取了之前由 T i T_i Ti所写的数据项,则 T i T_i Ti必须在 T j T_j Tj这一读操作前提交。
每一个无级联调度也都是可恢复调度。
**共享锁:**如果事务 T i T_i Ti获得了数据项Q上的共享锁(S),则 T i T_i Ti可读但不能写Q。
**排他锁:**如果事务 T i T_i Ti获得了数据项Q上的排他锁(X),则 T i T_i Ti既可读又可写Q。
分成两部分的矩形代表实体集。第一部分包含实体集的名字,第二部分包含实体集中所有属性的名字。构成主码的属性以下划线标明。
菱形代表联系集。
未分割的矩形代表联系集的属性。
线段将实体集连接到联系集。
虚线将联系集属性连接到联系集。
双线显示实体在联系集中的参与度。
双菱形代表连接到弱实体集的标志性联系集。
映射基数
弱实体集
没有足够的属性以形成主码的实体集称作弱实体集。有主码的实体集称作强实体集。
弱实体集必须与另一个称作标识的属主实体集关联才能有意义。
弱实体集存在依赖于标识实体集。标识实体集拥有它所标识的弱实体集。
将弱实体集与其标识实体集相连的联系称为标识性联系。
弱实体集的分辨符是使得我们进行区分弱实体集中的实体的属性集合。
弱实体集的主码由标识实体集的主码加上该弱实体集的分辨符构成。
{ t ∣ P ( t ) } \LARGE \{t|P(t)\} {t∣P(t)}
表达式的安全性:元组关系公式P的域是P所引用的所有值的集合。
{ < x 1 , … … , x n > ∣ P ( x 1 , … … , x n ) } \LARGE \{
元组关系演算和域关系演算是非过程化语言,代表了关系查询语言所需的基本能力。基本关系代数是一种过程化语言,在能力上等价于被限制在安全表达式范围内的关系演算的这两种形式。
无损分解
如果用两个关系模式r1和r2替代r时没有信息损失,则我们称该分解是无损分解。
即把r投影至r1和r2上,然后计算投影结果的自然连接,我们仍然得到一模一样的r。
保持依赖
如果F中的每一个函数依赖都可以在分解得到的某一个关系上验证,那么这个分解就是保持依赖的。
第一范式
我们称一个关系模式R属于第一范式,如果R的所有集合的域都是原子的。
巴斯范式
具有函数依赖集F的关系模式R属于BCNF的条件是,对 F + F^+ F+中所有形如α->β的函数依赖,下面至少有一项成立:
第三范式
具有函数依赖集F的关系模式R属于第三范式的条件是,对 F + F^+ F+中所有形如α->β的函数依赖,下面至少有一项成立:
注意上面的第三个条件并没有说单个候选码必须包含β - α中的所有属性;β - α中的每个属性A可能包含于不同的候选码中。
第四范式
函数依赖集和多值依赖集为D的关系模式R属于第四范式的条件是,对 D + D^+ D+中所有形如α->->β的多值依赖,下面至少有一项成立:
函数
create function funcName(parmName parmType)
returns parmType
begin
declare parmName parmType;
……
return parm;
end
过程
create produce proName(in parmName parmType,out parmName parmType)
begin
……
end
触发器
create trigger triName after update on tableName
for each row
begin
……
end