07-数据库规范.md 3.3 KB

07-数据库规范

概述

本规范基于项目现有代码实现,规定了数据库设计、表结构、字段命名、数据类型映射等相关规范。所有规范必须与现有代码保持一致,不得引入未实现的设想。

数据库选择

  • 使用 MySQL 数据库。
  • 连接配置支持 HikariCP 连接池。
  • 启用 map-underscore-to-camel-case 配置,实现数据库下划线字段与 Java 驼峰属性自动映射。

表命名规范

  • 表名采用小写字母,以 t_ 开头,后跟模块名和实体名,使用下划线分隔单词。
  • 示例:t_user_infot_user_token

字段命名规范

  • 字段名采用小写字母,使用下划线分隔单词,与 Java 属性驼峰命名对应。
  • 示例:user_idcreate_timewx_openid

主键规范

  • 所有表使用 id 作为主键字段,类型为 BIGINT
  • 使用 MyBatis-Plus 的 ASSIGN_ID 策略(雪花算法生成 ID)。
  • 在实体类中使用 @TableId(value = "id", type = IdType.ASSIGN_ID) 注解。

公共字段规范

  • 所有实体类继承 BaseEntity,包含以下公共字段:
    • id:主键,BIGINT
    • version:乐观锁版本号,INT,默认值为 0。
    • create_user:创建者 ID,BIGINT
    • create_time:创建时间,DATETIME
    • update_user:更新者 ID,BIGINT
    • update_time:更新时间,DATETIME
  • 公共字段通过 @TableField 注解指定字段名和填充策略。

自动填充规范

  • 使用 CustomMetaObjectHandler 实现自动填充。
  • 插入时自动填充:create_timeupdate_timecreate_userupdate_user
  • 更新时自动填充:update_timeupdate_user
  • 默认创建者和更新者 ID 为 1(后续可从安全上下文中获取)。

乐观锁规范

  • 使用 version 字段实现乐观锁。
  • 在实体类中使用 @Version 注解。
  • 配置 OptimisticLockerInnerInterceptor 插件。

枚举处理规范

  • 枚举类使用 @EnumValue 注解标记存储值。
  • 自定义 TypeHandler 处理枚举与数据库的映射。
  • 枚举存储为 INT 类型,使用 code 值存储。
  • 示例:Gender 枚举存储为 1(男)、2(女)。

数据类型映射

  • 遵循 MyBatis-Plus 默认映射规则。
  • 字符串类型:VARCHAR
  • 整数类型:INTBIGINT
  • 日期时间:DATETIME,使用 LocalDateTime
  • 布尔类型:根据需要映射为 TINYINTBIT

Mapper 规范

  • Mapper 接口继承 BaseMapper<T>
  • 使用 @Mapper 注解标记。
  • 示例:

    @Mapper
    public interface UserInfoMapper extends BaseMapper<UserInfo> {
    }
    

索引规范

  • 根据查询需求添加适当索引。
  • 主键自动创建索引。
  • 外键字段建议添加索引。

约束规范

  • 根据业务需求添加必要的约束,如唯一约束、非空约束等。
  • 外键约束根据需要添加,但需注意性能影响。

数据迁移

  • 使用 Flyway 或 Liquibase 等工具进行数据迁移(若有实现)。
  • 迁移脚本命名规范:V{version}__{description}.sql

注意事项

  • 所有规范基于现有代码实现,不得引入未实现的特性。
  • 数据库设计应遵循第三范式(3NF),但可根据性能需求适当冗余。
  • 定期备份数据库,确保数据安全。