系统架构设计师 · 备考笔记

08数据库设计基础知识

本章对应官方教材第 6 章,是系统架构设计师考试的核心章节之一。知识点常以单选题(2–5 分)案例题形式出现,覆盖关系数据库基础、数据库设计流程、NoSQL、分布式数据库、缓存等。

对应教材 第 6 章 单选题 2–5 分 题型 单选 + 案例 8 大模块
01

数据库基础概念

DATABASE FUNDAMENTALS · 基础与三级模式

1.1 基础概念

数据 / 数据库 / 数据库系统

数据是描述事物的符号;数据库是按一定结构组织的数据集合;数据库系统则是包含 DB、DBMS、应用、用户和 DBA 的整体环境。

数据库管理系统 (DBMS)
  • 关系数据库
  • 面向对象数据库
  • 对象关系数据库

1.2 发展阶段

  • 人工管理阶段 — 数据不保存、无管理软件、不共享、不独立。
  • 文件系统阶段 — 数据以文件形式长期保存,但冗余大、独立性差。
  • 数据库系统阶段 — 结构化存储、共享性高、独立性强、由 DBMS 统一管理。

1.3 数据模型

数据模型三要素
数据结构 · 数据操作 · 数据的约束条件

数据的约束条件(三大完整性)

类型含义示例
实体完整性实体的主属性不能取空值学生表中"学号"不能为 NULL
参照完整性关系数据库中主要指外键参照的完整性选课表的学号必须存在于学生表中
用户定义完整性具体应用所对应的数据必须满足一定的约束条件成绩范围 0–100;性别只能取男/女

历史阶段

  • 层次和网状数据库系统
  • 关系型数据库系统
  • 第三代数据库系统:NoSQL

1.4 数据库管理系统 (DBMS)

主要功能(五大功能)

数据定义 · 数据库操作 · 数据库运行管理 · 数据组织存储和管理 · 数据库的建立与维护

特点

  • 数据结构化且统一管理
  • 有较高的数据独立性
  • 数据控制功能

数据控制功能(四项)

数据库的安全性

防止未授权用户访问数据。

数据的完整性

保证数据的正确性和一致性。

并发控制

多用户并发访问时的协调机制。

故障恢复

发生故障后将数据库恢复到正确状态。

1.5 数据库的三级模式与两级映像

高频考点
三级模式与两级映像是 必考知识点,重点记忆"两级映像 → 两种独立性"的对应关系。

从数据库系统体系结构看 · 三级

视图层 VIEW LEVEL
逻辑层 LOGICAL LEVEL
物理层 PHYSICAL LEVEL

从 DBMS 角度看 · 三级模式

外模式 子模式 / 用户模式
↕ 外模式 / 概念模式映像 → 逻辑独立性
概念模式 全体数据的逻辑结构
↕ 概念模式 / 内模式映像 → 物理独立性
内模式 物理结构与存储方式
模式别称含义
外模式子模式 / 用户模式描述用户看到或使用的那部分数据的逻辑结构,用户根据外模式用数据操作语句或应用程序去操作数据库中的数据。
概念模式模式数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。
内模式存储模式数据物理结构和存储方式的描述,定义所有的内部记录类型、索引和文件的组织方式等。

两级映像与两种独立性

外模式 / 概念模式映像

逻辑独立性:应用程序与数据库中的逻辑结构独立。当数据的逻辑结构改变时,应用程序不变。

概念模式 / 内模式映像

物理独立性:应用程序与磁盘中的数据互相独立。当数据的物理存储改变时,应用程序不变。

记忆口诀
"外/概 → 逻辑独立、概/内 → 物理独立"。映像在哪两个之间,对应的独立性就是上层独立于下层的变化。
02

关系数据库

RELATIONAL DATABASE · 概念、模式与代数运算

2.1 基本概念

