mysql规范

821 阅读2分钟
  • 存储引擎与字符集
    • 使用INNODB作为存储引擎 --- 支持事务、行锁外键,redo log
    • 表字符集使用utf8mb4,排序规则使用utf8mb4_unicode_ci
  • 注释
    • 表注释 -- 标明用途/负责人/创建日期
    • 字段注释 -- 标明用途/说明/负责人/创建日期
    • 关联字段 -- 标明作为那张表的外键
    • 表/字段废弃 -- 标明废弃时间
  • 命名规范
    • 数据库的库名、表名、字段名都要为小写
    • 数据库的库名、标明、字段名应该为字母和下划线的组合
    • 库名、表名、字段名的长度限制在30个字符以内,超过长度限制时,应该使用缩写减少长度
    • 数据库的表名必须使用名词单数形式
    • 库名、表名、字段名必须为有意义的单词或单词缩写,能直观反馈给读者以便理解对应业务
    • 若库名、表名、字段名由多个单词组成,单词用下划线_进行连接
    • 库名、表名、字段名禁止使用 MySQL 保留字 -- 个人觉得这点待商议,比如name,这类就不好处理了
    • 字段名一般采用名词或动宾短语,如:user_id,is_friend
    • 字段名,不要重复表的名称,如employe的表中避免使用名为employee_lastname的字段,直接写lastname即可
    • 同一个业务模块的数据库表名应当取一个达成共识的表前缀,如优惠券模块discount_
  • 修改规范和属性规范
    • 主键和外键在不同表的长度和类型应该要保持一致
    • 表必须定义主键,主键默认为ID
    • 表必须包含记录创建时间created_at(timestamp)和修改时间的字段updated_at(timestamp)
    • 禁止修改created_at
    • 一个字段禁止承担多项职能
    • 禁止使用Eunm枚举类型
    • 时间类型使用timestamp(推荐)datetime
    • 同财务相关的金额类数据必须使用decimalint类型,禁止使用floatdouble类型
    • 每个字段必须有默认值,尽可能将所有列都设为Not Null,节省空间
    • varchar长度设计需要根据业务实际需要进行长度控制,禁止预留过长空间。
  • 表数据量
    • 建议在5000w以内
  • 索引规范
    • 索引数量
      • 单张表中索引数量不超过7个
      • 单个索引中的字段数不超过5个
    • 主键原则
      • 不使用更新频繁的列作为主键