数据库规范[转载]

2018-11-21  本文已影响0人  霜序五

适用场景:并发量大、数据量大的互联网业务
解读:讲解原因,解读比规则更重要--转载

一、基础规范

  1. 必须使用 InnoDB 存储引擎
  1. 必须使用UTF8 字符集
  1. 数据表、数据字段必须加入中文注释
  1. 禁止使用存储过程、视图、触发器、Event
  1. 禁止存储大文件或者大照片

二、命名规范

  1. 只允许使用内网域名,而不是 IP 连接数据库
  1. 库名、表名、字段名:小写,下划线风格,不超过 32 个字符,必须见名知意,禁止拼音英文混用

三、表设计规范

  1. 单表列数目必须小于 30
  1. 表必须有主键,例如自增主键
  1. 禁止使用外键,如果有外键完整性约束,需要应用程序控制

四、字段设计规范

  1. 必须把字段定义为 NOT NULL 并且提供默认值
  1. 禁止使用 TEXTBLOB 类型
  1. 禁止使用小数存储货币
  1. 必须使用 varchar(20) 存储手机号
  1. 禁止使用ENUM,可使用TINYINT 代替

五、索引设计规范

  1. 单表索引建议控制在 5 个以内
  1. 禁止在更新十分频繁、区分度不高的属性上建立索引
  1. 建立组合索引,必须把区分度高的字段放在前面

六、SQL 使用规范

  1. 禁止使用 SELECT *,只获取必要的字段,需要显示说明列属性
  1. 禁止使用 INSERT INTO xxx VALUES(xxx),必须显示指定插入的列属性
  1. 禁止使用属性隐式转换:
  1. 禁止在 WHERE 条件的属性上使用函数或者表达式
SELECT uid FROM t_user WHERE from_unixtime(day)>='2017-02-15'

上面的代码会导致全表扫描,正确的写法是:

SELECT uid FROM t_user WHERE day>= unix_timestamp('2017-02-15 00:00:00')
  1. 禁止负向查询,以及%开头的模糊查询
  1. 禁止大表使用 JOIN 查询,禁止大表使用子查询
  1. 禁止使用OR 条件,必须改为IN 查询
  1. 应用程序必须捕获SQL 异常,并有相应处理
上一篇 下一篇

猜你喜欢

热点阅读