术语定义
属性描述事物所取的若干特征。
每个属性的取值范围对应一个值的集合,称为该属性的域。
目 / 度指一个关系中属性的个数。
候选码若关系中的某一属性或属性组的值能唯一地标识一个元组,则称该属性为候选码。
主码 / 主键若一个关系有多个候选码,则选定其中一个作为主码。
主属性包含在任何候选码中的属性称为主属性。
外码关系模式 R 中的属性或属性组不是 R 的码,但它是其他关系的码,则对 R 而言是外码。
全码 All-key关系模型的所有属性组是这个关系模式的候选码,称为全码。
笛卡尔积两个关系所有元组的有序对组合。

2.2 关系数据库模式

  • 数据库中要区分
  • 关系数据库中的也称为关系数据库模式,是关系数据库结构的描述,包括若干域的定义以及在这些域上定义的若干关系模式。
  • 关系数据库的是这些关系模式在某一时刻对应的关系的集合,通常称之为关系数据库。

2.3 关系代数运算

案例题高频
关系代数符号、自然连接结果计算 每年都会出现,务必熟练手算。

基本集合运算

运算含义
并 ∪关系 R 与 S 的并是由属于 R 或属于 S 的元组构成的集合。
差 −关系 R 与 S 的差是由属于 R 但不属于 S 的元组构成的集合。
交 ∩关系 R 与 S 的交是由属于 R 同时又属于 S 的元组构成的集合。
广义笛卡尔积 ×两个元数分别为 n 目和 m 目的关系 R 和 S 的广义笛卡尔积是一个 (n+m) 列的元组的集合。

专门的关系运算

运算含义
选择 σ取得关系 R 中符合条件的
投影 π取得关系 R 中符合条件的
等值连接选取关系 R、S,取两者笛卡儿积中属性值相等的元组。
自然连接 ⋈一种特殊的等值连接,比较的属性列必须是相同的属性组,并把结果中重复属性去掉
除 ÷从一个关系中筛选出所有能与另一关系中全部元组都匹配的元组,最终保留前者中不与后者属性重叠的属性列。
广义投影允许在投影列表中使用算术运算,实现了对投影运算的扩充。

外连接 · 三种

左外连接

保留左关系全部元组,右关系无匹配时填 NULL。

右外连接

保留右关系全部元组,左关系无匹配时填 NULL。

完全外连接

左右关系全部元组都保留,无匹配处填 NULL。

聚集函数

对数据表中某列(或满足条件的列数据)进行汇总计算(如求和、计数、求平均等)并返回单一结果值的函数。常见:SUM · COUNT · AVG · MAX · MIN

03

数据库设计

DATABASE DESIGN · 六阶段设计流程

3.1 数据库设计的基本步骤

必背
需求分析 → 概念结构设计 → 逻辑结构设计 → 物理结构设计 → 应用程序设计 → 运行维护

3.2 数据需求分析

用户需求分析是综合各用户的应用需求,对现实世界要处理的对象进行详细调查;在了解先行系统的概况、确定新系统功能的过程中,协助用户明确对新系统的信息要求、处理要求和系统要求,确定新系统的边界。

  • 信息要求
  • 处理要求
  • 系统要求

3.3 概念结构设计 · 实体-联系模型

  • 概念模型的主要方法为实体-联系方法,简称 E-R 方法
  • 方法流程:选择局部应用 → 逐一设计分 E-R 图 → E-R 图合并

E-R 图的三个要素

要素表示方法
实体(型)矩形框表示,框内标注实体名称。
属性椭圆形表示,并用连线与实体连接起来。
实体之间的联系菱形框表示,框内标注联系名称,用连线将菱形框分别与有关实体相连,并在连线上注明联系类型。

3.4 逻辑结构设计

  • 在概念结构设计的基础上进行数据模型设计。
  • 主要工作步骤:
    • 确定数据模型
    • 将 E-R 图转换成为指定的数据模型
    • 确定完整性约束
    • 确定用户视图

