Skip to content

数据库规范

  • 规范:数据库规范-强制执行
  • 行业默认的强规范将不列举在其中。若多次触犯,才考虑添加在此规范中,必要时将上线规范检查工具,强制规范检查。

字符集

  • 规范:
    • 数据表,字段统一使用 utf8mb4_unicode_ci
    • 若需要区分大小写,可选使用 utf8mb4_unicode_cs
  • 不遵守的后果
    • 字符集不一致,无法使用 = (等号)操作符
    • 字符集兼容度不够导致特殊字符无法存储

命名

  • 规范
    • 表,字段命名需要望文生义,减少文档查阅
    • 命名法:蛇形命名法(snake case),示例: aaa_bbb_ccc
    • 开头和结尾不允许出现 _
    • 不允许出现单字母
    • 避免使用 is_ 开头。此类命名可能会被 java 反射误解
    • 布尔类命名,必需使用正向含义,值将存储 1是0否,避免产生误解
    • 多模块系统,表名按模块统一添加前缀,前缀建议 2~4个字母
    • 字段名不建议使用前缀。字段名请避开 mysql 关键字
  • 不遵守的后果
    • 代码生成工具/框架无法准确映射为实体对象,功能开发需要花费大量人力解决映射问题
    • 首尾出现 _ 无法转换为驼峰命名法,或转换之后容易误解,也可能导致代码处理异常

基础字段

  • 基础字段:
    • ID (id), 此字段必需在首位,下述的其他字段均放在表的最后。
    • 排序(sort)
    • 创建时间(create_time)
    • 创建人(create_by)
    • 修改时间(update_time)
    • 修改人(update_by)
    • 备注(comments)
    • 版本号(version)
  • 要点
    • 基础字段必需全局一致,其他字段不可冲突

其他规范

  • 其他规范将作为上述列表规范的补充
序号规范名规范说明
1ID必须定义主键,默认为ID,整型自增(如果有特殊情况,可商讨后自定义)
2外键禁止使用外键,一切外键概念必须在应用层解决
3小数小数类型用decimal(禁止使用float和double),如果存储的数据范围超过decimal的范围,建议将数据拆成整数和小数分开存储
4备注表和字段都要有明确的注释,当定义有修改时,要及时修改注释信息
5长度varchar长度设计需要根据业务实际需要进行长度控制,可适度预留,禁止预留过长空间,防止后续无法扩充字段
6索引积极添加索引,适时使用联合索引。索引字段必不能为 null
7列含义多表中的相同列,必须保证列定义一致
  • 业务增长后的一些考虑
方案场景
数据归档大量冷数据场景,可使用归档方式解决数据量大的问题
分库分表若业务数据量庞大,系统不便于拆分,同时有明确的分库/分表条件,可使用分库分表解决
更换存储方案若数据无强事务要求,数据量庞大,需要考虑 ES, PG, Mongoo 等存储方案

查询规范

  • 大量数据查询,必需使用分页。数据量大到无法控制时,需要考虑 id 偏移方式翻页
  • 复杂 sql 必需 explain 评估后再执行/上线
  • List 查询避免 blob、text 等字段查询

注入风险管理强制

  • 原则:注入风险管理强制-强制
  • 说明:防止一切注入风险:
    1. 【重要】orderBy 中使用 ${}。必需使用 setOrderBy 传入,已经添加风险控制
    2. MBG 的 noValue,singleValue,betweenValue,listValue 注入风险:Example 的 Criteria 产生,无注入风险
    3. MBG 的 like 注入风险:like 前的由 Example 控制,后的为 #{}, 无注入风险
    4. 【重要】Custom 实现的 like 强制使用 AND column like concat("%",#{value},"%")

Released under the MIT License.