1. 数据库系统概述
1.1 数据库系统的应用
- 数据库管理系统(DataBase-Nabafenebt Systen,DBMS):由一个互相关联的数据的集合和一组用以访问这些数据的程序组成。这个数据集合通常称为数据库(DataBase),DBMS的主要目标是要提供一种可以
方便、高效
地存储数据库信息的途径
1.2 数据库系统的目标
- 文件处理系统:传统操作系统所支持的,永久记录被存储在多个不同的文件中,人们编写不同的应用程序来将记录从有关文件中取出或者加入到适当的文件中
在数据库管理(DBMS)系统出现之前,各个组织通常采用**文件处理系统(file-processing system)**来存储信息
在文件处理系统中存储组织信息的主要逼到包括:
- 数据的冗余和不一致(data redundancy and inconsistency):相同信息可能在几个地方(文件)重复存储,这种冗余除了导致存储和访问开销增大意外,还可能导致数据不一致性(data inconsistency)
- 数据访问困难(diffuculty in accessing data)
- 数据孤立(data isolation):由于数据分散在不同文件中,这些文件又可能具有不同的格式,因此编写新的应用程序来检索适当数据是比较困难的
- 完整性问题(integrity problem):数据库中做存储数据的值必须满足某些特定的一致性约束(consistency constraint)
- 原子性问题(atomicity problem)
- 并发访问异常(concurrent-access anomaly)
- 安全性问题(security problem)
1.3 数据视图
数据库系统是一些向关联的数据以及一组使得用户可以访问和修改这些数据的程序的集合
。数据库系统的一个主要目的是给用户提供数据的抽象视图
,也就是说,系统隐藏关于数据存储和维护的某些细节
1.3.1 数抽抽象
数据库系统通过以下几个层次上的抽象来对用户屏蔽复杂性,以简化用户与系统的交互
- 物理层(physical level):最低层次的抽象,描述数据实际上是如何存储的,物理层详细描述了复杂的底层数据结构
- 逻辑层(logical level):比物理层层次稍高的抽象,它描述了数据库中存储了什么样的数据以及这些数据间村咋什么样的关系。虽然逻辑层的简单结构的实现可能涉及到复杂的物理层结构,但是逻辑层的用户不必知道这样的复杂性,这称为物理数据独立性(physical data independence)
- 视图层(view level): 最高层次的抽象,它只描述整个数据库的某个部分,数据库系统的很多用户并不需要关心所有的信息,而只需要访问数据的一部分。
值得注意的是,与其他具有分层结构的架构类似,只改动某一层的架构是不会影响其更高层次的抽象的,比如说物理层更换了底层实现的数据结构,其逻辑层所定义的结构是不会有改动的
1.3.2 实例和模式(架构)
- 实例(instance):
特定时刻
存储在数据库中的信息集合成为数据库的一个实例 - 数据库模式(schema):数据库的总体设计称为数据库模式
可以来理解,schema就是所定义的class,而instance就是new出来的instance,但是与之不同的是通常在数据库中,一个实例对应一个模式,一个模式对应一个实例,有点单例模式的意味
数据库系统可以分为几种不同的模式
- 物理模式(physical schema):在物理层描述数据库的设计
- 逻辑模式(logicala schema):在逻辑层描述数据库的设计
- 子模式(subschema):数据库在视图层有可以有几种模式,有时称为子模式,它描述了数据库的不同视图
应用程序如果不依赖于物理模式,它们就被称为是具有物理数据独立性(physical data independence)
1.3.3 数据模型
- 数据模型(data model):数据模型是一个
描述数据
、数据联系
、数据语义
以及一致性约束
的概念工具的集合。数据模型提供了一种描述物理层、逻辑层以及视图层数据库设计的方式
数据模型可以被划分为四类
- 关系模型(relational model):关系模型用
表的集合
来表示数和数据间的联系。每个表有多个列,每列有唯一的列名,它是基于记录的模型的一种 - 实体-联系模型(entity-relational model):实体-联系(E-R)数据模型基于这样一种认识,现实世界由一组称作实体的基本对象以及这些对象间的联系构成。
- 基于对象的数据模型(object-based data model):结合了面向对象的数据模型和关系数据模型的特征
- 半结构化数据模型(semistructured data model):半结构化数据模型允许那些相同类型的数据项含有不同的属性集的数据定义,这和早先提到的数据模型形成了对比,**可扩展标记语言(eXtensile Markup Language,XML)**被广泛地用来表示半结构化数据
1.4 数据库语言
1.4.1 数据操纵语言
数据操纵语言(Data-Manipulation Language,DML):使得用户可以访问或者操纵那些按照某种适当的数据模型组织起来的数据,有以下访问类型
- 对存储在数据库中的信息进行检索
- 向数据库中插入新的信息(insert)
- 从数据库中删除信息(delete)
- 修改数据库中存储的信息(update)
通常有两类基本的数据操纵语言
- 过程化DML(procedural DML):要求用户指定需要什么数据以及如何获得这些数据
- 声明式DML(declarative DML):也称为非过程化的DML,只要求用户指定需要什么数据,而不指明如何获得这些数据
- 查询(query)是要求对信息进行检索的语句,DML中涉及信息检索的部分称作查询语言(query language)
1.4.2 数据定义语言
- 数据定义语言(Data-Definition Language,DDL):数据库模式(架构)是通过一系列定义来说明,这些定义由一种称作为DDL的特殊语言来表达。DDL也可以用来定义数据的其他特征
- 数据库系统所使用的存储结构和访问方式通过一系列特殊得到DDL语句来说明的,这种特殊的DDL称作**数据存储和定义(data storage and definition)**语言
存储在数据中的数据值必须满足某些一致性约束(consistenhcy constraint)
- 域约束(domain constraint):声明一种属性属于某种具体的域就相当于约束它可以取的值
- 参照完整性(referential integrity):一个悬系中给定属性集上的取值也在另一关系的某一属性集的取值中出现(外键的出现可以维护此完整性)
- 断言(assertion):一个断言是数据库需要时刻满足的某一条件。域约束和参照为你整形约束是断言的特殊形式,简而言之,就是一个特殊的条件而已
- 授权(authorization):对于不同的用户授予不同的权限
DDL以一些指令(语句)作为输入,生成一些输出,DDL的输出放在数据字典(data dictionary),数据字典中包含了元数据(metadata),元数据是关于数据的数据,在读取和修改实际的数据之前,数据库系统先要参考数据字典啊
1.5 关系数据库
1.5.1 表
可以这么理解,表就对应一种关系,一种关系就能映射出一张表
1.5.2 数据操纵语言
SQL查询语言是非过程化的,它以几个表作为输入(也可能只有一个),总是仅返回一个表(视图)
1.5.3 数据定义语言(略)
1.5.4 来自应用程序的数据库访问
应用程序(application program):在这里是指以这种方式与数据库进行交互的程序
为了访问数据库,DML语言需要由宿主语言来执行,有两种途径可以做到这一点
- 一种是通过提供应用程序接口(过程集),它可以用来将DML和DDL的语句发送数据库,再去取回结果,如JDBC何ODBC等
- 另一种是通过扩展宿主语言的语法,在宿主语言的程序中嵌入DML调用,通常用一个特殊字符串作为DML调用的开始,并且通过预处理器,称为DML预编译器(DML precompiler),来将DML语句转变成宿主语言中的过程调用
1.6 数据库设计(略)
1.7 数据存储和查询
数据库系统的功能部件大致可以分为存储管理器和查询处理部件,将在逻辑层编写的更新和查询转变成物理层的高效操作序列,这是数据库系统的任务
1.7.1 存储管理器
存储管理器是数据库系统中负责在数据库中存储的底层数据与应用程序以及向操作系统提交的查询之间提供接口的部件。存储管理器负责与文件管理器进行交互。原始数据通过操作系统提供的文件系统存储在磁盘上。存储管理器将各种DML语句翻译到底层文件系统命令。因此,存储管理器负责数据库中数据的存储、检索和更新
存储管理部件包括:
- 权限以及完整性管理器(authorization and integrity manager):它检车是否满足完整性约束,并检查视图试图访问数据的用户的权限
- 事务管理器(transacation manager):
- 文件管理器(file manager)
- 缓冲区管理器(buffer manager):它负责将数据从磁盘上取到内存中来,并决定哪些数据应该被存储在内存中,它使得数据库可以处理比内存更大的数据
存储管理器实现了几种数据结构
-
数据文件(data files):存储数据库自身
-
数据字典(data dictionary):存储关于数据库结构的元数据,尤其是数据库模式
-
索引(index):提供对数据项的快速访问,数据库索引提供了指向包含特定值的指针,可以运用索引找到具有特定值的指针。散列是另外一种索引方式,在某些情况下速度更快,但并非所有情况下都是如此
1.7.2 查询处理器
查询处理器组件包括
- DDL解释器(DDL interpreter):它解释DDL语句并将这些蒂尼记录在数据字典中
- DML编译器(DML compiler):将查询语言中的DML语句翻译为一个执行方案,包括一系列查询执行引擎能理解的低级指令
- 查询执行引擎(query evaluation engine):执行由DML编译器产生的低级指令
1.8 事务管理
通常,对数据库的几个操作合起来形成一个逻辑单元
- 事务(transaction):是数据库应用中完成单一逻辑功能的操作集合
事务四大特性(ACID)
- 原子性(atomicity):要么一起成功,要么一起失败
- 一致性(consistency):数据库中的数据一致性,从一个一致性的状态转移到另一个一致性的状态
- 隔离性(isolation):一个事务的执行不能被其他事务干扰
- 持久性(durability):指一个事务一旦提交,它对数据库中的数据的改变就是永久性的
事务管理的底层支持
- 恢复管理器(recovery manager):为了保证原子性,失败的事务必须对数据库状态不产生任何影响。因此,数据库必须被恢复到该失败事务开始执行以前的状态
- 故障恢复(failure recovery):检测系统故障并将数据库恢复到故障发生以前的状态
- 并发控制管理器(concurrency-control manager):控制并发事务间的相互影响,保证数据库的一致性
- 事务管理器(transaction manager):包括并发控制管理器和恢复管理器