3.5 物理设计

主要工作步骤包括确定数据分布、存储结构和访问方式

3.6 数据库实施

根据逻辑和物理设计的结果,在计算机上建立起实际的数据库结构、数据加载(或称装入),进行试运行和评价的过程,叫作数据库的实施(或称实现)。

3.7 数据库运行维护

数据库运行维护主要包括对数据库性能的监测和改善、故障恢复、数据库的重组和重构。在数据库运行阶段,对数据库的维护主要由 DBA 完成。

主要维护工作

  • 对数据库性能的监测和改善
  • 数据库的备份及故障恢复
  • 数据库重组和重构

3.8 商业智能 (BI) 与数据仓库

商业智能 BI
Business Intelligence,是企业对商业数据的搜集、管理和分析的系统过程,目的是使企业的各级决策者获得知识或洞察力,帮助他们作出对企业更有利的决策。一般认为 数据仓库、联机分析处理(OLAP)和数据挖掘是商业智能的三大组成部分。
数据仓库 Data Warehouse
一个面向主题的、集成的、相对稳定且随时间变化的数据集合,用于支持管理决策。
关键特征:面向主题 · 集成的 · 非易失的 · 时变的
数据挖掘 Data Mining
在没有明确假设的前提下去挖掘信息、发现知识。数据挖掘所得到的信息应具有 先知、有效、实用三个特征。先前未知的信息指预先末曾预料到的——挖掘出的信息越是出乎意料,就可能越有价值。
04

应用程序与数据库的交互

DB ACCESS INTERFACES · 四类访问接口

4.1 库函数级别访问接口

  • 数据库提供的最底层的高级程序语言访问数据接口。
  • 缺点:强依赖于特定的数据库;需开发人员对数据库机制有较深的理解;学习难度较大;开发效率不高。

4.2 嵌入式 SQL 访问接口

嵌入式 SQL (Embedded SQL) 是一种将 SQL 语句直接写入某些高级程序语言源代码中的方法。

4.3 通用数据接口标准

ODBC
开放数据库连接 (Open DataBase Connectivity):解决异构数据库间的数据共享问题。优点是不依赖于任何 DBMS,能以统一的方式处理所有的关系数据库。

常见数据库接口

缩写全称
DAOData Access Object · 数据库访问对象
RDORemote Data Object · 远程数据库对象
ADOActiveX Data Object · ActiveX 数据对象
JDBCJava DataBase Connection · Java 数据库连接

4.4 ORM 访问接口

对象关系映射 (Object Relationship Mapping):用于实现面向对象编程语言里不同类型系统数据之间的转换。

Hibernate

全自动化的框架,强大、复杂、笨重,学习成本高。

MyBatis

半自动的框架。

JPA

Java 自带的框架。

05

NoSQL 数据库

NON-RELATIONAL DATABASE · 分类、特点与体系框架

5.1 分类

列式存储数据库

应对分布式存储的海量数据,键指向多个列,列由列族安排(如 HBase、Cassandra)。

键值对存储数据库

哈希表 + 指针指向特定数据,简单易部署(如 Redis、Memcached)。

文档型数据库

键值数据库的升级版,允许嵌套键值,半结构化文档(如 JSON、BSON),代表:MongoDB。

图数据库

采用灵活的图形模型,适合社交网络、生物网络等关系密集场景(如 Neo4J)。

5.2 特点(共四点)

  • 易扩展 — 去掉了关系特性,数据间无关系,非常容易扩展。
  • 大数据量、高性能 — 得益于无关系性,数据库的结构简单。
  • 灵活的数据模型 — 无须事先为要存储的数据建立字段,随时可以存储自定义的数据格式。
  • 高可用 — 不太影响性能的情况下,可方便地实现高可用的架构。

5.3 NoSQL 体系框架

整体分为 4 层,由下至上:

