【软考速通笔记】系统架构设计师⑥——数据库设计基础知识

文章目录

一、前言

笔记目录大纲请查阅:【软考速通笔记】系统架构设计师------导读

二、前言

数据库的很多概念,平时都有接触过,就不一一讲述。
直接上干货,聚焦于那些频繁出现的考点。

三、关系代数运算

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写数据库
    • 成功后写缓存
    • 成功返回。

若觉得文章对你有帮助,随手『点赞』、『收藏』、『关注』,也是对我的支持。

相关推荐
东软吴彦祖22 分钟前
包安装利用 LNMP 实现 phpMyAdmin 的负载均衡并利用Redis实现会话保持nginx
linux·redis·mysql·nginx·缓存·负载均衡
幼儿园老大*1 小时前
【系统架构】如何设计一个秒杀系统?
java·经验分享·后端·微服务·系统架构
小爬菜1 小时前
Django学习笔记(启动项目)-03
前端·笔记·python·学习·django
小爬菜1 小时前
Django学习笔记(bootstrap的运用)-04
笔记·学习·django
小高不明2 小时前
仿 RabbitMQ 的消息队列2(实战项目)
java·数据库·spring boot·spring·rabbitmq·mvc
DZSpace2 小时前
使用 Helm 安装 Redis 集群
数据库·redis·缓存
张飞光2 小时前
MongoDB 创建集合
数据库·mongodb
dal118网工任子仪2 小时前
69,【1】BUUCTF WEB ssrf [De1CTF 2019]SSRF Me
笔记·学习
Hello Dam2 小时前
接口 V2 完善:基于责任链模式、Canal 监听 Binlog 实现数据库、缓存的库存最终一致性
数据库·缓存·canal·binlog·责任链模式·数据一致性
张飞光2 小时前
MongoDB 创建数据库
数据库·mongodb·oracle