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