读书笔记:《数据库系统概念》
第 1 章 引言
数据库管理系统(DataBase-Management System,DBMS)由一个互相关联的数据的集合和一组用以访问这些数据的程序组成。这个数据集合通常称作数据库(database)。DBMS的主要目标是要提供一种可以方便、高效地存取数据库信息的途径。
1.1 数据库系统的应用
1.2 数据库系统的目标
1.2.1 传统的文件处理系统
在文件处理系统中存储组织信息的主要弊端包括:
- 数据的冗余和不一致(data redundancy and inconsistency)
- 数据访问困难(difficulty in accessing data)
1.2.2 数据库检索系统面临的挑战
- 数据孤立
- 完整性问题
- 加入新约束时,与原有约束的协调问题
- 原子性问题
- 并发访问异常
- 安全性问题
1.3 数据视图
数据库系统的一个主要目的是给用户提供数据的抽象视图,也就是说,系统隐藏关于数据存储和维护的某些细节。
1.3.1 数据抽象
系统开发人员通过如下几个层次上的抽象来对用户屏蔽复杂性,以简化用户与系统的交互:
- 物理层
- 逻辑层
- 视图层
1.3.2 实例和模式
特定时刻存储在数据库中的信息的集合称作数据库的一个实例(instance)。而数据库的总体设计称作数据库模式(schema)。
- 模式的分类
- 物理模式
- 逻辑模式
- 子模式
- 描述了数据库的不同视图
- 物理数据独立性
- 不依赖于物理模式的逻辑模式具有物理数据独立性
1.3.3 数据模型
数据库结构的基础是数据模型(data model)。数据模型是一个描述数据、数据联系、数据语义以及一致性约束的概念工具的集合。数据模型提供了一种描述物理层、逻辑层以及视图层数据库设计的方式。
数据模型可以被分为四类:
- 关系模型
- 关系模型用表的集合来表示数据和数据间的联系
- 使用最广泛的数据模型
- 实体-联系模型(entity-relationship model)
- E-R模型基于这样一个基本的认识:现实世界由一组称作实体的基本对象以及这些对象间的联系构成。
- 此模型被广泛用于数据库设计
- 基于对象的数据模型(object-based data model)
- 面向对象的数据模型可以看成是E-R模型增加了封装、方法(函数)和对象标识等概念后的扩展。
- 对象-关系数据模型 = 基于对象的数据模型 + 关系数据模型
- 半结构化数据模型
- 半结构化数据模型允许那些相同类型的数据项含有不同的属性集的数据定义。
- 可扩展标记语言(eXtensible Markup Language, XML)被广泛地用来表示半结构化数据。
1.4 数据库语言
数据库系统提供数据定义语言(data-definition language)来定义数据库模式,以及数据操纵语言(data-manipulation language)来表达数据库的查询和更新。数据定义语言和数据操纵语言一起构成了数据库语言.
1.4.1 数据操纵语言
数据操纵语言(Data-Manipulation Language, DML)有多种访问类型:
- 检索
- 插入
- 删除
- 修改
通常有两类基本的数据操纵语言:
- 过程化 DML:目标数据 + 获取方法
- 声明式 DML:目标数据
- 由于用户不必指出数据的获取方法,数据库系统必须找出一种 访问数据的高效手段
DML 中涉及信息检索的部分称作 查询语言(query language)。实践中,常把查询语言和数据操纵语言作为同义词使用,尽管从技术上来说,这并不正确.
1.4.2 数据定义语言
数据库模式是通过一系列定义来说明的,这些定义由一种称作数据定义语言(Data-Definition Language, DDL)的特殊语言来表达。DDL也可用于定义数据的其他特征。
数据库系统所使用的存储结构和访问方式使用 数据存储和定义(data storage and definition)语言来说明
- 域约束
- 每个属性值的类型或取值范围
- 参照完整性
- 数据库的局部修改可能破坏整体完整性
- 断言
- 一个断言就是数据库需要时刻满足的某一条件
- 授权
- 授予不同的用户以不同的访问权限
DDL的输出存放在数据字典(data dictionary)中,其中包含了元数据(metadata). 元数据是数据的数据.
1.5 关系数据库
关系数据库基于关系模型,使用一系列表来表达数据以及这些数据之间的联系。关系数据库也包括 DML和DDL。
1.5.1 表
- 记录
- 字段
1.5.2 数据操控语言
SQL查询语言是非过程化的。它以几个表作为输入(也可能只有一个),总是仅返回一个表。
1.5.3 数据定义语言
SQL提供了一个丰富的DDL语言,通过它,我们可以定义表、完整性约束、断言,等等。
1.5.4 来自应用程序的数据库访问
一些计算和动作必须用一种宿主语言来写,比如C、C++或 Java,在其中使用嵌入式的SQL查询来访问数据库中的数据。应用程序(application program)在这里是指以这种方式与数据库进行交互的程序。
有两种基本的方式:
- 通过一种应用程序接口.
- Java数据库连接(JDBC)
- 通过拓展宿主语言的语法,在宿主程序中嵌入 DML 调用.
1.6 数据库设计
数据库设计的主要内容是数据库模式的设计。
1.6.1 设计过程
- 制定规格文档,这是一个高层的数据模型
- 概念设计,将高层的数据模型细化为数据库概念
- 还可能包括功能需求说明
- 逻辑设计阶段
- 物理设计阶段
1.6.2 大学机构的数据库设计
1.6.3 实体-联系模型
实体-联系(E-R)数据模型使用一组称作实体的基本对象,以及这些对象间的联系。
数据库的总体逻辑结构(模式)可以用实体-联系图(entity- relationship diagram,E-R图)进行图形化表示。有几种方法来画这样的图。最常用的方法之一是采用统一建模语言(Unified Modeling Language,UML)。
在基于UML的符号中,E-R图有如下规则:
- 实体集用矩形框表示,实体名在头部,属性名列在下面。
- 联系集用连接一对相关的实体集的菱形表示,联系名放在菱形内部。
除了实体和联系外,E-R模型还描绘了数据库必须遵守的对其内容的某些约束。一个重要的约束是映射基数(mapping cardinality),它表示通过某个联系集中能与一实体进行关联的实体数目。
1.6.4 规范化
设计关系数据库所用到的另外一种方法是通常被称为规范化的过程。
它的目标是生成一个关系模式集合,使我们存储信息时没有不必要的冗余,同时又能很轻易地检索数据。这种方法是设计一种符合适当的范式(normal form)的模式。
一个不好的设计可能会包括如下不良特性:
- 信息重复
- 缺乏表达(更新、删除)某些信息的能力
1.7 数据库存储和查询
1.7.1 存储管理器
存储管理器是数据库系统中负责在数据库中存储的低层数据与应用程序以及向系统提交的查询之间提供接口的部件。存储管理器将各种 DML语句翻译为底层文件系统命令。
存储管理部件包括:
- 权限及完整性管理器
- 事务管理器(transaction manager),它保证即使发生了故障,数据库也保持在一致的(正确的)状态,并保证并发事务的执行不发生冲突。
- 文件管理器(file manager),它管理磁盘存储空间的分配,管理用于表示磁盘上所存储信息的数据结构。
- 缓冲区管理器(buffer manager),缓冲区管理器是数据库系统中的一个关键部分,因为它使数据库可以处理比内存更大的数据。
存储管理器实现了几种数据结构,作为系统物理实现的一部分:
- 数据文件(data files),存储数据库自身。
- 数据字典(data dictionary),存储关于数据库结构的元数据,尤其是数据库模式。
- 索引(index),提供对数据项的快速访问。
1.7.2 查询处理器
查询处理器组件包括:
- DDL 解释器(DDL interpreter),它解释 DDL语句并将这些定义记录在数据字典中。
-
DML 编译器(DML complier),将查询语言中的 DML语句翻译为一个执行方案。
- 包括查询优化功能
- 查询执行引擎(query evaluation engine),执行由 DML编译器产生的低级指令。
1.8 事务管理
- 原子性
- 一致性
- 持久性
事务(transaction)是数据库应用中完成单一逻辑功能的操作集合。
- 事务同时具有原子性和一致性
事务管理器主要有两个部分组成:
- 恢复管理器(recovery maneger)负责故障恢复;
- 并发控制管理器(concurrency-control manager) 控制并发事务间的相互影响,并保持数据库的一致性。