第 1 章 引言

数据库管理系统(DBMS):由一个互相关联的数据的集合和一组用以访问这些数据的程序组成。DBMS 的主要目标是要提供一种可以方便、高效地存取数据库信息的途径。

1.1 数据库的应用

  • 企业信息:销售、会计、人力资源、生产制造、联机零售;
  • 银行和金融:银行业、信用卡交易、金融业;
  • 大学:存储学生信息、课程注册和成绩;
  • 航空业:存储订票和航班信息;
  • 电信业:存储通话记录。

1.2 数据库系统的目标

文件处理系统中存储组织信息的主要弊端包括:

  • 数据的冗余和不一致:不同文件可能有不同结构,不同程序可能由不同语言写成,相同的信息可能在多个地方重复存储;同一数据的不同副本不一致。
  • 数据访问困难:不支持以一种方便而高效的方式去获取所有数据。
  • 数据孤立:数据分散在不同文件中,这些文件又可能具有不同的格式。
  • 完整性问题:对数据的一致性约束很难实现。
  • 原子性问题:一次事务中对数据的所有操作要么都发生,要么根本不发生。
  • 并发访问异常:多线程/进程同步问题。
  • 安全性问题:并非数据库系统的所有用户都可以访问所有数据。

1.3 数据视图

数据库系统要为用户提供数据的抽象视图,即系统隐藏关于数据存储和维护的某些细节。

1.3.1 数据抽象

数据抽象的三个层次
  • 物理层:最底层次的抽象,描述数据实际上是怎样存储的,详细描述复杂的底层数据结构;

  • 逻辑层:描述数据库中存储什么数据及这些数据间存在什么关系;

    物理数据独立性:逻辑层的结构实现设计复杂的物理层结构,但逻辑层的用户不必知道这样的复杂性。

  • 视图层:最高层次的抽象,只描述整个数据库的某个部分。

1.3.2 实例和模式

实例 (instance):特定时刻存储在数据库中的信息的集合称作数据库的一个实例;

模式 (schema):数据库的总体设计称作数据库模式。

模式实例的关系可以类比面向对象程序设计中对象的关系。

根据不同的抽象层次,数据库系统可以分为几种不同的模式:物理模式、逻辑模式、子模式。

1.3.3 数据模型

数据模型:一个描述数据、数据联系、数据语义以及一致性约束的概念工具的集合。

  • 关系模型:用表的集合表示数据和数据间的联系。每个表包含某种特定类型的记录。每个记录类型定义了固定数目的字段(或属性)。表的列对应于记录类型的属性。
  • 实体 - 联系模型:现实世界由一组称作实体的基本对象以及其之间的联系构成。实体是现实世界中可区别于其他对象的一件“事情”或一个“物体”。
  • 基于对象的数据模型:可看作 E - R 模型增加了封装、方法和对象标识等概念后的扩展。
  • 半结构化数据模型:允许那些相同类型的数据项含有不同的属性集的数据定义。

1.4 数据库语言

数据定义语言:定义数据库模式;

数据操纵语言:表达数据库的查询和更新。

两者不是两种分离的语言,其构成了单一的数据库语言的不同部分。

1.4.1 数据操纵语言

数据操纵语言 (DML):使得用户可以访问或操纵那些按照某种适当的数据模型组织起来的数据。

有以下访问类型:检索、插入、删除、修改。(CRUD)

两类基本的数据操纵语言:

  • 过程化 DML:要求用户指定需要什么数据以及如何获得这些数据;
  • 声明式 DML:只要求用户指定需要什么数据,而不指明如何获得这些数据。

1.4.2 数据定义语言

数据定义语言 (DDL):说明数据库模式,定义数据的其他特征。

数据存储和定义语言:一种特殊的 DDL,用于说明数据库系统所使用的存储结构和访问方式。(实现细节)

可以以最小代价测试的完整性约束:

  • 域约束: 最基本形式,约束属性可以取的值。
  • 参照完整性:一个关系中给定属性集上的取值也在另一关系的某一属性集的取值中出现。
  • 断言:数据库需要时刻满足的某一条件,上述两种约束是断言的特殊形式。
  • 授权:读权限、插入权限、更新权限、删除权限。

DDL 的输出放在数据字典中,数据字段包含了元数据,元数据是关于数据的数据。

1.5 关系数据库

关系型数据库基于关系模型,使用一系列表来表达数据以及这些数据之间的联系。

1.5.1 表

每个表有多个列,每个列有唯一的名字。

image-20231231144429644

