生产环境如下

MySql 版本 MySql 5.7
图形管理工具Navicat
Linux 系统

项目说明

电商的基本模块有如下几个, 按照用户使用的流程

Created with Raphaël 2.1.0用户登录选购商品加入购物车检查库存提交订单货到付款?发货订单付款yesno

通过流程图 , 我们需要设计以下几个模块

模块 模块说明
用户模块 完成用户注册和登录验证
商品模块 前后台商品管理和浏览
订单模块 订单及购物车的生成和管理
仓配模块 仓库库存和物流管理

接下来就是数据库设计, 先说一说数据库的设计规范

在实际工作中,一般情况下,各个公司都有自己的数据库设计规范,在遵循公司内部规范的同时,我们还有业内共识通用的设计规范,在此,就本次的电商数据库设计,说明以下部分规范.这个规范也同样适用与大部分业务的数据库设计.

数据库命名规范

  • 所有的数据库对象名称必须使用小写字母并使用下划线分割(mysql 数据库对大小写敏感)
  • 所有数据库对象名称禁止使用MySqL保留关键字 eg. from关键字
  • MySQL关键字查询
  • 数据库对象的命名要见名之意 , 最好不要超过32个字符.
  • 数据库操作的时候 ,总会导入导出表 , 有一些临时表 , 临时表的最好以tmp为前缀并且以日期为后缀
  • 备份表的命名, 最好以bak为前缀并且以日期为后缀
  • 所有存储相同数据的列名和列类型必须一致

数据结构基本设计规范

  • 所有的表必须使用Innodb存储引擎
    MySQL5.6 以后 Innodb 引擎成了默认的存储引擎 . 支持事务,行及锁,有更好的恢复性,高并发下性能好

  • 数据库和标的字符集统一使用UTF-8
    MySQL UTF-8字符集汉子占3个字节 , ASSIC占1个字节

  • 所有的表和字段都要添加注释

  • 尽量控制单表数据量的大小 , 尽量在500万行以内
    如果必须超过这个量 , 一般采用历史数据归档(eg. 日志类表) , 分库分表(主要是业务数据)等方式.

  • 尽量做到冷热数据分离,减小表的宽度
    这样做的目的是较少磁盘的IO , 保证热数据的内存缓存命中率
    利用更有效的利用缓存,避免读入更无用的冷数据(少使用 select *)
    经常使用的列放到一个表中

  • 禁止在表中建立预留字段
    很难做到见名之意
    无法确认存储的数据类型.
    对预留字段进行修改时,会对表造成锁定

  • 禁止在数据库中存储图片, 文件等二进制数据 .

  • 禁止在线上数据库做数据库压力测试

  • 禁止从开发环境,测试环境直连生产环境数据库
    否则很容易造成数据库污染

数据库索引设计规范

  • 限制每张表的上的索引数量 , 建议单张表索引不超过 5 个

    • Innodb是按照主键的顺序来组织表的
    • 不使用更新频繁的列作为主键 , 不使用多列主键
    • 不使用UUID , MD5 , HASH , 字符串列作为主键
    • 主键建议使用自增ID使用主键
  • 常见索引列建议

    • select ,update , delete 语句中的where 从句中的列
    • 包含在order by ,group by ,distinct 中的字段
    • 多表JOIN的关联列
  • 如何选择索引列的顺序
    • 区分度最高的列放在联合索引的最左侧(主键, 唯一索引列)
    • 尽量把字段长度最小的列放在联合索引的最左侧
    • 使用频繁的列放到最左侧

