软考高级系统架构设计师备考(十九):数据库系统—数据库设计

软考高级系统架构设计师备考(十九):数据库系统---数据库设计

在软考高级系统架构设计师考试中,数据库不仅考基础理论,还重点考察工程实践能力与架构设计能力 。本篇聚焦高阶考点,常见于案例分析题与架构设计题。

核心内容包括:

  • 数据库索引

  • 数据库视图

  • 分库分表与分区

  • 反规范化设计

  • 分布式数据库系统

  • NoSQL数据库

  • 大数据技术体系


一、数据库索引

1 索引的作用

索引(Index)用于提高查询效率,本质是数据结构(如B+树)。

类比:

复制代码
索引 ≈ 书的目录

2 常见索引类型

(1)按结构分类
  • B+树索引(最常用)

  • 哈希索引

  • 位图索引


(2)按功能分类
  • 主键索引

  • 唯一索引

  • 普通索引

  • 联合索引(复合索引)


3 B+树索引特点

  • 所有数据在叶子节点

  • 叶子节点有序链表

  • 支持范围查询


4 索引失效场景

常见导致索引失效的情况:

  • 使用函数:WHERE YEAR(date)=2025

  • 模糊查询:LIKE '%abc'

  • 隐式类型转换

  • 违反最左前缀原则(联合索引)


例题

以下哪种情况最可能使用索引:

A. LIKE '%abc' B. WHERE id = 10 C. WHERE YEAR(date)=2025 D. WHERE name LIKE '%张%'

答案:B


二、数据库视图

1 视图定义

视图(View)是虚拟表,基于查询结果生成。

复制代码
CREATE VIEW v_student AS
SELECT name FROM Student;

2 视图特点

  • 不存储数据(一般)

  • 提高安全性

  • 简化复杂查询


3 视图更新限制

视图可更新需满足:

  • 单表

  • 无聚合函数

  • 无分组(GROUP BY)


例题

视图的本质是:

A. 存储数据 B. 虚拟表 C. 索引结构 D. 缓存数据

答案:B


三、分库、分表、分区

1 为什么要拆分?

原因:

  • 数据量过大

  • 并发压力高

  • 单机瓶颈


2 分表(水平拆分)

将数据按规则拆到多个表:

复制代码
User_1, User_2, User_3

规则:

  • 按ID取模

  • 按时间分表


3 分库

将数据分布到不同数据库:

复制代码
DB1, DB2, DB3

4 分区(Partition)

数据库内部逻辑划分:

  • 范围分区

  • 哈希分区

  • 列表分区


对比总结

技术 是否跨库 透明性
分区 否 对应用透明
分表 可能 部分透明
分库 是 不透明

例题

将用户表按用户ID取模拆分到多个表,属于:

A. 垂直分表 B. 水平分表 C. 分区 D. 反规范化

答案:B


四、反规范化(设计权衡)

1 什么是反规范化

为了提高性能,故意增加冗余。


2 常见手段

  • 冗余字段

  • 冗余表

  • 预计算字段


3 优缺点

优点:

  • 查询快

  • 减少JOIN

缺点:

  • 数据不一致风险

  • 更新复杂


例题

为了减少JOIN,将用户姓名冗余到订单表,这属于:

A. 规范化 B. 反规范化 C. 分区 D. 索引优化

答案:B


五、分布式数据库系统

1 定义

数据分布在多个节点,通过网络协同工作。


2 关键特性

  • 数据分片(Sharding)

  • 复制(Replication)

  • 一致性控制


3 CAP理论

分布式系统三大特性:

  • C(Consistency)一致性

  • A(Availability)可用性

  • P(Partition Tolerance)分区容错

结论:

复制代码
三者不可兼得,只能选两个

4 常见架构

  • 主从复制

  • 多主架构

  • 分布式事务(2PC、3PC)


例题

在网络分区情况下必须保证的特性是:

A. 一致性 B. 可用性 C. 分区容错性 D. 安全性

答案:C


六、NoSQL数据库

1 特点

  • 非关系型

  • 高扩展性

  • 高性能

  • 灵活结构


2 分类

(1)键值型

如:Redis


(2)文档型

如:MongoDB


(3)列族型

如:HBase


(4)图数据库

如:Neo4j


3 与关系数据库对比

项目 关系型 NoSQL
结构 固定 灵活
扩展 较难 容易
事务 强 弱

例题

适合存储JSON数据的是:

A. MySQL B. MongoDB C. Oracle D. DB2

答案:B


七、大数据技术

1 核心特点

  • 数据量大(Volume)

  • 速度快(Velocity)

  • 类型多(Variety)

  • 价值密度低(Value)


2 典型技术栈

(1)存储
  • HDFS
(2)计算
  • MapReduce

  • Spark


3 处理模式

  • 批处理

  • 流处理


例题

用于大规模分布式存储的是:

A. MySQL B. HDFS C. Redis D. Oracle

答案:B


八、综合案例分析

题目

某电商系统:

  • 用户数据量巨大

  • 订单查询频繁

  • 需要高并发支持

问:应采用哪些技术?


分析

  1. 用户表 → 分库分表

  2. 订单查询 → 建索引

  3. 热数据 → 缓存(Redis)

  4. 历史数据 → 数据仓库


答案要点

  • 水平分表

  • 索引优化

  • 缓存 + NoSQL

  • 数据仓库分析


九、总结

数据库进阶重点如下:

索引:

  • B+树

  • 索引失效

视图:

  • 虚拟表

  • 安全性

架构:

  • 分库分表

  • 分区

设计:

  • 反规范化

分布式:

  • CAP理论

  • 分布式事务

新技术:

  • NoSQL

  • 大数据

相关推荐
禾小西16 分钟前
05丨Redis 内存快照:宕机后,如何实现快速恢复?
数据库·redis·缓存
笃行35016 分钟前
数据同步软件:KFS 在 KingbaseES 项目里到底解决了什么
数据库
AOI小白新手上路36 分钟前
视频去雨·论文蒸馏笔记:从物理先验到状态空间模型
数据库·笔记·音视频
小码哥06844 分钟前
搭建短剧系统|海外短剧:从需求到上线的指南
网络·数据库·音视频·短剧小程序·短剧系统·短剧开发·短剧后台
HSunR1 小时前
ruoyi 若依 自定义注解 参数校验
java·前端·数据库
禾小西2 小时前
06丨Redis 数据同步:主从库如何实现数据一致?
数据库·redis·php
前端 贾公子2 小时前
LangGraph == 图的状态(State)管理 (上)
java·开发语言·数据库
薛晓刚2 小时前
PGA 超限的一次应急处置:扩容、清游标、杀会话
数据库
CJi0NG2 小时前
【自用】MySQL-事务
数据库·mysql
我不会插花弄玉3 小时前
4.string类型【由浅入深-redis】
数据库·redis·缓存