跳转至

数据库系统

概述

数据库系统是具有数据管理功能的计算机系统,是实现有组织地、动态地存储大量关联数据,方便多用户访问的计算机软、硬件资源组成的系统。

数据库系统定义

数据库系统 = 数据库 + 数据库管理系统(DBMS) + 应用程序 + 数据库管理员(DBA)

数据库系统的组成

graph TB
    A[数据库系统] --> B[数据库<br/>Database]
    A --> C[数据库管理系统<br/>DBMS]
    A --> D[应用程序]
    A --> E[数据库管理员<br/>DBA]
    
    C --> C1[数据定义语言DDL]
    C --> C2[数据操纵语言DML]
    C --> C3[数据控制语言DCL]

1. 数据库

数据库(Database)

长期存储在计算机内的、有组织的、可共享的数据集合。

特点:

  • 持久存储
  • 有组织
  • 可共享
  • 冗余度小
  • 独立性高

2. 数据库管理系统

数据库管理系统(DBMS)

对数据库进行定义、操纵、管理和维护的软件系统。

功能:

  • 数据定义
  • 数据操纵
  • 数据控制
  • 数据维护

3. 应用程序

应用程序

利用数据库管理系统访问和操作数据库的程序。

4. 数据库管理员

数据库管理员(DBA)

负责数据库系统的设计、维护和管理的人员。

数据模型

数据模型

数据模型是数据库系统中用于提供信息表示和操作手段的形式构架。

1. 层次模型

层次模型

用树形结构表示实体之间联系的模型。

特点:

  • 有且仅有一个根节点
  • 除根节点外,其他节点有且仅有一个父节点

2. 网状模型

网状模型

用图结构表示实体之间联系的模型。

特点:

  • 允许一个节点有多个父节点
  • 允许多个节点没有父节点

3. 关系模型

关系模型

用二维表结构表示实体之间联系的模型。

特点:

  • 数据结构简单
  • 理论基础扎实
  • 使用广泛

关系数据库

关系数据库

基于关系模型的数据库。

基本概念

1. 关系(表)

关系

一个二维表,表示实体集。

2. 元组(行)

元组

表中的一行,表示一个实体。

3. 属性(列)

属性

表中的一列,表示实体的一个特征。

关系运算

  • 选择(Selection): 从关系中选取满足条件的元组
  • 投影(Projection): 从关系中选取若干属性列
  • 连接(Join): 将两个关系按条件连接

SQL语言

SQL语言

结构化查询语言,用于操作关系数据库。

SQL语言分类

类型 功能 主要语句
数据定义语言(DDL) 定义数据结构 CREATE, ALTER, DROP
数据操纵语言(DML) 操作数据 SELECT, INSERT, UPDATE, DELETE
数据控制语言(DCL) 控制数据访问 GRANT, REVOKE

数据库设计

数据库设计

设计数据库结构和应用的过程。

设计步骤

  1. 需求分析: 了解用户需求
  2. 概念设计: 设计E-R模型
  3. 逻辑设计: 转换为关系模式
  4. 物理设计: 确定存储结构
  5. 实施: 创建数据库
  6. 运行维护: 维护和优化

常见数据库系统

数据库 类型 特点
MySQL 关系型 开源、轻量级
Oracle 关系型 企业级、高性能
SQL Server 关系型 微软产品、易用
MongoDB NoSQL 文档型、灵活

数据库事务

事务

数据库中一组操作的逻辑单元,要么全部成功,要么全部失败。

ACID特性

ACID特性

事务的四个基本特性。

四个特性:

  • 原子性(Atomicity): 事务是不可分割的工作单位
  • 一致性(Consistency): 事务执行后数据库状态一致
  • 隔离性(Isolation): 多个事务并发执行互不干扰
  • 持久性(Durability): 事务一旦提交,永久生效

事务隔离级别

隔离级别 脏读 不可重复读 幻读
读未提交 可能 可能 可能
读已提交 不可能 可能 可能
可重复读 不可能 不可能 可能
串行化 不可能 不可能 不可能

数据库规范化

规范化

消除数据冗余,减少更新异常的过程。

范式

范式(Normal Form)

