sql规范

来源:互联网 发布:小米盒子软件大全 编辑:程序博客网 时间:2024/06/05 07:23

命名规范

  • 库名、表名、字段名必须使用小写字母,并采用下划线分割
  • 库名、表名、字段名禁止超过32个字符(如必须超过请给出理由),须见名之意
  • 库名、表名、字段名禁止使用MySQL保留字
  • 临时库、表名必须以tmp为前缀,并以日期为后缀
  • 备份库、表必须以bak为前缀,并以日期为后缀

基础规范

  • 使用INNODB存储引擎
  • 表字符集使用UTF8
  • 数据表和关键字段需要添加注释
  • 单表数据量建议控制在5000W以内
  • 不在数据库中存储图片、文件等大数据(如确实需要请发起评审)

库表设计

  • 拆分大字段和访问频率低的字段,分离冷热数据
  • 当有分库、分表需求时,具体方案需先发起评审

字段设计

  • 按需选择数值类型,例如使用BIGINT存储品牌id明显是不合理的
  • 不使用TEXT、BLOB类型,除非给出明确的理由
  • 不使用FLOAT和DOUBLE存储需要精确计算的浮点数,可使用DECIMAL或INT代替。
  • 使用TINYINT来代替ENUM类型
  • 时间使用TIMESTAMP类型(不要使用DATETIME)

索引规范

  • 主键规则
  1. 表必须有主键
  2. 不使用更新频繁的列
  3. 尽量不选择字符串列
  4. 不使用UUID MD5 HASH
  5. 默认使用非空的唯一键
  • 重要的SQL必须被索引
  1. UPDATE、DELETE语句的WHERE条件列
  2. ORDER BY、GROUP BY、DISTINCT的字段
  3. 多表JOIN的字段
  • 核心SQL优先考虑覆盖索引(http://blog.chinaunix.net/uid-24111901-id-2627880.html)
  • 索引不是越多越好,单张表中索引数量不超过5个,单个索引中的字段数不超过5个
  • 对字符串使用前缀索引,在保证较高选择性的前提下应尽可能短
  • 对于联合索引,选择性最大的字段放在前面
  • 不在索引列进行数学运算和函数运算

SQL设计

  • 使用预编译语句,防止SQL注入攻击
  • 避免使用外键、存储过程、触发器等,这些应交给应用来做,利于水平扩展
  • 尽量避免大表的JOIN,可考虑通过数据冗余或应用缓存的方式解决
  • 数据库异常不要在model层捕获,而是抛给controller层根据业务需求进行不同处理

禁忌

  • 禁止在数据库中存放明文密码
  • 避免select非必要字段,节省CPU和带宽开销
  • UPDATE、DELETE语句不使用LIMIT
0 0
原创粉丝点击