数据库规范

安全规范

  • 数据库配置需要严格区分环境,development/staging/production
  • 禁止通过公网IP连接,只支持内网连接
  • 不使用超管账户做数据库链接
  • 给业务隔离的不同数据库,创建不同的数据库用户
  • 创建指定的只读和读写账户

设计规范

  • 指定数据引擎,INNODB
  • 禁用外键,数据完整性约束交由程序逻辑实现
  • 指定字符集,utf8mb4
  • 数据表必须指明主键
Innodb中的每张表都会有一个聚集索引【不设置主键的情况下,innodb会以非可见的系统默认的主键---row_id(6个字节长)作为聚簇索引,该值不规则,且范围巨大,造成数据频繁分页】,而聚集索引又是以物理磁盘顺序来存储的,自增主键会把数据自动向后插入,避免了插入过程中的聚集索引排序问题。聚集索引的排序,必然会带来大范围的数据的物理移动,这里面带来的磁盘IO性能损耗是非常大的。

 而如果聚集索引上的值可以改动的话,那么也会触发物理磁盘上的移动,于是就可能出现page分裂,表碎片横生 
主键递增,数据行写入可以提高插入性能,可以避免page分裂,减少表碎片提升空间和内存的使用

主键要选择较短的数据类型,Innodb引擎普通索引都会保存主键的值,较短的数据类型可以有效的减少索引的磁盘空间,提高索引的缓存效率

无主键的表删除,在row模式的主从架构,会导致备库夯住
  • 数据表列/字段,不要过大,适当的时候做表垂直拆分
  • 数据表、字段必须加入中文注释
  • 禁止使用浮点型,货币分/比率
  • 字段定位为not null
  • 字段有默认值时,需要设定默认值,default 默认值
  • 字段不使用枚举类型,用tinyint,方便扩展
  • 禁止存储文件字节流,文件数据,直接储存url地址
  • 禁止使用数据库保留字段做数据表字段
  • 数据表字段,禁止使用中文拼写
  • 数据表字段,禁止过程,不要超过三个单词

查询规范

  • 禁止大表join查询/自查询
  • 禁止使用负向查询以及%开头的模糊查询,not in/!=/not like
  • 禁止select *,必须指明需要查询的字段
  • 禁止在连表查询中,不指明字段所属的表名
  • 禁止隐式转换,避免缓存无法命中
  • 禁止查询过程中,使用函数/表达式 ,避免导致全表扫描

其他规范

  • 禁止insert语句,不指定字段【insert into table values(x)】

Leave Comment

电子邮件地址不会被公开。 必填项已用*标注