赞
踩
前言
在编码过程中,如果MySQL数据结构设计不好的话,会大大影响开发人员编码效率。比如说MySQL数据库表设计不规范,创建时间字段设计成cjsj,创建者字段设计成cjr或者cjz。这样的数据库表可读性和表意性相当差。下面我们就来讲讲如何规范设计数据库结构。
数据库结构优化
数据库结构优化的目的有哪些?
减少数据冗余。
尽量避免数据维护中出现更新,插入,删除异常。插入异常是指如果表中的某个实体随着另一个实体而存在。更新异常是指如果更改表中的某个实体的单独属性时,需要对多行进行更新。删除异常是指如果删除表中的某一实体则会导致其他实体消失。
节约数据查询空间。
假设有一张学生选课表,字段信息如下:
id ,
stu_id //学生id,
stu_name //学生姓名,
stu_sex //学生性别,
course_name //课程名称,
course_point //学分
插入异常就是当插入几门课程的时候,stu_id和stu_name,stu_sex会为空。如果将stu_id设置为非空,会造成异常。
更新异常就是当更新某一个课程的学分时,那么这一门科目的选课记录都将要更新。
删除异常就是当删除某一个课程时,那么这一门科目的选课记录都要删除。
解决上述异常很简单,设计数据库表时遵循数据库三大范式即可。
数据库结构设计又分为逻辑设计和物理设计。
前面说的数据库三大范式可以说是逻辑设计。逻辑设计是根据数据实体之间的逻辑关系对表进行设计。一个好的逻辑设计可以解决数据冗余和数据维护的异常,反之亦然。
物理设计则是根据所使用的数据库特点进行表结构设计。比如Myisam引擎不支持事务,但是支持并发插入的表级锁,主要应用于select,insert。不适合读写频繁的场景。Innodb支持事务,支持MVCC(多版本并发控制)的行级锁,可以应用事务处理。
维护优化是指根据实际情况对索引存储结构等进行优化。
一般数据库结构设计的步骤是:
1.需求分析:全面了解产品设计的存储需求。存取需求是指数据库要存储什么样的数据,这些数据具有什么特点。数据处理需是指如何对数据库进行读取和写入以及对数据的响应时间有什么样的要求,数据的安全性和完整性需求是数据的生命周期。
2.进行逻辑设计和物理设计。
3.维护优化。
有一些场景,我们需要反范式化设计。比如查询订单信息时,我们肯定是要查询下单的收货人信息。如果我们更改了收货人信息,那么查询订单时,会出现收货人信息不一致的现象。所以我们要在订单表中冗余收货人信息。
范式化与反范式化
反范式化设计就是为了性能和读取效率的考虑而适当的对数据库设计范式进行违反,而允许存在少量数据冗余。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。