数据库系统概念 - 01

《数据库系统概念(原书第 6 版)》读书笔记。

第一章 引言

1.1 数据库系统的应用

数据库系统很重要,很多地方都在用。用户界面隐藏了数据库的细节,但其实数据库系统已经成了人们生活中的组成部分,blabla~

1.2 数据库系统的目标

数据库系统 (DBMS) 出现之前,人们普遍采用文件管理系统 (file-processing system) 来组织信息,但它有几个弊端。

以学生管理系统为例:

  • 数据的冗余和不一致
    • 例子:学生 A 读两个专业,音乐/数学
    • 冗余:学生 A 的地址可能出现在每个专业的记录中
    • 不一致:学生 A 的地址如果发生变更,可能只改了音乐系中的记录而没改数学系中的记录
  • 数据访问困难
    • 假如大学某个办事人员需要找出居住在某个特定地区的学生,只能手动筛选或找程序员重写一个程序
  • 数据孤立
    • 由于数据分散在不同的文件中,格式也可能不一致,因此编写程序来检索数据很困难
  • 完整性问题
    • 数据库中所存储的数据必须满足某些特定的一致性约束
    • 比方说大学每个系的账户余额不能低于零,由于数据分散在不同的文件中,当要添加新约束条件时很困难
  • 原子性问题
    • 多个操作相关联,要么全部发生,要么都不发生。(wikipedia)
    • 例子:从银行账户 A 到账户 B 的货币转移。它由两个操作组成,从账户 A 中取出资金并保存到账户 B。在原子事务中执行这些操作可以确保数据库保持一致的状态,也就是说,如果这两个操作中的任何一个失败,资金都不会丢失或创建。
  • 并发访问异常
    • 多个用户同时更新数据的问题
    • 例子:A 账户有 1000 块钱,两个职员同时从 A 取钱,一个取 100,一个取 200. 取款操作的程序逻辑是读取余额,减去取钱额度。如果两个职员并发取钱,程序读到的的余额可能都是 1000,从而导致计算错误。
  • 安全性问题
    • 不同文件和数据访问权限的问题

1.3 数据视图

数据库系统是一些相关联的数据和一组程序(访问和修改数据)的集合。

数据库系统的一个主要目的是给用户提供数据的抽象视图,对数据的共性进行提取概括,隐藏掉关于数据存储和维护的某些细节。

1.3.1 数据抽象

数据库系统的一个要求是必须能高效的检索数据,这就需要结构化的去存储数据,这就涉及到许多数学和计算机方面的知识。由于许多用户并不是专业的计算机从业人员,对用户来说,了解数据库的设计和数据结构没有太大的必要,这是管理员需要关心的事情。数据库管理系统通过如下三个层次的抽象来向用户屏蔽复杂性,简化系统的用户界面。

  • 物理层
    • 最低层次的抽象,描述数据实际上是如何存储的。
    • 这一层是开发 DBMS 的供应商应该研究的事情。
  • 逻辑层
    • 比物理层稍高层次的抽象,描述数据库中存储什么数据以及这些数据间存在什么关系。
    • 虽然简单的逻辑层结构的实现涉及到复杂的物理层结构,但逻辑层的用户不必知道这种复杂性。这称作物理数据独立性 (physical data independence)。
    • 这一层是由数据库管理员/数据库开发人员使用的,他们来确定数据库如何设计、应该保存哪些信息等等。
  • 视图层
    • 最高层次的抽象,但只描述整个数据库的某个部分。
    • 数据库系统的多数用户并不需要关心所有的信息,而只需要访问数据库的一部分。比如老师要查询数据库中的某一部分学生的信息,老师不必知道数据库是如何设计的。
    • 视图抽象层的定义正是为了使用户与系统的交互更简单。系统可以为同一数据库提供多个视图,而视图又保证了数据的安全性。

1.3.2 实例和模式

  • 数据库模式
    • 数据库的总体设计,不会经常变化。(比方说:变量声明)
    • 不同的抽象层次有不同的模式,从对应用程序的效果来看,逻辑层的数据库模式是最重要的。
  • 实例:特定时刻存储在数据库中的信息的集合,会经常变化。(比方说:给变量赋值)

1.3.3 数据模型

数据库结构的基础就是数据模型。数据模型是描述数据(数据结构)、数据之间的联系、数据操作(语义),以及一致性(完整性)约束的概念工具的集合。

  • 数据模型
    • 物理数据模型(物理层)
    • 逻辑数据模型(逻辑层、视图层)
      • 基于对象
        • 实体联系模型:第 7 章
        • 面向对象模型:第 22 章
      • 基于记录
        • 关系模型:常用,2~6 章详细讲解
        • 网状模型:数据联系紧密,很少用
        • 层次模型:数据联系紧密,很少用

1.4 数据库语言

数据库用户只能通过数据库语言来定义数据库的结构和访问数据库中的数据。数据库管理系统提供两种不同类型的语言:一种用于定义数据库模式,这就是数据定义语言 (DDL);另一种用于表达数据库的查询和更新,这就是数据操纵语言 (DML)。

