引言
数据库管理系统(DBMS)由一个互相关联的数据集合和一组可以访问这些数据的程序组成。这个数据集合通常称为数据库。
1.1 数据库系统的应用
1.2 数据库系统的目标
文件系统中存储数据的弊端:
- 数据的冗余和不一致,不同文件的存储格式不同,数据在多份文件中存储造成冗余,多份副本可能数据不一致
- **数据访问困难“,传统的文件方式不支持以方便和高效的方式获取数据,需要为每种数据访问需求单独定制访问数据的程序。
- 完整性问题,传统的文件方式,约束都是由程序实现的,无法动态新增约束,另外如果约束涉及多个数据项,实现起来也比较复杂。
- 原子性问题,多个操作要么同时成功要么同时失败,创痛的文件方式实现起来比较复杂。
- 并发访问异常,需要控制应用的并发访问
- 安全性问题,指定的用户访问指定的数据
1.3 数据视图
数据库系统的一个主要目的是给用户提供数据的抽象视图,隐藏数据存储和维护的细节
1.3.1 数据抽象
为了实现高效检索,促使设计者使用复杂的数据结构来表示数据,通过如下几种层次来为数据库使用人员屏蔽复杂性,简化用户和系统的交互。
- 物理层,最底层抽象,描述数据实际上如何存储,详细描述底层复杂的数据结构
- 逻辑层,数据库中存储什么数据,以及这些数据之间的关系。逻辑层用户不需要知道物理层实际存储的复杂性,这种称作物理数据独立性
- 视图层,更高层抽象,只描述数据库的一部分。数据库用户不需要了解所有逻辑层的内容,只关心一部分信息。
1.3.2 实例和模式
特定时刻存储在数据库中的信息的集合称作数据库的一个实例(instance)。而数据库的总体设计称作数据库模式(schema)
模式和实例可以类比面向对象程序语言中的类和对象。
如果应用程序不依赖于物理层模式,它们被称为具有物理数据独立性
1.3.3 数据模型
数据模型是一个描述数据、数据联系、数据语义以及一致性约束的概念工具的集合。数据模型提供了一种描述物理层、逻辑层以及视图层数据库设计的方式。
- 关系模型(relational model)。用表的集合来表示数据和数据间的联系
- 实体-关系模型(entity-relationship model), 基于对现实世界的一种认识:物理世界由一组称作实体的基本对象以及这些对象间的联系构成
- 基于对象的数据模型(object-based data model)。面向对象的程序设计,可以看做是E-R模型增加了封装、方法(函数)和对象标识等概念后的扩展
- 把结构化数据模型(semistructured data model),允许相同类型的数据项含有不同的属性集的数据定义。例如XML
- 网状数据模型(network data model)
- 层次数据模型(hierarchical data model)
1.4 数据库语言
数据库系统提供数据定义语言(data-definition language DDL)来定义数据库模式。以及数据操作语言(data-manipulation language DML)来表达数据库的查询和更新。他们简单地构成了单一的数据库语言(SQL)的不同部分
1.4.1 数据操作语言(Data-Manipulation Language)
有以下访问类型:
- 对存储在数据库中的信息进行检索
- 向数据库中插入新的信息
- 从数据库中删除信息
- 修改数据库中存储的信息
通常有两类基本的数据操作语言: - 过程化DML(procedural DML),要求用户指定需要什么数据以及如何获得这些数据
- 声明式DML(declaretive DML),只要求用户指定需要什么数据,不指明如何获取数据
数据库系统的查询处理器部件将DML的查询语句翻译成数据系统物理层的动作序列
1.4.2 数据定义语言(Data-Definition Language)
数据定义语言(DDL)用来定义数据库模式和其他特征
在DDL中包含一种特殊的语句,叫做数据存储和定义语言(Data storage and definition)。用来定义数据库系统所用的存储结构和访问方式
数据库中的数据必须满足一致性约束(consistency constraint),这些约束可以是任意谓词,但是要测试所有谓词代价太大,所以数据库系统定义了最小代价测试的完整性约束
- 域约束(domain constraint),约束每个属性的所有可能取值构成的域(类型)
- 参照完整性(referential integrity),一个关系中给定属性集上的取值也在另外一个关系中给定属性集上的取值中出现。数据库通常会拒绝执行参照完整性被破坏的操作。
- 断言(assertion),数据库需要时刻满足的某一条件。创建断言时系统会检查有效性,断言创建后,不破坏断言的更新才会被允许。
- 授权(authorization),不同的用户在数据库的不同值上允许不同的访问类型。
DDL的输出放在数据字典中(data dictionary),数据字典包含元数据,元数据是指数据的数据,数据字典是一种特殊的表,这个表只能由数据库系统本身(非一般用户)来访问和修改。在读取和修改实际数据前,数据库系统先要参考数据字典
1.5 关系数据库
基于关系模型,使用一系列表来表示数据及数据与数据之间的关系。
1.5.1 表
每个表有多个列,每个列有唯一的名字
1.5.2 数据库操作语言
SQL数据库查询语言是非过程化的,他以几个表作为输入,总是返回一个表
1.5.3 数据库定义语言
SQL提供了一个丰富的DDL语言,通过他我们可以定义表,完整性约束、断言等等
1.5.4 来自应用程序的数据库访问
一些应用程序可以通过通用程序设计语言表达,但是无法用SQL表达。
应用程序访问数据库两种方式:
- 数据库提供应用程序访问接口,如JDBC和ODBC
- 宿主程序进行扩展,并通过预编译器(DML precompiler)将DML语言转换为宿主语言的过程调用
1.6 数据库设计
1.6.1 设计过程
- 初始阶段,全面刻画数据库用户的数据需求,输出需求规格文档
- 概念设计阶段
- 逻辑设计阶段
- 物理设计阶段
1.6.2 一个例子
1.6.3 实体-联系模型(E-R)
实体是现实事件中可区别其他对象的一件“事情”或一个“物体”
联系是几个实体之间的关联
1.6.4 规范化
规范化过程是设计数据库的另外一种方法,这种方法是一种设计符合适当的范式(normal form)的模式。为了确定一个关系模式是否是想要的范式就,需要额外的关于用数据库建模的现实世界中的结构信息。最常用的方法是函数依赖(functional dependency)
1.7 数据存储和查询
数据库系统的功能部件大致可分为存储管理器和查询处理部件
1.7.1 存储管理器
负责数据库中数据的存储、检索和更新
存储管理部件包括:
- 权限及完整性管理器(authorization and integrity manager)监测是否满足用户完整性约束,并检查试图访问数据库的用户权限
- 事务管理器(transaction manager),保证数据库一致性并保证事务不冲突
- 文件管理器(file manager),管理磁盘空间分配,管理磁盘存储信息的数据结构
- 缓冲区管理器(buffer mananger),负责将数据从磁盘取到内存,并决定哪些数据应该被加载到内存
存储管理器实现了几种数据结构作为系统物理实现的一部分
- 数据文件(data files),存储数据库自身
- 数据字典(data dictionary),存储数据库的元数据,尤其是数据库模式
- 索引(index),提供对数据项的快速访问
1.7.2查询处理器
包括
- DDL解释器(DDL interpreter),解释DDL语句,并将定义记录在数据字典中
- DML编译器(DML compiler),将DML解释为一个可执行的方案,包括一系列查询执行引擎能理解的低级指令
- 查询执行引擎(query evaluation),执行由DML编译器生成的低级指令
1.8 事务管理
多个操作要么完成要么不完成的要求称为原子性(atomicity),此外还有一致性(consistency)要求和持久性(durability)**
事务(transaction)是数据库应用中完成单一逻辑功能的操作集合。每个事务是具有原子性又有一致性的单元。执行过程中,必要时允许暂时不一致。
适当定义各个事务是程序员的职责,事务的定义应使之能保持数据库的一致性。
原子性和持久性是数据库系统的恢复管理器(recovery manager)的职责
失败的事务必须不对数据库产生任何影响,恢复到事务执行前的状态,这种情况下数据库系统必须进行故障恢复(failure recovery),即检测故障并将数据库恢复到故障发生前的状态
**并发控制管理器(concurrency-control manager)**控制并发事务间的相互影响
**事务管理器(transaction manager)**包括并发控制管理器和故障恢复器
1.9 数据库体系结构
数据库体系结构很大程度上决定于运行数据库系统的计算机系统
1.10 数据挖掘与信息检索
数据挖掘(data mining),是指半自动的分析大型数据库并从中找出有用的模式的过程。数据挖掘与机器学习和统计分析不一样的地方是数据挖掘是在数据库中发现知识。
从数据库中发现的某一类的知识可以用规则(rule)表示
数据挖掘半自动体现在:数据预处理使数据变为适合算法的格式,需要人工挑选有用的模式
大型企业有各种不同的用于决策的数据来源,要在这些各种各样的数据上高效的执行查询,企业建立了数据仓库(data warahouse)
查询非结构化的文本数据成为信息检索(information retrieval)
1.11 特种数据库
1.11.1 基于对象的数据模型
可以看做是E-R模型的扩展,增加了封装、方法(函数)和对象标识。
现在主要数据库厂商都支持对象-关系数据模型(object-relational data model),这是一个面向对象模型和关系数据模型结合在一起的数据模型
1.11.2 半结构化数据模型
允许相同类型的数据项有不同的属性集的数据说明
1.12 数据库用户和数据库管理员
1.12.1 数据用户和界面
- 无经验用户
- 应用程序员
- 老练的用户
- 专门的用户
1.12.2 数据库管理员
数据库管理员(Database Administrator,DBA),DBA的作用包括:
- 模式定义(schema definition),DBA通过DDL语言创建最初的数据库模式
- 存储结构及存取方法定义(storage structure and access-method definition)
- 模式及物理组织结构的修改(schema and physical-organization modification),DBA修改为了反映需求的变化以及优化性能
- 数据访问授权(granting of authorization for data access),授权系统保存在一个特殊的系统结构中,一旦有访问数据库的请求,就会访问该结构
- 日常维护(routine maintenance)
- 定期备份
- 确保运转时剩余空间足够
- 监视数据库运行,确保数据库的性能不因一些耗时任务而整体下降很多