数据库系统
数据库模式
三级模式,两级映射
- 三级模式:外模式、概念模式、内模式
- 两级映射:外模式-概念模式映射、概念模式-内模式映射
- 逻辑独立性:外模式与概念模式之间具有逻辑独立性
- 物理独立性:概念模式与内模式之间具有物理独立性
- “逻辑结构”-概念模式
关系表类型
基本关系表:又称为基本表或基表,实际存在的表,存储数据的逻辑表示
查询表:查询结果对应的表
视图表:也叫虚表,由基表或其他视图表导出的表,本身不独立存储,数据库仅存放它的定义
- 视图性能不高,要优化性能可以采用物化视图
- 视图简化用户操作
- 视图提供了一定程度的逻辑独立性
- 视图能对机密数据提供安全保护
- 物化视图:实体化视图,本身会存储数据的视图,当原始表中数据更新时,物化视图也会更新,查询性能会有所改善,适用于多查询少更新的情况
解决数据不一致的三种方式
应用程序实现
- 在基础表变化时,控制对统计表进行操作,以保障数据的一致性
触发器实现
- 当基础表变化时,将更新的内容同步更新到对应的统计表中
物化视图实现
- 建立物化视图,物化视图会将相应的数据物理存储起来,基础表发生变化时,会自动更新
分布式数据库
集中式数据库和分布式数据库区别
特点
- 数据独立性:除了数据的逻辑独立性和物理独立性外,还有数据分布独立性,即分布透明性
- 集中于自治共享结合的控制结构:各局部DBMS可以独立管理局部数据库,具有自治功能。同时,系统又有集中管理机制,协调各分部DBMS的工作,执行全局应用
- 适当增加数据冗余度:在不同的场地存储同一数据的不同副本,在提供系统可靠性和可用性的同时,也能提高系统性能
- 全局的一致性、可串行和可恢复性
分布式数据库管理系统
组成
- LDBMS-局部数据库管理系统
- GDBMS-全局数据库管理系统
- 全局数据字典
- 通信管理
结构类型
- 全局控制集中的DDBMS
- 全局控制分散的DDBMS
- 全局控制部分分散的DDBMS
分布透明性
分片透明性:
用户不需要知道数据的分片方式- 水平分片,全字段数据,按部分分片
- 垂直分片,全量数据,按字段分片
- 混合分片,兼容上述两种分片方式,维护较为复杂
复制透明性:系统自动完成被复制数据的更新
位置透明性:
用户不需要知道数据的存储位置和节点局部数据模型透明性:最低层次的透明,用户不必关心局部DBMS支持哪种数据模型、使用哪种数据操纵语言,数据模型和操纵语言的转换是由系统完成的
事务的两阶段提交协议
阶段分类
表决阶段
- 形成共同的决定
执行阶段
- 实现协调者的决定
提交规则
- 只要一个参与者撤销事务,协调者必须全局撤销决定
- 所有参与者都同意提交事务,协调者提交全局决定
数据库设计过程
1.概念结构设计-ER模型
实体与联系
联系类型判断
- 一对一
- 一对多
- 多对多
集成的方法:
1、多个局部ER图一次性集成
2、采取累加的方式逐步集成
可能产生的冲突:
1、属性冲突:属性域冲突和属性取值冲突
2、命名冲突:针对同一实体,存在同名同义和异名同义
3、结构冲突:同一对象在不同应用中具有不同的抽象,以及同一个十一的ER结构包含的属性个数及属性排列次序不完全一致
2.逻辑结构设计-关系模式
关系模型基本概念
三要素:数据结构、数据操作、数据的约束条件
分类
层次模型:父节点包含多个子节点,子节点只从属于一个父节点
网状模型:节点与节点之间扁平连接
面向对象模型:已对象为单位组织的数据模型
关系模型:关系-特征,二维关系-特征
几个基本概念
- 目/度:属性的个数
- 候选码/键:唯一标识元组且无冗余的一个或多个属性的集合
- 主码/键:候选键中任选一个即可
- 主属性与非主属性:候选键对应的属性称为主属性,其他为非主属性
- 外码/键:其他关系的主键
- 全码:关系模式的所有属性组是这个关系的候选码
完整性约束
- 实体完整性约束:主属性唯一且非空
- 参照完整性约束:外键要么是其他关系的主键,要么是空值,体现关系与关系之间的引用
- 用户自定义的完整性约束:由程序人员自己定义
- 触发器:复杂的完整性约束
逻辑结构设计
ER图向关系模式的转换(*)
关系模式的规范化
确定完整性约束,保证数据正确
用户视图的确定,提高数据的安全性和独立性
- 根据数据流图确定处理过程使用的视图
- 根据用户类别确定不同用户使用的视图
应用程序设计
关系代数
(☆☆☆☆)
属性列,目/度
元组行/记录,实例
同构数据表
- 并:集合的全集,重复记录会去除,记作∪
- 交:仅重复的记录会被记录,记作∩
- 差:从被减数的集合移除减数集合的元素,记作-
笛卡尔积
- 不要求两个表同构还是异构
- 属性列是两表之和
- 元组行是两表元组行乘积拼接
- (表名+“.”)表示引用区分
- 记作X
投影:垂直方向,选出有限个列,形成投影,记作π
选择:水平方向,选出某个或某些记录,形成选择集合,记作σ
自然连接:两表列集合的和去重,两表行的主键相等,垂直分表的依据,与笛卡尔积存在等价表示的方法,记作⋈
性能问题:自然连接稍优于笛卡尔积,尽可能压缩运算表
规范化理论(☆☆☆☆☆)
非规范化存在的问题:数据冗余(浪费存储空间)、更新异常(部分修改)、插入异常(未分配主键不能插入)、删除异常(删除了不该删除的数据)
基本概念
- 函数依赖-语义联系,例如:学号–>系号–>系名,反之则无法确定
- 码/键 关系:根据入度为0原则,求取得到候选码/键(仅出现在左侧,不可能出现在右侧,可以有继承推导)
- 部分函数依赖:如:(AB->D,A->C)
- 传递函数依赖:如:(A->B,B->C)
Armstrong公理系统
- 推理规则:
- 基于推理规则的推理:
范式判断
- 逐步优化,以解决:插入异常、删除异常、数据冗余等问题
- 规范化理论可能会引起查询效率低的问题,这时需要非规范化思想解决查询效率低的问题
- 关系模式分析,确定非主属性与主属性的依赖关系
模式分解
将关系模式中的属性拆分形成新的关系模式
考虑的依据
拆分后是否保持了原有的函数依赖关系
- 不需要考虑冗余函数依赖
能否保持无损
- 通过自然连接和投影等运算仍能还原到原来的关系模式
无损还原
条件
- 首先要存在同名属性列
- 其次,以同名属性列为左侧决定因素的函数依赖一定要有所保留
分析方法
表格法
通用
- 一定要掌握
建立初始表,初始表包含所有列(去重),将分解后的函数依赖对应的属性列打√,然后根据分解的依赖关系,对能推导得到的属性列也打√,最后,只要有一排能完全打√,则称这个分解是无损的
公式法
- 适用于分解为两个函数依赖的情况
- 如果R的分解为ρ={R1,R2},F为R所满足的函数依赖集合,分解ρ具有无损连接性的充要条件是:
R1 ∩ R2 -> (R1 - R2) 或 R1 ∩ R2 -> (R2 - R1),
其中:∩ 表示属性列求交集;- 表示属性列求差集
逆(反)规范化
目标:解决满足规范化理论带来的统计、查询性能降低的问题
技术手段
- 1、增加派生性冗余列,比如:已有“数量”和“单价”列,增加“总价”列
- 2、增加冗余列,比如:已有“学号”列,增加“姓名”列
- 3、重新组表,比如:把垂直拆分的表重组产生宽表
- 4、分割表,比如:将用户表做水平拆分,长沙注册的存在长沙,上海注册的存在上海
优点:连接操作少,检索快,统计快
缺点:数据冗余需要更大的空间存储,插入、更新、删除等操作更复杂,可能产生新增、更新、删除异常,可能造成数据不一致问题
- 针对数据不一致的问题,可以增加触发器数据同步机制或应用程序数据同步机制以解决
其他问题,几乎无解
- 针对数据不一致的问题,可以增加触发器数据同步机制或应用程序数据同步机制以解决
控制技术
并发控制
事务ACID
- 原子性A:整体全部Commit,或Rollback
- 一致性C:一个一致性状态到另一个一致性状态,例如:转账操作
- 隔离性 I:事务之间不应该相互影响,事务同时执行与事务串行执行的结果一致
- 持久性D:无论发生任何情况,事务一旦被提交,对数据库中数据的改变就是永久性的
并发可能产生的问题
丢失更新
- T1对数据执行+10操作,T2对同一数据同时执行+20操作,事务之间执行的数据被覆盖
不可重复读
- T1执行读取过程中,T2对数据更新写回,导致T1前后两次读取结果不一致
“脏”读
- T1在修改数据过程中,T2读到了尚未提交成功的中间数据,然后T1发生回滚,相当于T2读到了“脏”的数据
解决方案
添加封锁协议
S锁:读锁,或共享锁
X锁:写锁,或独占锁,具有排它性
一级封锁协议
- 事务T在修改数据R前必须加X锁,直到事务结束才能释放。
可防止丢失修改
二级封锁协议
一级封锁协议加上事务T在读取数据R之前,先对其加S锁,读完之后可释放S锁。
可防丢失修改,还可防读到“脏”数据
三级封锁协议
一级封锁协议加上事务T在读取数据R之前先对其加S锁,直到事务结束才释放。
可防丢失修改,防止读到“脏”数据,防止数据不可重复读
两段锁协议
可串行化,但可能发生死锁
数据库的安全
数据库备份与恢复
数据备份
冷备,也叫静态备份,即在数据库停止状态下,将数据库文件全部备份下来
- 低维护,高安全,有延迟
热备,也叫动态备份,即在数据库正常运行状态下,将数据库的数据文件备份出来
- 快速备份,不能出错,实时备份
按备份量划分
完全备份
差量备份
- 基于上次完全备份后到这次备份前产生的变化的数据
增量备份
- 基于上次不完全备份后到这次备份前产生的变化的数据
数据库日志文件
- 先写日志,再写数据,也可通过日志文件进行备份,基本会和备份结合起来用
故障和恢复
数据库性能优化
集中式数据库优化
硬件系统
- CPU、内存、IO、硬盘、网络等因素
系统软件
- 参数,进程优先级,CPU使用权,内存使用等
数据库设计
数据库索引
提升查询效率,降低了添加、修改、删除的效率
- 采用B树、B+树等
表与视图的优化
- 规划表的设计,建立视图
索引优化,对常查询的列建索引,对常修改的列避免索引
SQL优化:Explain执行计划,SQL索引合规,仅检索需要的列,联合查询先筛选再连接,减少多表查询,加锁粒度要小,尽早释放锁,不相干的子查询替代相干子查询,带in的语句替换or语句等等…
有可能会违反数据库的规范化理论
应用软件
- 数据库连接池优化,提高访问集中式数据库的效率
分布式数据库优化
单节点上按集中式数据库优化方案进行优化
通信代价
- 全局查询树的变换、多副本策略(就近副本查询)、查询树的分解、半连接与直接连接(减小查询表格,减少通讯代价)
分区、分库和分表
分区和分表的区别
- 分区针对的是一张表,分表针对的是从一张父表派生而来的多张表
分库
- 逻辑相关的一些表分配在同一个数据库中去
分区的常见方式
范围分区
- 按照某字段的取值范围
哈希分区
按照某个key的hash值对N取余
- 数据分配较为均匀
列表分区
- 列表的范围是固定的,例如,将每个省份分一个区
分区的优点
- 分区存储更多的数据
- 数据管理数据比较方便
- 规避了全表扫描,提高检索效率
- 支持夸多分区查询,增加查询的吞吐量
- 聚合查询时,很容易进行数据合并
NoSQL
Not-only SQL,泛指非关系型的数据库
特征
特定的应用领域
海量的数据存储
非结构化的数据
高并发,高性能
事务性支持低
向外扩展的能力
- 集群的能力
分类
键值(k-v)数据库
- 查找快,内容缓存,无结构化
- Redis、Tokyo Cabinet、Voldemort等
列存储数据库
- 分布式文件系统,查找快,分布式扩展能力强
- HBase、Cassandra、Riak
文档型数据库
- 数据结构可变
- MongoDB、CouchDB
图形数据库
- 利用图结构相关算法、常用在社交网络、推荐系统等
- Neo4J、infoGrid
联邦数据库系统
彼此协作又相互独立的各个数据库的集合,各个成员数据库之间按不同程度进行集成,相当于一个中间件,起到对接各成员数据库的作用
特点
- 分布性
- 异构性
- 自治性
- 透明性
分类
- 紧耦合
- 松耦合
大数据
特征
1、数据量大,PB及以上
2、读写、计算、分析速度要快
3、数据种类多样,结构化、非结构化
4、伴随深度的数据分析
5、集群平台,低成本构建
6、向下兼容性,高容错性