实际上我们使用时,DDL 和 DML 不是两种语言,而是一种语言(比如 SQL)的不同部分。

  • 1.4.1 数据操纵语言
    • 过程式:需要用户指定获取什么数据以及如何获取;
    • 声明式:只需要用户指定获取什么数据,不关心获取方式;更加易学易用。
  • 1.4.2 数据定义语言
    • 各行各业都有各自的"行话",有时也称为"黑话"。数据定义语言就是数据库系统的"黑话"。
    • 例如这边一句"create table"语句,那边数据库管理系统就明白了要创建一张表。

1.5 关系数据库

2~6 章讲解。

1.6 数据库设计

7~9 章讲解,这里只是简要介绍。

1.7 数据存储和查询

10~13 章讲解。

1.8 事务管理

事务 (transaction) 是数据库应用中完成单一逻辑功能的操作集合,是一个既具原子性又具一致性的逻辑执行单元。

比如转账,转账操作要么完成要么不完成,这称作原子性;转帐之后钱的总数还应该保持不变,这种对数据库值的正确性要求称作一致性;当资金转帐成功结束后,不管发生什么事情,包括系统故障,帐户 A 和 B 的钱数也应该保持不变,这种对数据库的值保持不变的要求称作持久性。每个事务都不能违背这三个原则。

关于事务的更多概念将在 26 章讨论。

1.9 数据库体系结构

数据库系统由多个组件构成,它的系统结构如下图所示:

数据库应用程序通常划分为两层或者三层结构。如下图所示:

三层结构更适合大型的应用和互联网上的应用,更为常见。

1.10 数据挖掘与信息检索

  • 数据挖掘(Data Mining)是指半自动分析大型数据库,从中找到有用的模式的过程。数据挖掘不同于机器学习,机器学习是处理大量的磁盘中的数据文件,而数据挖掘指的是处理数据库中的数据。由于很多查询是十分复杂的,很难使用 SQL 进行查询,所以需要使用数据挖掘技术。数据挖掘可以从数据中分析出有价值的规律,它可以帮助企业执行更好的决策。
  • 数据仓库(Data Warehouse)可以在一个站点中一统一的模式收集不同来源的数据。提供为用户提供了一个统一的数据接口。
  • 信息检索(Information Retrieval)是指查询无结构的文本数据。

1.11 特种数据库

在某些数据库系统的应用领域,关系型数据模型是受限制的。我们需要其它的数据模型来处理这些应用领域。常见的非关系型模型,如

  • 对象基于的数据模型(Object-Based Data Model)。它可以便捷的实现面向对象编程的数据存储。
  • 半结构化的数据模型(Semi-structured Data Model)。它的特点是相同类型的单个数据项可能具有不同的属性集。
  • 键值数据模型(Key-value Data Model)。它是使用 map 或字典实现的。每一个 key 关联一个集合。键值数据模型没有查询语言,它使用简单的 get, put, 和 delete 命令去操作数据。它具有快速存取,可扩展性和可靠性等特点。

1.12 数据库用户和管理员

与数据库系统进行交互的人群可以以分为:数据库用户和数据库管理员。

不同类型的数据库用户的不同交互方式为:

  • 普通的用户:通过应用程序与数据库系统进行功能。
  • 应用开发人员:通过编程语言与数据库系统交互,开发应用程序,提供用户接口。
  • 专业人员:直接使用数据库查询语言操作数据库系统。

数据库管理员的作用:

  • 定义模式。通过执行 DDL 来创建数据库模式(Schema)。
  • 定义存储结构和访问方式。
  • 修改模式和物理组织。
  • 授权数据的访问。
  • 日常维护。周期性的备份数据库。确保有充足的磁盘空间。监控数据库系统的运行状态等等。

1.13 数据库系统的历史

  • 20 世纪 50 年代~20 世纪 60 年代:使用磁带进行数据存储,只能顺序读取;
  • 20 世纪 60 年代末~20 世纪 70 年代:硬盘广泛使用,数据在磁盘上的位置无关紧要;
  • 20 世纪 80 年代:IBM 研究院在关系型数据库上取得突破性进展,此后关系模型在数据模型中一直独占鳌头。
  • 20 世纪 90 年代初:决策支持和查询再度成为数据库的一个重要领域,分析大量数据的工具取得进展;
  • 20 世纪 90 年代:互联网爆炸式发展,数据库必须支持更高的事务处理速度和更高的可靠性。
  • 21 世纪第一个十年:
    • XML、XQuery 的兴起;
    • 开源数据库应用的显著增长,特别是 PostgreSQL 和 MySQL;
    • 专门用于数据分析的数据库有了很大增长;
    • 数据挖掘技术被广泛部署应用;

1.14 总结

  • 首先认识了数据库系统,知道了它是什么和为什么,以及了解数据的表现形式、数据库语言等基本的数据库系统相关的概念。
  • 然后介绍了具体类型的数据库,了解了关系型数据库。以及如何设计数据库。
  • 接着介绍了数据库系统的内部结构,了解了存储,查询和事务等核心的数据库系统的组件。
  • 最后讲了一些和数据库系统相关的其它概念。