数据字段设计规范

  • 优先选择符合存储需要的最小的数据类型

    • 将字符串转化为数字类型存储 INET_ATON('255.255.255.255') = 429467295 IETN_NTOA(429467295) = '255.255.255.255'
    • 对于非负整数来说, 优先使用无符号整型
    • MySQL 中 varchar(n) 这里的n 代表的是字符数 , 不是字节数 ,varchar(255) 可以存 255 个汉字 , 需要占用 765 个字节
    • 过大的长度会消耗更多的内存
  • 避免使用 TEXT , BLOB数据类型

    • 如果必须使用 , 将BLOB或者是TEXT列分离到单独的扩展表
  • 避免使用 ENUM数据类型

  • 尽可能把列定义为 NOT NULL

  • 使用 timestamp 或者datetime 类型存储时间

    • timestamp 存储时间 范围 为 1970-01-01 00:00:01 ~ 2038-01-19 03:14:07

    • timestamp 区间不够, 使用datetime 存储

  • 同财务相关的金额类数据 , 必须使用 decimal 类型

    • decimal 类型为精准浮点数 , 在计算时不会丢失精度

数据库SQL开发规范

  • 充分使用表已经存在的索引查询

    • 使用left join 或者 not exists 优化 not in 操作
  • 禁止使用 select * 查询

    • 会消耗更多的cpu 和io 以及网络带宽资源
    • 无法使用覆盖索引
    • 可较少表结构变更带来的影响
  • 禁止使用不含字段列表的 insert 语句

  • 避免使用子查询 , 可以把子查询优化 join 操作

    • 子查询结果集无法使用索引
    • 子查询会产生临时表操作 , 如果子查询数据量大则严重影响效率
  • 避免使用 join 关联太多的表

    • 建议不超过 5 个
  • 减少同数据库的交互次数

    • 数据库更适合处理批量操作
  • 使用 in 代替 or

  • 禁止使用 order by rand () 进行随机排序

  • where 从句中禁止对列进行函数转换和计算

    • where date(createtime) = ‘20170101’ (禁止这样)
    • 上面的可以这样改 where createtime >='20170101' and createtime <'20170102'
  • 再明显不会有重复值时 使用 union all 而不是 union

  • 拆分复杂的大 sql 为多个 小 sql

数据库操作行为规范

  • 超过 100 万行的批量写操作 ,要 分批分次进行操作

  • 禁止为程序使用的账号赋予super 权限

  • 对于程序连接数据库账号 , 遵循权限最小原则

    • 程序使用数据库账号只能在一个DB下使用 , 不准跨库
    • 程序使用的账号原则上不准有 drop 权限

