赞
踩
生产环境如下
MySql 版本 MySql 5.7
图形管理工具Navicat
Linux 系统
电商的基本模块有如下几个, 按照用户使用的流程
通过流程图 , 我们需要设计以下几个模块
模块 | 模块说明 |
---|---|
用户模块 | 完成用户注册和登录验证 |
商品模块 | 前后台商品管理和浏览 |
订单模块 | 订单及购物车的生成和管理 |
仓配模块 | 仓库库存和物流管理 |
在实际工作中,一般情况下,各个公司都有自己的数据库设计规范,在遵循公司内部规范的同时,我们还有业内共识通用的设计规范,在此,就本次的电商数据库设计,说明以下部分规范.这个规范也同样适用与大部分业务的数据库设计.
数据库命名规范
数据结构基本设计规范
所有的表必须使用Innodb存储引擎
MySQL5.6 以后 Innodb 引擎成了默认的存储引擎 . 支持事务,行及锁,有更好的恢复性,高并发下性能好
数据库和标的字符集统一使用UTF-8
MySQL UTF-8字符集汉子占3个字节 , ASSIC占1个字节
所有的表和字段都要添加注释
尽量控制单表数据量的大小 , 尽量在500万行以内
如果必须超过这个量 , 一般采用历史数据归档(eg. 日志类表) , 分库分表(主要是业务数据)等方式.
尽量做到冷热数据分离,减小表的宽度
这样做的目的是较少磁盘的IO , 保证热数据的内存缓存命中率
利用更有效的利用缓存,避免读入更无用的冷数据(少使用 select *)
经常使用的列放到一个表中
禁止在表中建立预留字段
很难做到见名之意
无法确认存储的数据类型.
对预留字段进行修改时,会对表造成锁定
禁止在数据库中存储图片, 文件等二进制数据 .
禁止在线上数据库做数据库压力测试
禁止从开发环境,测试环境直连生产环境数据库
否则很容易造成数据库污染
数据库索引设计规范
限制每张表的上的索引数量 , 建议单张表索引不超过 5 个
常见索引列建议
数据字段设计规范
优先选择符合存储需要的最小的数据类型
INET_ATON('255.255.255.255') = 429467295 IETN_NTOA(429467295) = '255.255.255.255'
避免使用 TEXT , BLOB数据类型
避免使用 ENUM数据类型
尽可能把列定义为 NOT NULL
使用 timestamp 或者datetime 类型存储时间
timestamp 存储时间 范围 为 1970-01-01 00:00:01 ~ 2038-01-19 03:14:07
timestamp 区间不够, 使用datetime 存储
同财务相关的金额类数据 , 必须使用 decimal 类型
数据库SQL开发规范
充分使用表已经存在的索引查询
left join
或者 not exists
优化 not in
操作禁止使用 select *
查询
禁止使用不含字段列表的 insert
语句
避免使用子查询 , 可以把子查询优化 join
操作
避免使用 join
关联太多的表
减少同数据库的交互次数
使用 in 代替 or
禁止使用 order by rand ()
进行随机排序
where 从句中禁止对列进行函数转换和计算
where createtime >='20170101' and createtime <'20170102'
再明显不会有重复值时 使用 union all
而不是 union
拆分复杂的大 sql 为多个 小 sql
数据库操作行为规范
超过 100 万行的批量写操作 ,要 分批分次进行操作
禁止为程序使用的账号赋予super 权限
对于程序连接数据库账号 , 遵循权限最小原则
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。