【软考速通笔记】系统架构设计师⑥——数据库设计基础知识
文章目录
- 一、前言
- 二、前言
- 三、关系代数运算
- 3.1 运算符
- 3.2 函数依赖
- 3.3 规范化
- 四、数据库优化
- 五、缓存Redis
- 5.1 数据类型
- 5.2 读写操作
一、前言
笔记目录大纲请查阅:【软考速通笔记】系统架构设计师——导读
二、前言
数据库的很多概念,平时都有接触过,就不一一讲述。
直接上干货,聚焦于那些频繁出现的考点。
三、关系代数运算
3.1 运算符
运算符 | 含义 | 解释 |
---|---|---|
∪ | 并 | R∪S,表示关系R和关系S中所有不重复的元组构成的集合 |
∩ | 交 | R∩S,表示同时属于关系R和关系S的元组构成的集合 |
— | 差 | R-S,表示属于关系R但不属于关系S的元组构成的集合 |
× | 笛卡尔积 | R×S,表示关系R中的每个元组与关系S中的每个元组进行所有可能的组合构成的新关系。结果关系的属性个数是R和S属性个数之和,元组个数是R和S元组个数的乘积 |
σ | 选择 | R中符合条件的行,σcon®,表示从关系R中选择满足给定条件con的元组构成的新关系 |
π | 投影 | R中符合条件的列,πA®,表示从关系R中选择属性包含在A中的列构成的新关系 |
⋈ | 连接 | 记作R⋈θS,当θ为等号(=)时,称为等值连接 |
÷ | 除 | R÷S,其结果是一个新的关系,其属性是R中去除S中的属性后剩余的属性 |
⊆ | 子集 | A⊆B,A是B的子集 |
→ | 依赖 | X→Y,X决定Y,Y依赖X |
3.2 函数依赖
- (学号,课程号)→成绩,是完全函数依赖。
- (学号,课程号)→系号,是部分函数依赖。因为不需要课程号,只要学号就能退出系号。
3.3 规范化
BCNF ⊆ 3NF ⊆ 2NF ⊆ 1NF
- 1NF
- 每个表的每个列都是不可分割的基本数据项(即每个列都是原子性的,不可再分)。
- 每列的值都是唯一的,没有重复的列。
- 每个单元格中只能有一个值。
- 2NF
- 满足1NF。
- 表中的每个实例或行必须可以被唯一地区分,即表必须有一个主键。
- 所有非主键属性完全依赖于主键,没有部分依赖。
- 3NF
- 满足2NF。
- 所有字段都只与主键直接相关,而不是与另一个非主键字段相关。
- 消除了传递依赖,即非主键字段不能相互依赖。
- BCNF
- 满足3NF。
- 对于任何非平凡的函数依赖 X → Y,X 必须是候选键。
- 解决了3NF未能解决的一些问题,特别是当一个表有多个候选键时。
四、数据库优化
- 增加冗余列:冗余列是指即重复存储的数据,通过增加冗余列可以减少复杂的表连接操作,提高查询效率。
- 增加派生列:派生列(计算列)是基于表中其他列的值通过某种计算得到的列。存储派生列减少每次查询时的重复计算,提升查询性能。
- 重新组表:对表结构进行优化,如分解大表或合并小表,以提高数据管理和查询效率。
- 水平分割表:将表按行分割,分布到不同的数据库或表中,以减轻单个表的压力。
- 垂直分割表:将表按列分割,将不常用的列移动到单独的表中,以减少数据的I/O操作。
- 数据热备份:通过实时备份技术,确保数据的安全性和一致性,同时不影响数据库的性能。
- 读写分离:将读操作和写操作分离到不同的数据库实例或服务器上,减轻主数据库压力,提高系统吞吐量和响应时间。
- 分库:根据业务不同把相关的表切分到不同的数据库中,如web、bbs、blog等库。如果业务量很大,还可将切分后的库做主从架构,进一步避免单个库压力过大。
- 分表:当数据库中某个表数据量过大时,考虑将表拆分成多个小表,减轻单个表的压力,提高处理效率。
五、缓存Redis
5.1 数据类型
类型 | 描述 | 用于 |
---|---|---|
string | 字符串、整数或者浮点 | 计数器、播放量 |
hash | 代替string,节省空间 | 描述用户信息 |
set | 无序集合,不能重复 | 去重、抽奖 |
list | 双向链表 | 队列、回复评论和点赞 |
zset | 有序集合 | 首页推荐10个最热门的帖子 |
5.2 读写操作
- 读操作:
- 根据key读缓存
- 读取成功则直接返回
- 若不存在,则根据可以读数据库
- 读取成功则写入缓存
- 成功返回。
- 写操作:
- 根据key写数据库
- 成功后写缓存
- 成功返回。
若觉得文章对你有帮助,随手『点赞』、『收藏』、『关注』,也是对我的支持。