数据库规范

这里主要针对mysql数据库,其他数据库也可以借鉴

1、统一使用表命名规范

表名规范:分层+项目名缩写+实体名(小写)【+下划线+实体名+rel】

例子

表名:bc_user

分层:

  • 基础服务:b
  • 综合服务:s
  • webapp服务:a

表的种类:

  • 映射实体的表:前缀_实体名(多个单词用下划线隔开)
  • 关系表:前缀_实体名1_实体名2_后缀(多个单词用下划线隔开)

2、统一使用Innodb引擎

3、【推荐】表名不要关联其他表名的信息

表名含义项目范围独立

索引

1、业务上具有唯一特性的字段,即使是组合字段,必须使用唯一索引。

如果没有添加唯一索引,即使在应用层做了非常完善的校验和验证,也无法避免脏数据的产生。

2、唯一索引命名:uk_字段名 普通索引命名:idx_字段名

3、禁止对text定义索引

如果有对这类字段搜索的需求,可以通过全文索引方法来实现功能。

4、【推荐】varchar定义索引长度。长度统一10的倍数,不超过50;

一般有搜索的话,用户也不会输入太多字

字段

1、主键禁止使用自增。

不同库同步数据的时候,会出问题。

2、字段全部禁止为空。

为空的话,很容易在使用的时候出现npe异常

3、禁止使用外键,只能在概念和应用层次使用外键

影响插入性能

4、禁止使用枚举、集合类型

5、禁止在数据库使用blog存文件。

数据库只存相对的url路径

6、类型使用规范

  • 布尔:bit
  • 时间(精确到天):date
  • 时间(精确到秒):datetime
  • 浮点:deciaml
  • 字符串(长度小于10或者长度大于10但是长度相同):char
  • 字符串(长度为10~5000,长度不等):varchar
  • 字符串(富文本):text

7、必有字段

  • 主键
  • 创建时间
  • 修改时间
  • 假删状态

8、【推荐】可以审核添加冗余数据,这样可以快速查询数据。

冗余类型:
+ 技术器、计分器等统计数据
+ 一旦成功不会修改的数据

9、【推荐】字段顺序:自描述-》关联其他表的描述-》功能性-》必有字段

注释

1、表名或者字段注释的格式:直译【(补充说明)】

2、禁止带“表”、“数据”等多余的字眼

3、如果类型字段,有变更,同步注释

sql

1、禁止使用select *

数据库查看执行时间性能没有影响。但是返回的数据量会变大,对网络开销有影响,最终还是影响性能,而且会影响数据库的二进制日志

2、使用select count(*)

select count(name)不记录null的行数,而且官方澄清count(*)不影响性能

3、使用sum函数时,必须使用IFNULL(sum(),0)

如果sum函数没有查询结果返回null,容易出npe

4、禁止出现or。可以使用in或者unit all来替换

5、order by的场景,创建索引时order by后面的字段也必须是组合索引的一部分,并且放在索引顺序的最后,避免file_sort

6、创建组合索引时,区分度最高的放在最左边

where a=? and b=? 如果a几乎接近唯一,那么只要建idx_a即可。

7、【推荐】禁止更新表的所有字段,必须制定更新的字段

