目录
1、数据库模式
三级模式-两层映射
- 外模式。用户视图、视图级,用户程序调用。
- 概念模式。基本表。
- 内模式。物理模式,存储模式,文件级。
外模式和概念模式之间映射,保证逻辑独立性。
概念模式和内模式之间映射,保证物理独立性。
视图
- 视图优点:简化用户操作,重构数据提供一定的逻辑独立性,数据安全保护,用户以多种角度看待同一数据。缺点:查询之后再展示,效率比较低。
- 物化视图。实体化视图,会存储数据,更新原始数据时,需更新物化视图。只适合查询较多的数据,修改性较多的不适合物化视图。
数据库设计过程
- 需求分析。得到数据流图,数据字典,需求说明书。
- 概念结构设计。得到ER模型。用户数据模型。
- 逻辑结构设计。关系模型,视图,完整性约束及应用处理说明书。转换规则,规范化理论。
- 物理设计。硬件,os,聚簇索引。
ER模型
联系类型:
1: 1 一对一
1: n 一对多
n: n 多对多
实体转关系模式
一个实体集至少一个关系模式。
多对多必须转成一个关系模式。
1对多n 可以转为一个关系模型,也可以与n端关系模式合并。
2、关系代数
笛卡尔积 X。属性列数是二者之和。元组行行数是二者乘积。
选择 ∂。现在列是否相等,筛选条件。
投影 π。选择需要的列。
例如: Select 投影 from 表1,表2 where 选择。
自然连接 ▷◁: 属性列二者之和减去重复的列数。元组行数同名属性列取值相等的元素。
自然连接和笛卡尔积转换。先选择(做where),再投影。
1、一般任务自然连接性能优于笛卡尔积。
2、尽量先将操作的对象压缩。
3、规范化理论
非规范化关系模式可能存在问题:数据冗余、更新异常、插入,删除异常。
函数依赖
- 主键唯一标识元组的属性集合。可以决定所有其他属性。主键可以是组合。
- 部分函数依赖:元素依赖主键中的一部分。针对组合主键。
- 传递函数依赖:。
键概念
- 候选键:唯一标识元组,且无冗余。就是可以做主键的属性值,可以是组合键。
- 主键:候选键任选一个
- 外键:其他关系主键。
如何求候选键?
1、找到入度为0的值,即没其他属性指向它。也就是没在右边出现过的属性。
2、如果都没有入度为0的,找中间属性(有入有出)。
候选键包含的属性叫做主属性,其他叫非主属性。
第一范式。属性值都是不可分的原子值。属性不能划分为其他小属性,即是满足一个二维表。
第二范式。再上一基础,不存在非主属性对候选键的部分依赖。
第三范式。再上一基础,不存在非主属性对候选键的传递依赖。
BCNF。每个依赖的决定因素必定包含某个候选码。
分解表拆分
是否保持函数依赖分解。分解之后还能找到之前的函数依赖关系,即可以找到之前的关系模式。
无损分解:可以还原
有损分解:不能还原
无损分解表格法:有一排是勾就是无损分解。
无损连接分解,都是能推所有属性,所以,只要是包涵候选关键字的,都是无损连接。
1、初始表。画出所有属性,根据关系给存在的属性打√。
2、表格中需要相同的那一列开始,作为左侧决定因素,找到对应的关系,如果存在打√。
案例:
反规范化 : 希望牺牲部分规范化提高性能,从规范化设计的回退方法。
由于规范化导致数据表过多,虽然减少了数据冗余,但是增加了增删改的效率。根据业务,在表中新增一部分冗余字段,以提高性能。
益处 : 降低连接操作的需求,降低外码和索引数目,还可以减少表的数目,能够提高查询效率。
技术手段:
- 增加派生性冗余列(计算总和,平均值)
- 增加冗余列。(复制某一列数据)
- 重新组表。多表组合形成一个表。
- 分割表。水平分割(按照字段行不同的取值放不同表,一年或者10年一个表),垂直分割(按列,不常用的数据重新放一个表)。
出现的问题 : 数据冗余,重复存储浪费了磁盘空间;可能出现数据的完整性问题,还有数据性一致性问题,增加数据维护的复杂度,会降低修改速度。
触发器或应用程序解决。
解决一致性的方法主要有三种
1. 使用事物方式(应用程序自己去维护)
2. 使用批处理即定时器。(写个脚本定时去同步,适合数据不实时更新)
3. 使用触发器(数据库触发器可以在修改时自动更新)。
4、并发控制
事务:原子性(要么做,要么不做),一致性(数据一致性),隔离性(事务之间隔离),持续性(修改后数据保持数据持续性)。
并发产生的问题: 丢失更新(修改);不可重复读问题;脏数据读出。
解决方案:
S锁: 读锁,共享锁。
X锁: 写锁,排他锁,独占锁。
读锁可以多个,但是写锁有了之后不能加其他锁。
一级封锁协议:在修改之前加x锁,事务结束后释放,防止丢失修改。
二级封锁协议:一级封锁协议加上读取数据之前加s锁,读完后释放。防止丢失修改和读脏数据。
三级封锁协议:一级封锁协议加上读取数据之前加s锁,事务结束后释放。防止丢失修改和读脏数据,防止数据重复读。
两段锁协议,可以串行化,但可能发生死锁。准备阶段(请求阶段)和提交阶段(执行阶段)。
5、数据库完整性约束
实体完整性。主键,唯一且非空。
参照完整性。引用其他表的主键(外键),其他关系的主键或者为空。
用户自定义完整性约束。check。
触发器。
6、数据库安全、备份、故障与恢复
数据库安全:
- 用户标识和鉴定。主要是身份认证。
- 存取控制。主要是权限。
- 密码存储和传输。对远程终端信息用密码传输。加密和摘要。
- 视图的保护。对视图进行授权。
- 审计。日志记录,事后审查,可追溯。
数据备份:
冷备份(静态备份):停止状态下,将数据库文件备份下来。
热备份(动态备份):数据库正常状态下,备份数据库。
完全备份:备份所有数据。
差量备份:仅备份上一次完全备份之后变化的数据。
增量备份:备份上一次备份之后变化的数据。
日志文件:对于数据库,先写日志再写数据。
各种备份相互用:全备-增备-增备-差备-增备。还原效率高。
数据库故障和恢复
7、分布式数据库、NoSQL、性能优化、大数据分区分表
分布式数据库
NoSQL
数据库性能优化
大数据
分区分表