数据库模式
数据库的三层模式二级映像(如图)
- 三层模式:
- 外模式:用户与数据系统的接口
- 逻辑模式:数据库中全部数据整体逻辑结构的描述
- 内模式:数据库物理存储方面的描述
- 两级映像(如图)
- 外模式/逻辑模式映像
- 逻辑模式/内模式映像
- 三层模式:
数据抽象级别的4种模型
- 概念模型
- 逻辑模型
- 外部模型
- 内部模型
事务
- 概念:构成单一逻辑工作单元的操作集合,要么完整的执行要么不执行。
- commit:事务执行成功地结束
rollback:表示事务执行不成功的结束 - 事务的ACID属性:原子性、一致性、隔离性、持久性
- 检查点技术: 在检查点时刻才真正的把对DB的修改写到磁盘,并写日志文件
- 数据在磁盘上以块的定长存储单位形式组织
锁
并发操作带来的三个问题
丢失更新:
读脏数据: 未提交随后被撤销的数据称为脏数据
不可重复读:一个事务读两次数据结果不相同
封锁技术
- 排他型锁(x锁):即是写锁,写锁的解除在commit或者rollback操作中,可以解决丢失更新问题
- 共享型锁(s锁):即是读锁,提高了并发性,在s锁解除之前不许上x锁,其他事务可以上s锁
- 封锁 三级协议,每一级写数据都必须加写锁,一级(读脏数据,不可重复读都可能发生),二级读取数据必须加读锁,读完即可解除(可能会发生不可重复读),三级在事务结束释放s锁。
封锁带来的问题
- 活锁:某个事物永远处于等待状态,得不到封锁的机会
- 饿死问题:
死锁:
死锁(Deadlock)
所谓死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。产生死锁的原因主要是:
- 系统资源不足。
- 进程运行推进的顺序不合适。
- 资源分配不当等。
产生死锁的四个必要条件:
- 互斥条件:一个资源每次只能被一个进程使用。
- 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
- 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
- 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。
死锁的预防和解除:
- 足够的资源
- 银行家算法
sql的完整性约束
- 域约束、基本表约束、断言
数据库的优化
- 水平拆分和垂直拆分
- 垂直拆分: 按照功能模块进行拆分,例如按照评论表、点赞表、文章内容表
- 水平拆分: 将表的数据分块保存在不同的数据库中,例如按照时间拆分(可能不均匀),加一个库专门设置映射,新建的DB专门负责存放user_id到数据库的映射关系。
数据库的三级范式
关键码:唯一能决定整个关系集合的属性集合,例如: d -> a, ab - c,db是关键码
无损分解,保持依赖的分解