关系模式满足的不同程度的规范化要求。

各级范式:

  • 第一范式(1NF): 属性不可再分
  • 第二范式(2NF): 消除非主属性对码的部分函数依赖
  • 第三范式(3NF): 消除非主属性对码的传递函数依赖
  • BCNF: 消除主属性对码的部分和传递函数依赖
  • 第四范式(4NF): 消除非平凡且非函数依赖的多值依赖

规范化过程

graph LR
    A[未规范化] --> B[1NF]
    B --> C[2NF]
    C --> D[3NF]
    D --> E[BCNF]
    E --> F[4NF]

    style A fill:#E3F2FD
    style B fill:#E8F5E9
    style C fill:#FFF3E0
    style D fill:#F3E5F5
    style E fill:#FCE4EC
    style F fill:#E0F2F1

数据库索引

索引

提高数据检索速度的数据结构。

索引类型

常见索引类型

类型:

  • B+树索引: 最常用的索引结构

    • 支持范围查询
    • 自动排序
    • 适合磁盘存储
  • 哈希索引: 基于哈希表

    • 等值查询快
    • 不支持范围查询
    • 不支持排序
  • 全文索引: 用于文本搜索

    • 支持模糊匹配
    • 支持自然语言搜索
  • 空间索引: 用于地理数据

    • R树索引
    • 支持空间查询

索引设计原则

应该创建索引的情况:

  • 频繁作为WHERE条件的字段
  • 频繁用于JOIN的字段
  • 频繁用于ORDER BY的字段
  • 频繁用于GROUP BY的字段

不应该创建索引的情况:

  • 频繁更新的字段
  • 区分度低的字段(如性别)
  • 数据量小的表

数据库并发控制

并发控制

保证多个事务并发执行时数据库的一致性。

封锁协议

封锁协议

通过加锁实现并发控制。

锁类型:

  • 共享锁(S锁): 用于读操作,多个事务可同时加S锁
  • 排他锁(X锁): 用于写操作,独占锁

三级封锁协议:

  • 一级封锁协议: 修改数据前加X锁,防止丢失更新
  • 二级封锁协议: 一级+读取数据前加S锁,防止读脏数据
  • 三级封锁协议: 二级+S锁直到事务结束,防止不可重复读

MVCC

多版本并发控制(MVCC)

通过保存数据的多版本来实现并发控制。

优点:

  • 读操作不阻塞写操作
  • 写操作不阻塞读操作
  • 提高并发性能

实现:

  • 保存数据的多个版本
  • 通过版本号或时间戳判断可见性
  • 定期清理旧版本

数据库恢复

数据库恢复

在故障发生后将数据库恢复到一致状态。

恢复技术

日志文件:

  • 重做日志(Redo Log): 重做已提交事务的修改
  • 撤销日志(Undo Log): 撤销未提交事务的修改

检查点(Checkpoint):

  • 定期将内存数据写入磁盘
  • 记录检查点位置
  • 恢复时从检查点开始

恢复策略

graph TB
    A[系统故障] --> B[从检查点开始]
    B --> C[正向扫描日志]
    C --> D[重做已提交事务]
    D --> E[反向扫描日志]
    E --> F[撤销未提交事务]

NoSQL数据库

NoSQL数据库

非关系型数据库,适合大数据和Web应用。

类型

1. 键值存储:

  • Redis、Memcached
  • 简单快速
  • 适合缓存

2. 文档存储:

  • MongoDB、CouchDB
  • 存储JSON/BSON文档
  • 灵活的数据模型

3. 列族存储:

  • HBase、Cassandra
  • 适合海量数据
  • 高写入性能

4. 图数据库:

  • Neo4j、JanusGraph
  • 存储图结构数据
  • 适合社交网络、推荐系统

CAP理论

CAP理论

分布式系统最多只能同时满足三项中的两项。

三个特性:

  • 一致性(Consistency): 所有节点数据一致
  • 可用性(Availability): 每个请求都有响应
  • 分区容错性(Partition tolerance): 网络分区时系统仍能运行

权衡:

  • CA: 传统关系数据库(单机)
  • CP: MongoDB、HBase
  • AP: Cassandra、DynamoDB

参考资料