开发规范——MYSQL数据库的更多相关文章

  1. Swift3.0服务端开发(四) MySQL数据库的连接与操作

    本篇博客我们来聊聊MySQL数据库的连接与操作.如果你本地没有MySQL数据库的话,需要你先安装MySQL数据库.在Mac OS中使用brew包管理器进行MySQL的安装是及其方便的.安装MySQL的 ...

  2. Go语言学习之10 Web开发与Mysql数据库

    本节主要内容: 1. http编程2. mysql使用 1. http编程 (1)http编程分析 Go原生支持http,import(“net/http”) Go的http服务性能和nginx比较接 ...

  3. 【Python全栈-后端开发】MySQL数据库-练习题

    MySQL数据库-练习题 一.表关系 请创建如下表,并创建相关约束 二.操作表 1.自行创建测试数据 2.查询“生物”课程比“物理”课程成绩高的所有学生的学号: 3.查询平均成绩大于60分的同学的学号 ...

  4. Python全栈开发之---mysql数据库

    1.数据库的安装和连接 #数据库安装 pip install PyMySQL #数据库操作 import pymysql db = pymysql.connect("数据库ip", ...

  5. SSH或者SSM开发web,mysql数据库,数据库配置文件配置不当~数据库读写数据乱码问题解决办法。

    相信,大家都有遇到过在传入一个中文string,debug自己的每一行代码时,都发现始终是没有乱码的(即:排除了,源码文件的编码格式是没问题的),但是数据进入数据库之后就是乱掉了. 那么很明显问题就出 ...

  6. Java Web程序开发链接MySQL数据库

    显示错误:Access denied for user ''@'localhost' (using password: YES) 保证URL中没有空格 尝试用MySQL本地命令行登陆 显示错误:The ...

  7. MySQL架构设计谈:从开发规范、选型、拆分到减压(转)

    作者介绍 李辉,原新浪爱彩票运维负责人,常用网名:门牙没了.曾主导新浪爱彩票的MySQL运维工作.培训合伙人.资深讲师,中国科学院大学在读研究生(大数据方向),擅长大型项目的关系型数据库运维和管理,现 ...

  8. 关于mysql数据库涉及的一些规范

    tips:如果本文对你有用,请爱心点个赞,提高排名,让这篇文章帮助更多的人.谢谢大家!比心❤~ 如果解决不了,可以在文末加我微信,进群交流. 设计规范,在分工协作的工作场景中尤其重要,否则团队之间互相 ...

  9. MySQL数据库基本规范整理

    此篇文章是学习MySQL技术整理的,不足之处还望指教,不胜感激. 数据库基本规范涉及数据库命名规范.数据库索引设计规范.数据库基本设计规范.数据库字段设计规范.数据库SQL开发规范.数据库操作行为规范 ...

随机推荐

  1. Cogs 763. [USACO Open09] 数字的游戏(博弈)

    [USACO Open09] 数字的游戏 ★☆ 输入文件:cdgame.in 输出文件:cdgame.out 简单对比 时间限制:1 s 内存限制:128 MB Bessie正跟FJ玩一个数字游戏,她 ...

  2. 【MySQL 读书笔记】“order by”是怎么工作的?

    针对排序来说,order by 是我们使用非常频繁的关键字.结合之前我们对索引的了解再来看这篇文章会让我们深刻理解在排序的时候,是如何利用索引来达到少扫描表或者使用外部排序的. 先定义一个表辅助我们后 ...

  3. CAN信号转以太网究竟怎么回事?TCP转CAN又是什么?

    首先说说can总线. can总线是目前工业控制领域应用最广的现场总线,它可以实现远距离信息的传输,是各种设备和各类功能部件之间传送信息的公用通道,它是由导线组成的传输线束,用于连接体统中的各个节点,传 ...

  4. Leet Code 771.宝石与石头

    Leet Code编程题 希望能从现在开始,有空就做一些题,自己的编程能力太差了. 771 宝石与石头 简单题 应该用集合来做 给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头. S  ...

  5. JavaScript data types and data structures

    JavaScript data types and data structures Programming languages all have built-in data structures, b ...

  6. 清理Windows.edb

    解决Windows.edb文件巨大的windows 10问题的另一个快速解决方法是删除Windows.edb文件. 步骤1:在任务管理器中终止SearchIndexer.exe --按Ctrl + A ...

  7. Javascript/CSS/HTML/vue/angularJS/react/jquery/DOM前端编程经典电子书pdf下载

    高级进阶必读 你所不知道的系列,高级开发必掌握. JavaScript这门语言简单易用,很容易上手,但其语言机制复杂微妙,即使是经验丰富的JavaScript开发人员,如果没有认真学习的话也无法真正理 ...

  8. Javascript事件派发-dispatchEvent

    事件派发的作用: 1.派发数据,将一个封闭模块中的数据传递给另一个封闭模块.2.事件完成了较为复杂的解耦. 事件和回调函数不同在于: 1.事件可以在任意地方去获取,而回调函数只能在一个地方存在,如果需 ...

  9. pip install失败报错解决方案

    cmd pip install 某些包时报错 pip install Consider using the `--user` option or check the permissions. 只需要p ...

  10. for(auto i : v)遍历容器元素

    c++11的新特性,v是一个可遍历的容器或流,比如vector类型,i就用来在遍历过程中获得容器里的每一个元素. for(auto i:v) for(auto &i:v) 代码1:#inclu ...