数据库结构优化
数据库结构优化的目的
- 减少数据的冗余
- 尽量避免数据维护中出现更新、插入和删除异常
- 插入异常:如果表中的某个实体随着另外一个实体而存在
- 更新异常:如果更改表中的某个实体的单独属性时,需要对多行进行更新
- 删除异常:如果删除表中的某一实体则会导致其他实体的消失
数据库结构设计的步骤
- 需求分析
- 全面了解产品设计的存储需求
- 存储需求
- 数据处理需求
- 数据的安全性与完整性
- 逻辑设计
- 设计数据的逻辑存储结构
- 数据实体之间的逻辑关机,解决数据冗余和数据维护异常
- 物理设计
- 根据所使用的数据特点进行表结构设计
- 关系型数据库:Oracle,SQLServer,MySql,postgresSQL
- 非关系型:Hadoop,mongo,redis
- 维护优化
- 根据实际情况对索引、存储结构等进行优化
数据库设计范式
- 第一范式
- 数据库表中的所有字段都只具有单一属性
- 单一属性的列是由基本的数据类型所构成的
- 设计出来的表都是简单的二维表
- 第二范式
- 要求一个表中只具有一个业务主键,也就是说符合第二范式的表中不能存在非主键列对只对部分主键的依赖关系
- 第三范式
- 指每一个非主属性既不部分依赖也不传递依赖于业务主键,也就是在第二范式的基础上消除了非主属性对主键的传递依赖
反范式化设计
反范式化是针对范式化而言的,所谓的反范式化就是为了性能和读取效率的考虑而适当的对数据库设计范式的要求进行违反,而允许存在少量的数据冗余,换句话来说反范式化就是使用空间来换取时间
范式化的优点:
- 可以尽量减少数据冗余
- 数据表更新快体积小
- 范式化的更新操作比反范式化更快
- 范式化的表比反范式化更小
缺点:
- 对于查询需要对多个表进行关联
- 更难进行索引优化
反范式化的优点:
- 可以减少表的关联
- 可以更好的进行索引优化
缺点:
- 存在数据冗余及数据维护异常
- 对数据的修改需要更多的成本