1. 数据库系统

数据(data):描述事物状态或者属性的符号记录,在特定的语义下成为信息

数据库(database):存储数据的仓库

  • 数据是有组织的
  • 数据的冗余度小
  • 数据是需要长期存储的
  • 数据的独立性较高

数据库管理系统(Database Management System,DBMS):由一个互相关联的数据的集合和一组用以访问这些数据的程序组成,是位于用户应用程序与操作系统之间的一层系统软件

  • 定义:提供数据定义语言,定义数据库结构
  • 操纵:提供数据操纵语言,实现查询、插入、删除和修改等基本操作
  • 运行管理:确保数据的安全性、完整性和同步性等性质
  • 建立与维护:实现数据库的创建 、备份、恢复、监视、分析和优化等功能

数据库系统(Database System,DBS):引入数据库技术后的整个计算机系统

2. 数据库面临问题

  • 冗余(redundancy):相同的数据可能在不同位置的位置重复存储,浪费存储空间

  • 不一致性问题(inconsistentcy):由于数据冗余,在某些位置对数据的修改并未同步到其他位置

  • 数据孤立(data isolation):数据通常分散在多个文件和应用程序中,导致数据之间难以整合

  • 完整性问题(integrity):缺乏机制来强制执行数据的一致性约束

  • 原子性问题(atomicity):操作中途中断会导致不一样的结果

  • 安全性问题(security):数据可能容易受到未经授权的访问或篡改

  • 访问困难(difficulty in accessing):访问数据需要依赖于应用程序的定制代码,不支持以一种方便而高效的方式去获得数据

  • 并发访问异常(concurrent-access anomaly):当多个用户或程序同时访问和修改文件时,可能会产生冲突

3. 数据库视图

3.1 数据模型

  • 关系模型(relational):以表格形式存储,每个表由行(记录)和列(字段)组成

  • 实体-联系模型(entity-relationship):使用E-R图直观地表示实体和属性之间的联系

  • 半结构化数据模型(semi-structured data):允许某些类型的数据含有不同属性集,如标记(XML标签)或键值对(JSON对象)

  • 基于对象的数据模型(object-based data):数据以类的形式存在,包含属性和方法

3.2 数据抽象

  • 物理层(physical):描述数据在计算机存储介质上的具体布局和组织

  • 逻辑层(logical):描述了数据库中的数据是什么,以及数据之间的关系

  • 视图层(view):描述了用户如何查看和操作数据库中的数据

3.3 数据模式

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

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

模式对应于程序中的变量声明,实例对应于变量某一时刻的值

4. 数据库语言

4.1 数据定义语言

数据定义语言(Data Definition Language,DDL):定义数据库模式,负责数据的存储和定义

  • 域约束(domain constraint):数据类型约束、取值范围约束、非空约束、默认值约束等

  • 引用完整性(referential integrity):确保一个关系中的外键一定存在于另一关系中

  • 授权(authorization):确保只有特定的用户或角色可以对数据库对象进行操作

数据字典(data dictionary):DDL的输出放在数据字典中,数据字段包含了元数据

4.2 数据操纵语言

数据操纵语言(Data Manipulation Language,DML):用于对数据库中的数据进行操作,包括检索(query)、插入(insert)、删除(delete)和修改(update)

  • 过程化(procedural):要求用户指定需要什么数据以及如何获得这些数据

  • 声明式(declarative):要求用户指定需要什么数据

5. 数据库引擎

5.1 存储管理器(storage manager)

功能:负责数据的物理存储、管理和访问

  • 权限及完整性管理:检测是否满足完整性约束,并检查试图访问数据的用户权限
  • 事务管理:管理数据事务日志,保证即使系统发生故障数据库也保持在正确状态,并保证并发事务的执行不发生冲突
  • 文件管理:将数据从内存写入磁盘,以及从磁盘读取数据到内存
  • 缓冲区管理:管理数据库缓冲区,以减少磁盘I/O操作

数据结构:

  • 数据文件(data file):存储数据库中实际数据
  • 数据字典(data dictionary):存储数据库的元数据
  • 索引(index):提供对数据项的快速访问

5.2 查询处理器(query processor)

  • DDL解释器(interpreter):它解释DDL语句并将这些定义记录在数据字典中

  • DML编辑器(compiler):将查询语言中的DML语句翻译为一个执行方案,包括一系列查询执行引擎能理解的低级指令

  • 查询执行引擎(query evaluation engine):执行由DML编译器产生的低级指令,并将执行结果整理并返回给用户

5.3 事务管理器(transaction manager)

数据库的一致性状态:数据库在某一时刻符合所有预定义的约束、规则和逻辑的状态,即数据是准确度、完整的、正确的

事务(transaction):在数据库中执行的一个操作序列,被视为一个单一的工作单元

  • 提交(commit):如果事务中的所有操作都执行成功,事务会被提交,所有的更改会被保存到数据库中
  • 回滚(rollback):如果事务中的任何操作执行失败,事务会被回滚,所有发生的更改都会被撤销,数据库恢复到事务开始之前的状态

事务的性质:ACID原则

  • 原子性(Atomicity):要么事务中的所有操作都成功执行,要么事务中的所有操作都不执行
  • 一致性(Consistency):事务的执行应将数据库从一个一致性状态转换到另一个一致性状态
  • 隔离性(Isolation):事务的执行是独立的,不应受到其他事务的干扰,即一个事务的操作和中间结果对其他事务是不可见的,直到事务提交为止
  • 持久性(Durability):一旦事务提交,其对数据库的更改是永久性的,即使系统发生崩溃或故障,提交后的数据更改仍然会被保留

日志(log):记录了所有事务的操作,包括事务的开始、更新和提交或回滚等

事务管理器的核心部件:

  • 恢复管理器(recovery):在系统故障时将数据库恢复到一致性状态,包括重做(Redo)或撤销(Undo)
  • 并发控制器(concurrency-control):控制并发事务间的相互影响

6. 数据库体系结构

数据库系统体系结构:可以是集中式的,也可以是分布式的

两层应用体系结构

  • 客户端层(Client):应用程序层,负责直接与数据库通信并展示结果
  • 服务器层(Server):数据库管理系统,处理客户端的请求,执行数据库操作,并返回结果

三层应用体系结构

  • 视图层:前端应用程序,提供用户与系统交互的界面,负责数据的输入和输出
  • 应用层:应用服务器,包含业务逻辑,处理数据的计算和处理,协调用户请求与数据库之间的交互
  • 数据层:数据库管理系统,负责数据的存储、管理和访问

7. 数据库成员

  • 初学者用户(naive user):使用事先已经定义好的用户界面同数据库进行交互

  • 应用程序员(application programmer):编写应用程序的计算机专业人员

  • 老练用户(sophisticated user):通过数据库查询语言或数据分析软件来与数据库进行交互

  • 数据库管理员(DataBase Administrator,DBA):对数据和访问数据的程序进行集中控制

    • 模式定义(schema definition):执行用DDL编写的一系列数据定义语句来创建最初的数据库模式
    • 存取方法定义(access-method definition):定义高效检索数据的方法
    • 物理组织的修改(physical-organization modification):根据数据库的使用情况或负载情况调整数据文件的分布、索引结构或存储介质,以优化性能或适应变化
    • 数据访问授权(granting for authorization):控制用户和应用程序对数据库的访问权限
    • 日常维护(routine maintenance)
      • 周期性地备份数据库到远程服务器上
      • 监控数据库性能指标,识别和解决性能瓶颈
      • 管理数据库日志,跟踪数据库活动
      • 处理数据库故障和修复损坏的数据