谈谈MySQL数据库中那些规范

597 阅读3分钟

本文正在参加「技术专题19期 漫谈数据库技术」活动

作为一名后端开发程序员,我们离不开与数据库打交道,最近也在做项目,遇到很多数据库上的设计问题,故整理下来与大家分享。

命名规范

表名

  • 使用小写字母、数字、下划线,不能以数字开头,不能在两个下划线之间只出现数字

  • 可读性高(使用英文,尽量不使用缩写,避免使用拼音),使用 业务名称_表的作用 形式命名

  • 不使用复数名词(表名应该表示表中的实体内容,而不应该表示实体的数量,对应的实体类名也应使用单数形式)

字段名

  • 使用小写字母、数字、下划线,不能以数字开头,不能在两个下划线之间只出现数字

  • 对于表达是与否的字段,使用 is_xxx 的形式命名,数据类型应为 unsigned tinyint,对应实体类的属性不应该添加 is 前缀,通过设置映射关系解决。

索引名

  • 主键索引名使用 pk_字段名

  • 唯一索引名使用 uk_字段名

  • 普通索引名使用 idx_字段名

字段规范

  • 每个表必须具有 id,create_time,update_time 字段。id为主键,类型为 unsigned bigint,单表时自增,步长为1; create_time,update_time为 datetime 类型。

  • 尽可能选择存储空间小的字段类型。 tinyint、smallint、int、bigint。

  • 如果需要存储的字符串长度几乎相等,使用 char 定长字符串类型。

  • varchar 长度不要超过5000,如果存储长度大于此值,定义字段类型为 text,独立出来一张表,用主键来对应,避免影响其它字段索引效率。

  • 小数类型使用decimal。float和double存在精度损失的问题。

  • 尽可能使用 not null 定义字段,可防止出现空指针问题,NULL 值也可能导致索引失效。

索引规范

  • 对于索引字段,不使用左模糊或全模糊查询,防止索引失效。索引文件具有最左前缀匹配原则,如果左边的值未确定,则无法使用索引。

  • 建立组合索引时,区分度最高的字段在最左边

  • 业务上具有唯一特性的字段,即使是组合字段,也要建成唯一索引。

  • 在 varchar 字段上建立索引时,必须指定索引长度,根据实际字符串区分度决定索引长度。

使用explain命令对SQL进行性能优化时,type 要求是ref级别,至少要达到range级别,最好是consts级别。

  • range:对索引进行范围检索
  • ref:使用了普通索引
  • consts:使用了主键或者唯一索引

SQL语句规范

  • 不要使用count(列名)或count(1)代替count( * )。 count( * )是 SQL92 定义的标 准统计行数的语法,跟数据库无关,跟 NULL 和非 NULL 无关。

  • 使用ISNULL()判断是否为NULL值。(NULL与任何值的直接比较结果都是NULL)

  • 不要使用外键和级联,外键概念由应用层解决

  • 不要使用存储过程,存储过程难以调试和扩展

  • 涉及多个表时,都需要在字段前加表的别名进行限定

  • 表的别名前加 as ,并以t1、t2、t3...的顺序依次命名