1、 表设计类数据库
强制类规范函数
1. 建立表的存储引擎必须是InnoDB。设计
2. 每一个表必须显式的指定一个主键。日志
3. 不容许使用联合主键。对象
4. 不容许使用外键。排序
5. 不容许存在和主键重复的索引。索引
6. 自增加字段必须是主键或惟一索引。图片
7. 不容许在数据库中存储诸如图片,影像之类的二进制数据。it
8. 不容许使用TEXT类型字段table
9. 建表时不容许显式的指定除了utf8以外的其余字符集。
10. 对于全部声明为NOT NULL的字段,必须显式指定默认值。
11. 必须包含时间戳字段DataChange_LastTime,定义默认值为CURRENT_TIMESTAMP和on update CURRENT_TIMESTAMP,并添加索引。
12.不要使用系统或者常见的名称做为表名 如order
建议类规范
1. 建议使用自增加字段做为主键。
2. 对较长的字符类型,若是须要索引,则创建前缀索引。
3. 不建议在数据库存放日志。
4. 建议将字段都定义为not null。
5. 选用能知足需求的最小类型。
6. 避免使用保留字命名DB对象。
7. 对表和字段都添加备注说明。
2、 SQL类
强制类规范
1. 禁止使用子查询。
2. 禁止使用select *,必须指定须要的字段。
3. update/delete只能单表操做,不容许多表关联,不容许用子查询,且必定要带where条件。
4. insert语句要显式指定插入的列名,且不容许使用insert .... select的形式。
5. 不容许使用存储过程、存储函数、触发器和视图。
6. 单条查询语句中,不容许出现多于一次的join。
7. 不要在where后的筛选字段上作运算。
建议类规范
1. 尽可能不要在数据库里作运算。
2. 尽可能不要作‘%’前缀模糊查询,如 like '%name'。
3. 不要使用大偏移量的limit分页。
4. 链接MySQL不要设置成autocommit=0。
5. 批量insert语句最好采用bulk insert的方法,如insert into table(xxx) values (xxx),(xxx)。
6. update/delete尽可能根据主键进行操做。
7. 尽可能减小count()的使用,尤为是用来频繁获取全表记录数。
8. 使用group by时,如无排序的需求,建议加order by null。
9. Join中使用的关联字段使用统一数据类型。