1.5.2 数据操纵语言

1
2
3
select instructor.name
from instructor
where instructor,dept_name='History';
1
2
3
4
select instructor.ID, department.dept_name
from instructor, department
where instructor.dept_name = department.dept_name and
department.budget > 95000;

1.5.3 数据定义语言

1
2
3
4
create table department
(dept_name char(20),
building char(15)
budget numeric(12, 2));

1.5.4 来自应用程序的数据库访问

SQL 不支持的计算需要基于宿主语言来实现。

为了访问数据库 DML 语句需要由宿主语言来执行:

  • 提供应用程序接口:ODBC、JDBC。
  • 扩展宿主语言语法:通过 DML 预编译器将 DML 语句转变成宿主语言中的过程调用。

1.6 数据库设计

数据库设计的主要内容是数据库模式的设计。

1.6.1 设计过程

  1. 刻画用户的数据需求,制定用户需求的规格文档;

  2. 概念设计,选择一个数据模型,将需求转换成一个数据库的概念模式;

    • 决定包含哪些属性:商业决策;

    • 决定如何将这些属性组织到多个表中:

      1)实体 - 联系模型;

      2)规范化。

    • 功能需求说明,描述用户在数据之上的各种操作。

  3. 逻辑设计阶段:将概念模式映射到要使用的数据库系统的实现数据模型上;

  4. 物理设计阶段:根据得到的数据库模式指定数据库的物理特性。

1.6.2 实体 - 联系模型

E - R 数据模型使用一组称作实体的基本对象,以及这些对象间的联系。

数据库中实体通过属性集合来描述;

联系是几个实体之间的关联,同一类型的所有实体的集合称作实体集,同一类型的所有联系的集合称作联系集。

使用 UML 绘制 E - R 图:

  • 实体集用矩形框表示,实体名在头部,属性名列在下面。
  • 联系集用连接一对相关的实体集的菱形表示,联系名放在菱形内部。
E - R图

映射基数:表示通过某个联系集能与一实体进行关联的实体数目。

1.6.3 规范化

目标:生成一个关系模式集合,使我们存储信息时没有不必要的冗余,同时又能很轻易地检索数据。最常用的方式是函数依赖。

一个不好的设计可能会导致的不良特性:

  • 信息重复;
  • 缺乏表达某些信息的能力。

1.7 数据存储和查询

数据库系统的功能部件大致可分为存储管理器和查询处理器。

1.7.1 存储管理器

存储管理器:负责与文件管理器进行交互,将各种 DML 语句翻译为底层文件系统命令。负责数据库中数据的存储、检索和更新。

存储管理部件

  • 权限及完整性管理器:检查约束和权限。
  • 事务管理器:保证一致性与并发访问。
  • 文件管理器:管理磁盘空间分配与存储信息的数据结构。
  • 缓冲区管理器:在内存与磁盘间进行缓存调度。

存储管理器实现的数据结构

  • 数据文件:存储数据。
  • 数据字典:存储元数据,尤其是数据库模式。
  • 索引:提供对数据项的快速访问。

1.7.2 查询处理器

查询处理组件包括:

  • DDL 解释器:解释 DDL 语句并将这些定义记录在数据字典中。
  • DML 编译器:将查询语言中的一系列低级指令。
  • 查询执行引擎:执行由 DML 编译器产生的低级指令。

1.8 事务管理

原子性:一个逻辑单元中的所有操作要么都发生,要么都不发生。

持久性:一个逻辑单元执行结束后,即使系统故障,数据库也要保持操作完成后的状态。

事务:数据库应用中完成单一逻辑功能的操作集合。事务启动和成功结束时数据库都是一致的。

事务管理器

  • 恢复管理器:事务执行失败时,负责进行故障恢复,即检测系统故障并将数据库恢复到故障发生以前的状态。
  • 并发管理器:控制并发事务间的相互影响,保证数据库一致性。

1.9 数据库体系结构

系统体系结构 两层和三层体系结构

1.10 数据库用户和管理员

1.10.1 数据库用户和用户界面

  • 初学者用户:缺少经验,使用已有的用户界面与系统交互。
  • 应用程序员:计算机专业人员,可以借助工具开发应用界面。
  • 老练用户:使用数据库查询语言或数据分析软件与系统交互。

1.10.2 数据库管理员

数据库管理员 (DBA):对系统进行集中控制的人。

DBA 的作用包括:

  • 模式定义;
  • 存储结构及存取方法定义;
  • 模式及物理组织的修改;
  • 数据访问授权;
  • 日常维护。