← 返回首页
高频数据库

数据库设计与优化

案例分析高频考点。必背:三大范式、反规范化、读写分离、分库分表、CAP/BASE、NoSQL

高频 · 几乎每年 分值 15~25

一、关系数据库设计 6 步

  1. 需求分析 → 数据流图 DFD、数据字典 DD
  2. 概念结构设计 → E-R 图
  3. 逻辑结构设计 → E-R 图转关系模式 + 规范化
  4. 物理结构设计 → 选择存储结构 + 索引
  5. 数据库实施
  6. 数据库运行与维护
口诀:"需 · 概 · 逻 · 物 · 实 · 维"

二、范式与反规范化 ⭐⭐⭐

三大范式(必背定义)

1NF原子性:每列不可再分 2NF在 1NF 基础上,非主属性完全依赖主键(消除部分依赖) 3NF在 2NF 基础上,非主属性不传递依赖于主键(消除传递依赖) BCNF在 3NF 基础上,每个决定因素都是候选键 4NF消除非平凡的多值依赖
记忆:1 原子 · 2 全依 · 3 不传 · BC 决定皆候选

反规范化(必考)

定义
为提高查询性能,故意违背规范化要求,引入冗余/聚合/合并表等手段。本质是 用空间换时间。
优点
  • 减少连接、提高查询性能
  • 减少应用层逻辑复杂度
  • 易于报表/分析
缺点
  • 数据冗余、占用空间
  • 更新代价高(多处修改)
  • 易产生不一致 → 需触发器/异步同步

常见反规范化技术

三、读写分离 + 主从复制 ⭐⭐

      应用
   ┌────┴────┐
[写主库]   [读从库1][读从库2]
   │  ←─── 主从复制 ───→
   └────────┘  
收益分担读压力 + 故障切换 问题主从延迟 → 写后读不一致 对策关键写后读走主库 / 半同步复制 / 引入消息队列异步通知

四、分库分表 ⭐⭐⭐

类型

分片策略

带来的问题(必背)

五、CAP / BASE / ACID ⭐⭐⭐

ACID(传统关系数据库事务)

A原子性 Atomicity:全部成功或全部回滚 C一致性 Consistency:事务前后数据一致 I隔离性 Isolation:多事务并发互不干扰 D持久性 Durability:提交后永久保存

CAP 定理

CAP:分布式系统三选二

Consistency 一致性 / Availability 可用性 / Partition tolerance 分区容忍

分布式必有网络分区,所以必须保 P,只能在 CP 或 AP 中二选一。

CP 例:ZooKeeper、HBase、Redis Cluster(默认 CP)

AP 例:Eureka、Cassandra、DynamoDB

BASE

BABasically Available 基本可用(允许损失部分可用性) SSoft state 软状态(允许中间状态) EEventually consistent 最终一致

BASE 是 AP 系统的指导思想,牺牲强一致换可用性。

六、NoSQL 4 大分类 ⭐⭐

类型代表适用
键值 Key-ValueRedis、Memcached、DynamoDB缓存、会话、计数
列族 Column FamilyHBase、Cassandra大数据、宽表、时序
文档 DocumentMongoDB、CouchDB半结构化、内容管理
图 GraphNeo4j、JanusGraph关系网络、推荐、社交
口诀:"K · 列 · 文 · 图" 4 类

七、数据仓库 / 数据集市

数据仓库特点(必背 4 性):

口诀:"主 · 集 · 非 · 时"

建模方式

八、答题模板

题型:数据库性能优化方案?
  1. SQL/索引层:建合适索引、避免全表、避免 SELECT *
  2. 表结构层:反规范化、垂直/水平拆分、合理字段类型
  3. 架构层:读写分离、分库分表、主从复制
  4. 缓存层:Redis 多级缓存
  5. 异步层:消息队列削峰
  6. NoSQL 辅助:ES 做搜索、HBase 存历史
题型:为什么要反规范化?

"完全规范化会导致表过多 → 查询连接代价高 → 性能下降。反规范化通过 引入冗余 减少连接,以 空间换时间,但会带来 更新代价 和 一致性问题,需要通过触发器、应用层同步或异步消息保证一致。"

✅ 自测

1. 3NF 的定义?BCNF 比 3NF 严格在哪?

2. 反规范化的 5 种具体技术?

3. CAP 三个字母分别是什么,为何只能选两个?

4. NoSQL 4 大分类及代表产品?

📗 高频专题 · 数据库 完