数据库结构设计

数据库结构设计介绍
良好的数据库逻辑设计和物理设计是数据库获得高性能的基础。这就要求我们在设计数据库时候,不能只考虑业务需要还要考虑将来要怎样使用这个数据库来编写什么样的查询语句才能得到我们想要的数据,所以也要根据我们写的查询语句来设计数据库结构。
数据库的设计要达到尽量使我们的查询语句简单,为了达到这个目的,需要考虑很多因素,比如进行一些反范式化设计,可能会加快一些查询速度,但是又会对其他语句造成一定影响,所以一定要平衡各种因素以达到更好的效果。
数据库结构优化的目的:
1、尽量减少数据冗余(不是避免,有时也是必要的)
2、尽量避免数据维护中出现更新、插入和删除异常
插入异常:如果表中某个实体随着另一个实体的存在而存在,这样的表就存在插入异常
更新异常:如果更改表中的某个实体的单独属性时,需要对多行进行更新,这样的表就存在更新异常
删除异常:如果删除表中某一个实体则会导致其他实体消失
3、节约数据存储空间
4、提高查询效率
数据库结构设计的步骤
1、需求分析:全面了解产品设计的存储需求(非常重要)
存储需求
数据处理需求
数据安全性和完整性
2、逻辑设计:设计数据的逻辑存储结构(范式)
数据实体之间的逻辑关系,解决数据冗余和数据维护异常
3、物理设计:根据所使用的数据库特点进行表结构的设计
4、维护优化:根据实际情况对索引、存储结构等进行优化
数据库设计范式
设计出没有数据冗余和数据维护异常的数据库结构
1NF:
数据库表中的字段都只具有单一属性
单一属性的列由基本数据类型所构成
设计出来的表是简单的二维表
每一行没有重复
2NF:
要求一个表中只有一个业务主键,也就是符合第二范式的表中不能存在非主键列只对部分主键的依赖关系
3NF:
每一个非主属性既不部分依赖也不传递依赖于业务主键
什么叫做反范式化设计
反范式化是针对范式化而言的,就是为了性能和读取效率的考虑而适当的对数据库设计的要求进行违反,而允许存在少量的数据冗余,换句话说反范式化是使用空间来换取时间
范式化设计的优缺点
优点:
可以尽量减少数据冗余
范式化的更新操作比反范式化更快
范式化表通常比反范式化更小
缺点:
对于查询需要多个表进行关联
更难进行索引优化
反范式化优缺点
优点:
减少表的关联
可以更好的进行索引优化
缺点:
存在数据冗余及数据维护异常
对数据修改需要更多的成本
物理设计介绍
1、定义数据库、表及字段的命名规范
数据库、表及字段的命名要遵守可读性原则
数据库、表及字段的命名要遵守表意性原则
2、选择合适的存储引擎
存储引擎 事务 锁粒度 主要应用 忌用
MyISAM 不支持 支持并发插入的表级锁 Select、insert 读写操作频繁
InnoDB 支持 支持MVCC的行级锁 事务处理 无
MRG_MYISAM 不支持 支持并发插入的表级锁 数据仓库、分段 全局查找过多场景
Arxhive 不支持 行级锁 日志记录,只支持select、insert 需要随机读取、更新、删除
Ndb cluster 支持 行级锁 高可用 大部分应用

3、为表中的字段选择合适的数据类型
4、建立数据库结构
数据类型的选择
当一个列可以选择多种数据类型时,优先考虑数字类型,其次是日期或二进制类型,最后是字符类型。对于相同级别的数据类型,应该优先选择占用空间小的数据类型

你可能感兴趣的:(MySQL)