接口层 Interface — Rest / Thrift / Map-Reduce / Get-Put / API
数据逻辑模型层 Data Logical Model
数据分布层 Data Distribution Model — CAP / 多数据中心 / 动态部署
数据持久层 Data Persistence — 内存 / 硬盘 / 内存硬盘 / 定制可插拔
06

分布式数据库

DISTRIBUTED DATABASE · 体系结构、特点与透明性
教材定位
本节内容在教材 2.3.3 节内。

6.1 体系结构

全局视图 全局应用的用户视图,是全局概念模式的子集
全局概念模式 定义分布式数据库中数据的整体逻辑结构
分片模式 将一个关系模式分解为几个数据片
分配模式 定义数据片存放节点 — 体现分布式本质特性
局部概念模式 局部数据库的概念模式
局部内模式 局部数据库的内模式

6.2 特点(四性)

共享性

数据存储在不同节点,但被各应用共享。

自治性

每个节点独立管理本地数据。

可用性

部分节点故障不影响整体使用。

分布性

数据分布在不同的物理位置。

6.3 分布透明性

易考点
三种透明性的层次关系是常考点:分片透明性 > 位置透明性 > 局部数据模型透明性。
透明性用户/应用程序需要了解
分片透明性只对全局关系进行操作,不必考虑数据的分片
位置透明性应当了解分片情况,但不必了解片段的存储场地。
局部数据模型透明性应当了解分片及各片断存储的场地,但不必了解局部场地上使用的是何种数据模型。
07

数据库优化技术

DATABASE OPTIMIZATION · 集中式与分布式优化

7.1 集中式数据库优化技术

增加冗余列

在多个表中保留相同列,减少表连接。

增加派生列

由其他列计算得出,避免重复计算。

重新组表

将常一起查询的列合并到同一张表。

水平分割表

分割,将不同元组放入不同表。

垂直分割表

分割,将不同属性放入不同表。

7.2 分布式数据库优化技术

主从复制

主库写、从库读,提升读性能并备份。

读写分离

写请求走主库、读请求走从库。

分表

将大表拆分为多张小表,水平/垂直均可。

分库

按业务或数据分布拆分到不同数据库。

08

分布式缓存技术 · Redis

REDIS · 数据类型、持久化、异常与集群

8.1 数据类型

类型说明
stringRedis 基本类型。可用于缓存层或计数器。
hash代替 string 类型,节省空间
set无序集合,每个值不能重复。
list双向链表结构,可以模拟栈、队列等形式。
zset有序集合,每个元素有一个分数。

8.2 访问方式

读数据
  1. 根据 key 读缓存
  2. 读取成功则直接返回
  3. 若 key 不在缓存中,根据 key 读数据库
  4. 读取成功后,写缓存
  5. 成功返回
写数据
  1. 根据 key 值写数据库
  2. 成功后更新缓存 key 值
  3. 成功返回

8.3 过期策略

定期删除

Redis 定期主动扫描并删除过期 key。

惰性删除

访问 key 时检查是否过期,若过期则删除并返回空。

8.4 数据持久化

RDB · 内存快照

定时将内存数据完整快照写入磁盘文件,恢复快、占用小。

AOF · 日志

记录每个写操作命令,重启时回放恢复,数据更安全。

8.5 缓存异常问题

三大经典异常
穿透 / 雪崩 / 击穿——区别在于"是否存在 key、过期范围",务必区分清楚。
问题触发条件
缓存穿透大量请求访问了没有缓存的 key(key 在数据库中也不存在)。
缓存雪崩大量请求访问到缓存中的 key,这些 key 是存在的,但同时到了过期时间
缓存击穿少量热点 key 缓存时间失效,使得请求直接访问数据库。

8.6 Redis 集群

Redis 也可以采用集群的方式部署。主要集群方式:

  • 主从复制集群
  • 哨兵集群
  • Cluster 集群

集群切片方式主要分为三种:

  • 客户端分片
  • 代理分片
  • 服务器端分片