系统分析师-案例分析-数据库
文章目录
数据库考察知识点
年份 | 知识点 | 形式 | 分数 |
---|---|---|---|
2018 | 视图的基本概念与用法 | 简答 | 8 |
2018 | 规范化设计 | 简答 | 8 |
2018 | 事物、触发器、物化视图 | 简答 | 9 |
2019 | 读写分离、主从复制,MySQL复制方式 | 填空 | 8 |
2019 | SQL和NoSQL特点比较 | 填空 | 8 |
2019 | 混合数据库数据同步问题 | 简答 | 9 |
2020 | 索引的副作用 | 简答 | 9 |
2020 | 物理分区模式比较 | 填空+简答 | 4+6 |
2020 | 读写分离、主从复制 | 简答 | 6 |
2021 | 主题数据库的设计要求和基本特征 | 简答 | 10 |
2021 | 云数据库的特点 | 简答 | 8 |
2022 | 两阶段提交协议(2PC)来解决服务数据的一致性问题 | 简答 | 7 |
2022 | 分布式数据库服务数据的一致性问题 | 填空 | 8 |
2022 | 分布式数据库发布更新数据原子性问题 | 简答 | 10 |
2023 | SQL和NoSQL特点以及比较 | 简答 | 8 |
2023 | NoSQL特点以及比较 | 填空 | 8 |
2023 | 混合数据库 | 简答 | 9 |
规范化
函数依赖
- 给定一个X,能唯一确定一个Y,就成X确定Y,或说Y依赖X。记X->Y。
- 部分函数依赖(只发生在联合主键) :A->C,AB -> C。
- 传递函数依赖: A -> B , B -> C , A != B => A -> C。
范式
学生表(学号,课程名,学生姓名,学生地址(省市县),教师号,教师地址,成绩)
(学号 -> 学生姓名,学号 -> 学生地址(省市县),学号 -> 教师号,教师号 -> 教师地址,学号,课程名 -> 成绩)
1NF
每一个分量必须是一个不可分的数据项,即表中不允许小表。
学生表(学号,课程名,学生姓名,学生省,学生市,学生县,教师号,教师地址,成绩)
2NF
实体的非主属性完全完全依赖于主关键字,即消除部分函数依赖。
学生表(学号,课程名,学生姓名,学生省,学生市,学生县,教师号,教师地址)
成绩表(学号,课程名,成绩)
3NF
任何非主属性不依赖于其它非主属性。即在2NF上消除传递依赖。
学生表(学号,课程名,学生姓名,学生省,学生市,学生县,教师号)
教师表(教师号,教师地址)
成绩表(学号,课程名,成绩)
就是主键可以直接决定非主键。
规范化问题
不规范化
- 数据冗余,教师姓名列出现多次。
- 修改异常,如修改教师地址,需要保证同时修改完所有行。
- 插入异常,没有学生信息的时候教师信息无法插入。
- 删除异常,学生信息清空的时候会将教师信息清空。
反规范化设计
规范化设计之后,会降低查询效率。降低连接操作的需求。
- 增加冗余列,在多个表中存在相同的列。
- 增加派生列,在表中增加本表和它表计算生产的列。
- 重新组表,把需要查看的两个表的结果保存为新表。
- 水平分割表,按行分,常用于分部署数据库或者对历史数据不关心的表。
- 垂直分割表,按列分,常用于分部署数据库。
反规范化设计同步问题
- 应用程序同步
- 批量处理同步
- 触发器
并发控制
-
ACID:原子性、一致性、隔离性、持久性
-
引发的问题。丢失更新(A覆盖了B的修改)、不可重复读(A第一次读到的数据后,B修改了数据,A再次读取数据得到的值不一样),脏数据(A读到的数据是回滚前的数据)
-
读写(排它)锁
性能优化
- 提升硬件:CPU 内存 IO 网络
- 软件提升:进程优先级,CPU使用权,内存预分配
- 数据库设计:反规范化设计、分库分表、读写分离、索引优化、SQL查询优化(减少多表和子查询)
- 应用软件:数据库连接池
完整性约束
- 实体完整性(主键唯一非空)、参照完整性(外键唯一或空)、用户定义完整性(用户自定义范围)
视图
视图(View)是从一个或多个表(或视图)导出的表。视图与表不同,视图是一个虚表,即视图所对应的数据不进行实际存储,数据库中只存储视图的定义,在对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表。
视图的优点:
- 视图能简化用户的操作
- 视图机制可以使用户以不同的方式查询同一数据
- 视图对数据库重构提供了一定程度的逻辑独立性
- 视图可以对机密的数据提供安全保护
安全
- 用户标识和鉴别(密码、口令)
- 存取控制(用户权限)
- 密码存储用传递(加密)
- 视图保护(用户权限)
- 审计(记录操作)
分布式数据库
- 由一组数据组成的,这组数据分布在计算机网络的不同计算机上,网络中的每个节点具有独立处理的能力(称为场地自治),它可以执行局部应用,同时,每个节点也能通过网络通信子系统执行全局应用。
特点
- 分布性: 数据物理上分布在不同位置,但逻辑上属于同一个系统。
- 共享性:数据可以被网络上多个用户或系统共享。
- 可用性:系统设计能够面对硬件故障、网络问题等异常时继续提供服务。
- 自治性:系统中每个几点具有独立管理自己的数据和操作的能力。
优点
- 分布式数据库可以解决企业部门分散而数据需要相互联系的问题。
- 如果企业需要增加新的相对自主的部门来扩充机构,则分布式数据库系统可以在对当前机构影响最小的情况下进行扩充。
- 分布式数据库可以满足均衡负载的需要。
- 当企业已存在几个数据库系统,而且实现全局应用的必要性增加时,就可以由这些数据库自下而上构成分布式数据库系统。
- 相等规模的分布式数据库系统在出现故障的概率上不会比集中式数据库系统低,但由于其故障的影响仅限于局部数据应用,因此,就整个系统来说,它的可靠性是比较高的。
查询优化
- 降低通讯为核心
- 全局查询树的变换:例如,在做笛卡尔积之前,先进行投影和选择运算。
- 副本的选择与多副本的更新策略:多个副本存在于不同的节点,如何选择。
- 查询树的分解:对所有节点采取后续遍历法,直到所有叶节点均被成功地遍历为止。
- 半连接与直接连接等:不需要传递整个关系,只要传送连接时与对方匹配的元组即可。
NoSQL VS SQL
特征 | SQL | NoSQL |
---|---|---|
并发支持 | 支持并发、效率低 | 并发性能高 |
存储与查询 | 关系表方式存储、SQL查询 | 海量数据存储、查询效率高 |
扩展方式 | 向上扩展 | 向外扩展 |
索引方式 | B树、哈希等 | 键值索引 |
应用领域 | 面向通用领域 | 特定应用领域 |
数据一致性 | 实时一致性 | 弱一致性 |
数据类型 | 结构化数据 | 非机构化 |
事物 | 高事务性 | 弱事务性 |
水平扩展 | 弱 | 强 |
数据容量 | 有限数据 | 海量数据 |
类型
类型 | 代表 | 典型应用场景 | 数据模型 | 优点 | 缺点 |
---|---|---|---|---|---|
Key-Value | Redis、MemCache | 缓存、日志等 | Key-Value/全键值对 | 键操作性能高(基于键的增删查改都快),可扩展性强 | 数据无结构 |
列式存储 | HBase | OLAP | 列簇式存储 | 查找速度快、可扩展性强 | 功能相对局限 |
文档型 | MongoDB | web应用 | key-value ,value为结构化数据 | 使用JSON或者XML等格式来存储数据,格式灵活 | 查询性能不高、缺乏统一语言 |
图数据库 | NeoJs | 社交网络、推荐系统等 | 节点和关系组成的图 | 利用图结构的各类算法 | 需对图整计算,分布集群方案,实现困难 |
内存数据库
内存数据库抛弃了磁盘数据管理的传统方式,基于全部数据都在内存中重新设计了体系结构,并且在数据缓存、快速算法、并行操作方面也进行了相应的改进,所以数据处理速度比传统数据库的数据处理速度要快很多,一般都在10倍以上。
特点:工作版本常驻内存,活动事务只与实时内存数据库的内存拷贝打交道。
常见的内存数据库:Redis、SQLite、Mircrosoft SQLServer Compact 等。
云数据库
云数据库是指被优化并部署到云端虚拟计算环境中的数据库。可以实现按需付费、按需扩展、高可用性以及存储整合等优势。
云数据库的特点包括高并发、高性能、高可用、高可靠、存储整合、高效部署、按需扩展、按需付费、云端迁移等诸多特点。