# SQL开发规范

  1. 每张表需加注释 - 工具可直接生成

  2. 表名使用蛇形命名方式

  3. 每张表必须有主键,尽量使用单字段主键

  4. 建议数据删除用软删

  5. 每个table加上created_at 、updated_at、deleted_at,以便于查找问题

  6. 操作多条数据必须加上事务以保证数据的完整性

  7. 不建议使用外键,外键会增加表结构变更和数据迁移的复杂性,新增时会增加主外键约束检查而影响性能,数据完整性由程序控制

  8. 禁止在数据库做复杂的计算

  9. 查询大量数据必须使用分页,在明确知道数据量小的情况下才能全量查询

  10. 尽量避免使用or,对于or运算符,通常会使用全表扫描,考虑用分解查询使用union all / union 来实现,需要确认查询能使用到索引并返回较少的结果集

  11. 限制使用join,单个语句不超过5个,join会降低性能

  12. 禁止应用程序循环里面带有数据库操作,在能确定循环次数少的情况下才可使用

  13. 不建议使用视图,视图并没有提高查询效率

  • 字段
  1. 字段名使用蛇形命名

  2. 布尔字段建议用 is_ 、has_、does_ 开头,日期字段以 _date 结尾 ,日期+时间格式字段以 _at 结尾

  3. 每个字段需加注释 - 工具可直接生成

  4. 相同字段在不同的table里命名需要统一,类型也统一

  5. 表字段默认值尽量避免使用null,因为使用NULL值会存在每一行都会占用额外存储空间、数据迁移容易出错、聚合函数计算结果偏差等问题

  6. json或者jsonb字段,数据量大的情况下 建议拆分出来存放在另外一张table

  • 索引
  1. 索引命名规范,主键索引pk_开头,唯一索引 uk_ 开头,普通索引 idx_ 开头

  2. 对where后面的条件经常使用的列需要增加索引

  3. 单表索引数不超过6个

  4. 索引包含的字段不超过5个

  5. 不适合创建索引的字段 比如 性别,值为0/1 或者 true/false

  6. 禁止在索引列上使用函数或计算

  7. 禁止查询指定索引

  • 版本更新
  1. 开发人员在开发时记录需要更改的SQL语句,在测试环境上使用后确保语句执行没问题

  2. 版本更新时,开发人员把执行的SQL语句发给运维人员

  3. 运维人员根据SQL语句执行线上数据库更新,并把执行后的SQL语句在服务器上存档

最后更新时间: 11/25/2021, 8:40:18 AM