电商数据库设计之MySQL 数据库设计规范相关推荐

  1. css网页设计实例代码_大型电商平台设计实例:电商平台项目工程、数据库选型、代码库...

    电商平台微服务体系架构 经过一系列的微服务设计, 下面使用一张维导图完整表示这个电商平台的微服务架构设计模型,如图 3-6 示. 这是一个为简单的电商平台微服务架构设计模型,并且使用了粗粒度的微服务划 ...

  2. 电商常用功能模块的数据库设计

    简介: 目的: 电商常用功能模块的数据库设计 常见问题的数据库解决方案 环境: MySQL5.7 图形客户端,SQLyog Linux 模块: 用户:注册.登陆 商品:浏览.管理 订单:生成.管理 仓 ...

  3. 大型电商平台设计实例:电商平台项目工程、数据库选型、代码库

    电商平台微服务体系架构 经过一系列的微服务设计, 下面使用一张维导图完整表示这个电商平台的微服务架构设计模型,如图 3-6 示. 这是一个为简单的电商平台微服务架构设计模型,并且使用了粗粒度的微服务划 ...

  4. JAVA计算机毕业设计移动电商网站Mybatis+源码+数据库+lw文档+系统+调试部署

    JAVA计算机毕业设计移动电商网站Mybatis+源码+数据库+lw文档+系统+调试部署 JAVA计算机毕业设计移动电商网站Mybatis+源码+数据库+lw文档+系统+调试部署 本源码技术栈: 项目 ...

  5. java计算机毕业设计Vue框架电商后台管理系统源码+数据库+系统+lw文档

    java计算机毕业设计Vue框架电商后台管理系统源码+数据库+系统+lw文档 java计算机毕业设计Vue框架电商后台管理系统源码+数据库+系统+lw文档 本源码技术栈: 项目架构:B/S架构 开发语 ...

  6. Java计算机毕业设计电子产品专卖电商系统源码+系统+数据库+lw文档

    Java计算机毕业设计电子产品专卖电商系统源码+系统+数据库+lw文档 Java计算机毕业设计电子产品专卖电商系统源码+系统+数据库+lw文档 本源码技术栈: 项目架构:B/S架构 开发语言:Java ...

  7. 巨人java生鲜app下载_Java生鲜电商平台-生鲜电商商品中心系统设计与数据库架构(生鲜小程序/APP)...

    Java生鲜电商平台-生鲜电商商品中心系统设计与数据库架构(生鲜小程序/APP) 说明:Java生鲜电商平台-生鲜电商商品中心系统设计与数据库架构(生鲜小程序/APP) 日日鲜-商品中心系统设计 项目 ...

  8. java毕业设计电商后台管理系统Mybatis+系统+数据库+调试部署

    java毕业设计电商后台管理系统Mybatis+系统+数据库+调试部署 java毕业设计电商后台管理系统Mybatis+系统+数据库+调试部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java ...

  9. 睿乐购电商课程设计——总结

    睿乐购电商课程设计--总结 项目文件目录说明 命名说明与注意事项 ajax参考 问题记录 jquery 获取表单数据 前后端分离方案 session与cookie token 参考代码 接口注意事项 ...

  10. 基于JAVA手机数码电商平台设计与开发

    随着计算机通讯技术和数据库技术的不断发展,电子商务已经成为社会发展的潮流,通过电子商务系统商品信息交流变的更加方便.面对高速发展的电子商务,各种电子商务系统平台如雨后春笋不断的涌现. 利用电子商务系统 ...

最新文章

  1. 分割候选区域--FastMask: Segment Multi-scale Object Candidates in One Shot
  2. 网站开发流程以及HTML5简介(三)
  3. Gamma阶段第九次scrum meeting
  4. linux setroubleshootd进程 内存占用过大
  5. c 语言名称的作用域,C 作用域规则
  6. React Native Weex 区别
  7. 《linux c编程指南》学习手记4
  8. which 命令详解
  9. scrapy 自动下载图片
  10. 【联系】—— Beta 分布与二项分布、共轭分布
  11. 电子商务世界历程及国内历程
  12. DevExpress 设计Ribbon界面
  13. 同步时钟、异步时钟----概念解析
  14. 腾讯云服务器TencentOS镜像操作系统评测及常见问题解答
  15. 梦幻西游网络诊断找不到服务器,《梦幻西游》电脑版出现网络故障 受影响者可寻找恢复使者进行恢复...
  16. XML入门教程(3)
  17. 互联网人集体的远程办公终将是昙花一现?
  18. PSM倾向得分匹配代码和案例数据
  19. ted学习方法_视世界为1000人,我是如何学习内容策略的TED设计系统的
  20. MATLAB处理图像时出错:错误使用 rgb2gray>parse_inputs (line 80)MAP 必须为 m x 3 的数组。

热门文章

  1. cjson构建_cJSON的构造和解析
  2. CactiEZ安装与配置-监控网卡流量
  3. t分布 u分布 卡方分布_四个分布:正态分布/卡方分布/F分布/T分布
  4. java单例模式——详解JAVA单例模式及8种实现方式
  5. 零一块学计算机二级题库,2017年计算机二级office题库及答案
  6. Matlab中CVX工具箱使用
  7. Python-通过Fidder+mumu模拟器爬取豆瓣TOP250
  8. 老男孩Python全栈视频
  9. 学习用PySide写界面
  10. 关于SoUI界面库处理从WM_LBUTTONUP到按钮事件的消息路由过程分析