# SQL开发规范
- 表
每张表需加注释 - 工具可直接生成
表名使用蛇形命名方式
每张表必须有主键,尽量使用单字段主键
建议数据删除用软删
每个table加上created_at 、updated_at、deleted_at,以便于查找问题
操作多条数据必须加上事务以保证数据的完整性
不建议使用外键,外键会增加表结构变更和数据迁移的复杂性,新增时会增加主外键约束检查而影响性能,数据完整性由程序控制
禁止在数据库做复杂的计算
查询大量数据必须使用分页,在明确知道数据量小的情况下才能全量查询
尽量避免使用or,对于or运算符,通常会使用全表扫描,考虑用分解查询使用union all / union 来实现,需要确认查询能使用到索引并返回较少的结果集
限制使用join,单个语句不超过5个,join会降低性能
禁止应用程序循环里面带有数据库操作,在能确定循环次数少的情况下才可使用
不建议使用视图,视图并没有提高查询效率
- 字段
字段名使用蛇形命名
布尔字段建议用 is_ 、has_、does_ 开头,日期字段以 _date 结尾 ,日期+时间格式字段以 _at 结尾
每个字段需加注释 - 工具可直接生成
相同字段在不同的table里命名需要统一,类型也统一
表字段默认值尽量避免使用null,因为使用NULL值会存在每一行都会占用额外存储空间、数据迁移容易出错、聚合函数计算结果偏差等问题
json或者jsonb字段,数据量大的情况下 建议拆分出来存放在另外一张table
- 索引
索引命名规范,主键索引pk_开头,唯一索引 uk_ 开头,普通索引 idx_ 开头
对where后面的条件经常使用的列需要增加索引
单表索引数不超过6个
索引包含的字段不超过5个
不适合创建索引的字段 比如 性别,值为0/1 或者 true/false
禁止在索引列上使用函数或计算
禁止查询指定索引
- 版本更新
开发人员在开发时记录需要更改的SQL语句,在测试环境上使用后确保语句执行没问题
版本更新时,开发人员把执行的SQL语句发给运维人员
运维人员根据SQL语句执行线上数据库更新,并把执行后的SQL语句在服务器上存档