08-数据库设计(基于第8小时)
软考-系统架构设计师 | 第2篇 架构设计专业知识 出题形式:单项选择题 + 案例分析题 | 分值占比:4-8 分 教材参考:第8章
0. 考点分析
本小时主要学习数据库基础概念、关系数据库、数据库设计、应用程序与数据库交互、NoSQL数据库等内容。考察侧重概念知识。知识点会涉及单选题(约占2-5分)和案例题(25分)。
作为一名合格的系统架构师,必须掌握数据库设计的基本概念和方法。系统架构设计师考试中的一些案例分析题会来自本小时的内容。
1. 核心知识点
1.1 数据库基础概念
4大基础术语
| 术语 | 定义 |
|---|---|
| 数据(Data) | 描述事物的符号记录(文字、图形、图像、声音、语言) |
| 数据库系统(DBS) | 采用数据库技术,有组织、动态存储大量相关联数据的计算机系统 |
| 数据库(DB) | 统一管理的、长期储存在计算机内的、有组织的相关数据的集合 |
| 数据库管理系统(DBMS) | 数据库系统的核心软件,是相互关联的数据集合+访问这些数据的软件 |
DBMS分类3类
- RDBS(关系数据库系统)
- OODBS(面向对象的数据库系统)
- ORDBS(对象关系数据库系统)
3大发展阶段
| 阶段 | 特点 | 缺点 |
|---|---|---|
| 人工管理 | 数据量少、不保存、无软件系统处理 | 应用程序与数据依赖性强、数据冗余 |
| 文件系统 | 数据可长期保留、不属于特定应用、文件组织多样化 | 数据冗余、不一致性、数据孤立 |
| 数据库系统 | 复杂数据模型、高数据独立性 | — |
数据模型3要素
- 数据结构
- 数据操作
- 数据的约束条件
数据约束3类
- 实体完整性:实体的主属性不能取空值
- 参照完整性:外键参照的完整性(要么为空,要么出现在被参照关系中)
- 用户定义完整性:具体应用所对应的数据约束(如软考成绩0-75)
DBMS主要功能
- 数据定义
- 数据库操作
- 数据库运行管理
- 数据组织、存储和管理
- 数据库的建立和维护
1.2 三级模式两级映像
三级模式
| 模式 | 别名 | 描述 |
|---|---|---|
| 概念模式 | — | 全体数据的逻辑结构和特征,所有用户的公共数据视图 |
| 外模式 | 子模式/用户模式 | 用户看到或使用的那部分数据的逻辑结构 |
| 内模式 | — | 数据物理结构和存储方式的描述 |
两级映像
| 映像 | 独立性 |
|---|---|
| 概念模式/内模式映像 | 物理独立性:数据物理存储改变,应用程序不变 |
| 外模式/概念模式映像 | 逻辑独立性:数据逻辑结构改变,应用程序不变 |
1.3 关系数据库基本概念
| 术语 | 定义 |
|---|---|
| 属性(Attribute) | 描述事物的特征 |
| 域(Domain) | 每个属性的取值范围 |
| 目/度(Degree) | 关系中属性的个数 |
| 候选码(Candidate Key) | 能唯一标识一个元组的属性或属性组 |
| 主码(Primary Key) | 从多个候选码中选定一个 |
| 主属性 | 包含在任何候选码中的属性 |
| 外码(Foreign Key) | 不是本关系码但是其他关系码的属性 |
| 全码(All-key) | 所有属性组都是候选码 |
1.4 关系代数运算
4类运算符
- 集合运算符
- 专门的关系运算符
- 算术比较符
- 逻辑运算符
考试重点:集合运算符 + 专门的关系运算符
集合运算符
| 运算符 | 含义 | 解释 |
|---|---|---|
| ∪ | 并 | 属于R或属于S的元组 |
| - | 差 | 属于R但不属于S的元组 |
| ∩ | 交 | 属于R同时又属于S的元组 |
| × | 笛卡尔积 | n+m列,K1×K2个元组 |
专门的关系运算符
| 运算符 | 含义 | 解释 |
|---|---|---|
| σ | 选择 | 取得关系R中符合条件的行 |
| π | 投影 | 取得关系R中符合条件的列 |
| ⋈ | 连接 | 等值连接/自然连接(特殊等值连接,去重) |
| ÷ | 除 | 给定R(X,Y)和S(Y,Z),结果P(X) |
外连接(扩展运算)
| 运算符 | 含义 |
|---|---|
| 左外连接 ⟕ | 保留左侧关系所有不匹配元组,用null填充右侧属性 |
| 右外连接 ⟖ | 保留右侧关系所有不匹配元组,用null填充左侧属性 |
| 完全外连接 ⟗ | 完成左外连接和右外连接的操作 |
1.5 函数依赖
| 类型 | 定义 |
|---|---|
| 函数依赖 | X→Y:对任意元组u,v,u[X]=v[X] ⇒ u[Y]=v[Y] |
| 平凡函数依赖 | X→Y,但Y⊆X |
| 非平凡函数依赖 | X→Y,Y⊄X |
| 完全函数依赖 | X→Y,X的任何真子集都不能函数决定Y |
| 部分函数依赖 | X→Y,但X的某个真子集也能函数决定Y |
| 传递依赖 | X→Y,Y→Z,且Y不函数决定X,则Z传递依赖于X |
Armstrong公理系统3条推理规则
- A1 自反律:若Y⊆X⊆U,则X→Y
- A2 增广律:若X→Y,且Z⊆U,则XZ→YZ
- A3 传递律:若X→Y,Y→Z,则X→Z
3条导出规则
- 合并规则:X→Y,X→Z ⇒ X→YZ
- 伪传递规则:X→Y,WY→Z ⇒ XW→Z
- 分解规则:X→Y,Z⊆Y ⇒ X→Z
1.6 关系数据库规范化(范式)
4大范式(1NF→BCNF)
| 范式 | 条件 |
|---|---|
| 1NF | 每个分量是不可再分的数据项 |
| 2NF | 1NF + 每一个非主属性完全依赖主码 |
| 3NF | 2NF + 消除非主属性对主码的传递函数依赖 |
| BCNF | 1NF + 每个属性都不传递依赖于R的候选码 |
关系:BCNF ⊂ 3NF ⊂ 2NF ⊂ 1NF
候选码判断方法
- 看哪个属性只在依赖集F的"→“左边出现过,该关系的候选码必定包含那个属性
- 例:F={A1→A2, A1→A3, A3→A4, A1A5→A6},只在左边出现的是A1和A5,所以候选码为A1A5
1.7 事务管理(ACID)
| 特性 | 含义 |
|---|---|
| 原子性(Atomicity) | 事务在数据库中要么全做,要么全都不做 |
| 一致性(Consistency) | 事务执行使数据库从一个一致性状态变到另一个一致性状态 |
| 隔离性(Isolation) | 一个事务的执行不能被其他事务干扰 |
| 持久性(Durability) | 事务一旦提交,对数据库的改变必须是永久的 |
SQL事务语句
- BEGIN TRANSACTION:事务开始
- COMMIT:事务提交(写入磁盘)
- ROLL BACK:事务回滚
1.8 并发控制
两种封锁类型
| 封锁 | 说明 |
|---|---|
| X封锁(排他型) | 事务T对数据A实现X封锁,只允许T读和修改,其他事务必须等T解除X封锁 |
| S封锁(共享型) | 事务T对数据A实现S封锁,允许T读但不能修改,所有S封锁解除前不允许任何X封锁 |
1.9 数据库备份与恢复
4种备份分类
| 维度 | 分类 | 特点 |
|---|---|---|
| 是否允许并发 | 静态备份 | 简单,但降低数据库可用性 |
| 动态备份 | 备份和用户事务可并发,但后援副本可能不保证正确 | |
| 备份范围 | 海量备份 | 每次备份全部数据库 |
| 增量备份 | 只备份上次更新过的数据(适合大数据量频繁事务) |
4类故障
- 事务故障 → UNDO + REDO
- 系统故障
- 介质故障 → 装入副本+日志执行撤销/重做
- 计算机病毒
1.10 数据库设计步骤
6步骤
- 用户需求分析
- 概念结构设计
- 逻辑结构设计
- 物理结构设计
- 应用程序设计
- 运行维护
E-R图3要素
- 实体(型):矩形框
- 属性:椭圆形
- 实体之间联系:菱形框
E-R图合并时需解决3类冲突
- 属性冲突
- 命名冲突
- 结构冲突
1.11 商业智能(BI)
BI = 数据仓库 + OLAP + 数据挖掘
数据仓库4大关键特征
- 面向主题
- 集成的
- 非易失的
- 时变的
传统数据库 vs 数据仓库
| 比较 | 传统数据库 | 数据仓库 |
|---|---|---|
| 数据内容 | 当前值 | 历史的、归档的、归纳的、计算的数据 |
| 数据目标 | 面向业务操作 | 面向主体域,分析应用 |
| 数据特性 | 动态变化、可更新 | 静态、不能直接更新 |
| 使用频率 | 高 | 低 |
OLTP vs OLAP
| 项目 | OLTP | OLAP |
|---|---|---|
| 用户 | 操作人员、低层管理人员 | 决策人员、高级管理人员 |
| 功能 | 日常操作处理 | 分析决策 |
| DB设计 | 面向应用 | 面向主题 |
| 数据 | 当前、细节、二维 | 历史、聚集、多维 |
| 存取 | 读/写数十条 | 读上百万条 |
| 工作单位 | 简单事务 | 复杂查询 |
| DB大小 | 100MB-GB级 | 100GB-TB级 |
1.12 应用程序与数据库交互
4种方式
| 方式 | 说明 |
|---|---|
| 库函数级别(如OCI) | 最底层API,强依赖特定DB,学习难度大 |
| 嵌入式SQL(Embeded SQL) | SQL直接写入高级程序语言源代码 |
| 通用数据接口标准(ODBC) | 解决异构数据库共享,统一处理关系数据库 |
| ORM | 对象关系映射,实现面向对象语言与不同类型系统数据的转换 |
ODBC相关接口:DAO、RDO、ADO、JDBC
ORM框架对比
- Hibernate:全自动ORM,强大复杂笨重,学习成本高
- MyBatis:半自动框架
- JPA:Java自带框架
1.13 NoSQL数据库
4种类型
| 类型 | 特点 | 代表产品 |
|---|---|---|
| 列式存储数据库 | 应对分布式海量数据,键指向多列 | Cassandra、HBase、Riak |
| 键值对存储数据库 | 简单、易部署,但部分值查询更新效率低 | Redis、Voldemort、Oracle BDB |
| 文档型数据库 | 处理网页等复杂数据时比键值对查询效率高 | CouchDB、MongoDB、SequoiaDB |
| 图数据库 | 适合社交网络、生物信息网络等图建模数据 | Neo4J、InfoGrid、Infinite Graph |
NoSQL 5大特征:易扩展、大数据量、高性能、灵活的数据模型、高可用
NoSQL 4层框架(从下至上)
- 数据持久层(Data Persistence)
- 数据分布层(Data Distribution Model)
- 数据逻辑模型层(Data Logical Model)
- 接口层(Interface)
NoSQL适用场景
- 数据模型比较简单
- 需灵活性更强的IT系统
- 对数据库性能要求较高
- 不需要高度的数据一致性
1.14 分布式数据库
6层体系结构(自顶向下)
- 全局视图(全局外模式):用户视图,全局概念模式的子集
- 全局概念模式:数据的整体逻辑结构
- 分片模式:关系模式分解为数据片
- 分配模式:定义数据片段的存放节点(分布式本质)
- 局部概念模式:局部数据库的概念模式
- 局部内模式:局部数据库的内模式
分布式数据库4大特点
- 共享性:不同节点数据共享
- 自治性:每个节点独立管理本地数据
- 可用性:某场地故障可使用其他副本
- 分布性:数据分布在不同场地
分布透明性3层次(由高到低)
- 分片透明性:只对全局关系操作,不必考虑分片(最高)
- 位置透明性:了解分片但不必了解存储场地
- 局部数据模型透明性(逻辑透明):了解分片和存储场地但不必了解局部数据模型
1.15 数据库优化技术
集中式数据库反规范化设计5种
- 增加冗余列(避免连接操作)
- 增加派生列(减少计算量)
- 重新组表(减少连接)
- 水平分割表(按记录分割)
- 垂直分割表(按列分割,主键+部分列/主键+其他列)
反规范化优缺点
- 优点:避免连接操作,提高性能
- 缺点:数据重复存储,浪费磁盘空间,产生数据不一致
- 解决:触发器、事务机制、应用保证、批处理脚本
分布式数据库优化4技术
- 主从复制(3种同步模式:全同步、半同步、异步)
- 读写分离
- 分表(垂直切分/水平切分)
- 分库(按业务模块分开)
binlog 3种模式
- 基于SQL语句的复制(SBR):binlog日志量少,可能造成主从不一致(如time函数)
- 基于行的复制(RBR):不记录SQL,记录更新前后数据,可保证主从一致
- 混合复制(MBR):以上两种的混合,自动选择
1.16 分布式缓存Redis
Redis定位
- 分布式缓存技术
- 也是键值对数据库类型(NoSQL)
- 基于内存的读写,比磁盘数据库性能高
- key-value形式保存
5种核心数据类型
| 数据类型 | 存储值 | 适用场景 | 案例 |
|---|---|---|---|
| string | 字符串/整数/浮点 | 缓存层、计数器 | 视频播放量、文章浏览量 |
| hash | 键值对无序散列表 | 描述用户信息,节省空间 | 用户信息存储 |
| set | 无序集合,值不重复 | 去重、抽奖、初始化用户池 | 共同好友、标签管理 |
| list | 双向链表,模拟栈/队列 | 顺序访问 | 回复评论、点赞、粉丝列表 |
| zset | 有序集合,每个元素有分数 | 排行榜 | 当天最热前10名、热搜榜 |
业务功能 → 数据类型对应关系
- string → 计数器(用户帖子的评论计数器)
- list → 粉丝列表、好友信息发布/订阅
- set → 标签管理、共同好友
- hash → 用户信息结构化存储
- zset → 排名(最热前10名、热搜榜)
读写数据步骤
- 读:①根据key读缓存 → ②成功直接返回 → ③若key不在缓存则读数据库 → ④成功后写缓存 → ⑤成功返回
- 写:①根据key值写数据库 → ②成功后更新缓存key值 → ③成功返回
2种过期策略
- 定期删除:随机抽取设置了过期时间的key
- 惰性删除:查询时检测key是否过期,过期则删除
6种淘汰机制
- volatile-lru / volatile-lfu / volatile-random / volatile-ttl
- allkeys-lru / allkeys-lfu / allkeys-random
2种持久化方式对比
| 项目 | RDB内存快照 | AOF日志 |
|---|---|---|
| 原理 | 数据集快照写入磁盘 | 持续保存Redis更新命令 |
| 磁盘刷新频率 | 低 | 高 |
| 文件大小 | 小 | 大 |
| 数据恢复效率 | 高 | 低 |
| 数据安全 | 低 | 高 |
3大缓存异常问题
| 异常 | 原因 | 解决方案 |
|---|---|---|
| 缓存穿透 | 请求访问了不存在的key,绕过缓存访问DB | ①限制IP访问次数 ②布隆过滤器 ③预热Redis ④DB中也没有的key在Redis中设为null |
| 缓存雪崩 | 大量key同时过期,请求直接访问DB | ①主从复制+cluster集群 ②过期时间加随机值 ③服务降级/熔断/限流 |
| 缓存击穿 | 少量热点key过期失效,请求直接访问DB | ①设置较长过期时间/永久有效 ②分布式锁控制DB访问流量 |
Redis集群3方式
- 主从复制集群
- 哨兵集群
- Cluster集群
集群切片3方式
- 客户端分片
- 代理分片
- 服务器端分片
2. 关键概念速查
| 概念 | 定义/说明 | 常见考点 |
|---|---|---|
| 3级模式 | 外模式/概念模式/内模式 | 对应视图层/逻辑层/物理层 |
| 2级映像 | 概念↔内模式=物理独立;外模式↔概念=逻辑独立 | 独立性识别 |
| 关系代数 | 并/差/交/笛卡尔积/选择/投影/连接/除 | 集合运算vs专门关系运算 |
| 1NF | 分量不可再分 | 最基础范式 |
| 2NF | 1NF+非主属性完全依赖主码 | 消除部分函数依赖 |
| 3NF | 2NF+消除非主属性对主码的传递依赖 | 消除传递依赖 |
| BCNF | 1NF+每个属性不传递依赖候选码 | 最高范式(教材重点) |
| ACID | 原子性/一致性/隔离性/持久性 | 事务4特性 |
| X封锁 | 排他型,只允许一个事务独锁 | 写锁 |
| S封锁 | 共享型,可读不可修改 | 读锁 |
| E-R图 | 矩形=实体,椭圆=属性,菱形=联系 | 概念结构设计 |
| 数据仓库 | 面向主题/集成/非易失/时变 | 4大特征 |
| OLTP | 联机事务处理,操作型 | 日常操作 |
| OLAP | 联机分析处理,分析型 | 决策支持 |
| 列式存储 | 应对分布式海量数据 | Cassandra/HBase |
| 文档型 | 处理复杂数据查询效率高 | MongoDB |
| 图数据库 | 适合图建模数据 | Neo4J |
| 分片透明性 | 不必考虑分片 | 最高级分布透明 |
| 位置透明性 | 了解分片,不必了解场地 | 中级 |
| Redis string | 字符串/数字 | 计数器、缓存 |
| Redis list | 双向链表 | 粉丝列表、评论 |
| Redis set | 无序集合不重复 | 共同好友、标签 |
| Redis hash | 键值对散列表 | 用户信息 |
| Redis zset | 有序集合带分数 | 排行榜 |
| 缓存穿透 | 不存在key访问DB | 布隆过滤器 |
| 缓存雪崩 | 大量key同时过期 | 过期时间加随机值 |
| 缓存击穿 | 热点key过期 | 分布式锁 |
| RDB | 内存快照 | 恢复快但安全低 |
| AOF | 更新命令日志 | 恢复慢但安全高 |
3. 典型例题
题目1:数据库系统 vs 文件系统
题目:数据库系统与文件系统的区别不包括( )。 A.对应用程序的高度独立性 B.数据的充分共享性 C.文件组织形式的多样化 D.操作方便性
答案:C
解析:数据库的特点包括对应用程序的高度独立性、数据的充分共享性、操作方便性。文件组织形式的多样化是文件系统的特点,不是数据库系统的特点(数据库的数据按同一种数据结构存储)。
题目2:DBMS功能
题目:( )描述的是DBMS向用户提供数据操纵语言,实现对数据库中数据的基本操作,如检索、插入、修改和删除。 A.数据定义 B.数据库操作 C.数据库运行管理 D.数据组织、存储与管理
答案:B
解析:DBMS功能主要包括数据定义、数据库操作、数据库运行管理、数据组织存储与管理、数据库的建立和维护。数据库操作是DBMS向用户提供数据操纵语言(DML),实现对数据库数据的基本操作(检索、插入、修改、删除)。
题目3:范式判断
题目:给定关系模式R(U,F),其中:属性集U={A1,A2,A3,A4,A5,A6};函数依赖集F={A1→A2, A1→A3, A3→A4, A1A5→A6}。关系模式R的候选码为(1),由于R存在非主属性对码的部分函数依赖,所以R属于(2)。 (1)A.A1A3 B.A1A4 C.A1A5 D.A1A6 (2)A.1NF B.2NF C.3NF D.BCNF
答案:C A
解析:判断候选码:A1和A5都只在依赖集F的”→“左边出现过,所以候选码是A1A5。“R存在非主属性对码的部分函数依赖"说明不满足2NF要求(2NF要求非主属性完全依赖主码),因此R只能是1NF。
题目4:Redis数据类型应用
题目:某互联网文化发展公司因业务发展,需要建立网上社区平台,为用户提供对网络文化产品进行评论交流的平台。功能包括:(a)用户帖子的评论计数器;(b)支持粉丝列表功能;(c)支持标签管理;(d)支持共同好友功能等;(e)提供排名功能,如当天最热前10名帖子排名;(f)用户信息的结构化存储;(g)提供好友信息的发布/订阅功能。请选择Redis数据类型填空。
- string → (1)
- list → (2)
- set → (3)
- hash → (4)
- zset → (5)
答案:
- (1)(a) 计数器场景
- (2)(b)(g) 粉丝列表+发布/订阅
- (3)(c)(d) 标签+共同好友(去重)
- (4)(f) 用户信息结构化
- (5)(e) 排行榜
解析:string适合计数器,list双向链表模拟粉丝列表/订阅,set无序去重适合共同好友/标签,hash结构化适合用户信息,zset有序集合适合排行榜。
4. 高频考点
- ACID 4特性:原子性+一致性+隔离性+持久性(5年8考)
- 范式判断:1NF→2NF→3NF→BCNF的递进条件(部分依赖→传递依赖)
- 候选码判断方法:只在F的”→“左边出现过的属性必在候选码中
- 关系代数运算:选择(行)vs 投影(列)的区别,外连接3种
- 三级模式两级映像:物理独立性=概念↔内模式;逻辑独立性=外模式↔概念
- 数据完整性3类:实体完整性(主属性非空)+ 参照完整性(外键)+ 用户定义完整性
- OLTP vs OLAP:操作型vs分析型,10个对比维度
- NoSQL 4类型:列式/键值/文档/图,适用场景不同
- Redis 5种数据类型应用场景:string(计数)/hash(用户)/set(去重)/list(队列)/zset(排行榜)
- 缓存三大异常:穿透(不存在key)/雪崩(大量key同时过期)/击穿(热点key过期)
- RDB vs AOF持久化:快照vs日志,恢复效率vs数据安全
- 反规范化5种方法:冗余列/派生列/重组表/水平分割/垂直分割
- 分布式数据库6层结构:全局视图→全局概念→分片→分配→局部概念→局部内模式
- 分布透明性3层次:分片>位置>局部数据模型(从高到低)
- binlog 3种模式:SQL语句/行/混合,各有优缺点