Skip to content

数据库规范

适用于 youlai 所有后端实现(Java / Node / Go / Python),主要参考《阿里巴巴开发手册》与企业级系统最佳实践。

1. 总体原则

  • 表结构优先服务于“可维护性 + 可演进性”,避免过度设计。
  • 关键字段必须可追踪(创建/更新)、可审计(创建人/更新人,可选)。
  • 统一命名风格与索引命名,降低跨语言/跨团队协作成本。

2. 必备字段(所有业务表必须包含)

字段类型建议约束说明
idBIGINT UNSIGNEDPK, NOT NULL主键,建议雪花/自增(环境可选)
create_timeDATETIMENOT NULL创建时间,默认 CURRENT_TIMESTAMP
update_timeDATETIMENOT NULL更新时间,默认 CURRENT_TIMESTAMP,建议 ON UPDATE CURRENT_TIMESTAMP

推荐公共字段(按需启用):

字段类型建议约束说明
create_byBIGINT UNSIGNEDNULL创建人 ID
update_byBIGINT UNSIGNEDNULL更新人 ID
is_deletedTINYINT(1)NOT NULL, DEFAULT 0逻辑删除:0 未删 / 1 已删

3. ID 策略与传输规范

  • 数据库层:主键/外键统一使用 BIGINT UNSIGNED(容量与性能更稳定)。
  • 接口层:所有对前端暴露的 ID 字段统一使用字符串表示,避免精度丢失。
    • 示例:"id": "123456789012345678"
  • 前端:不得对 ID 做数值运算,仅用于比对、展示、回传。

4. 命名约定

  • 表名:小写下划线,建议业务域前缀(如 sys_user / sys_role)。
  • 字段名:小写下划线,语义明确,禁止缩写堆叠。
  • 主键:统一 id
  • 外键:统一 {biz}_id(如 user_id / dept_id / role_id)。
  • 时间字段:统一 create_time / update_time
  • 布尔/开关:统一使用 TINYINT(1),字段名建议 is_xxxxxx_flag(择一并保持一致)。

5. 索引规范(命名必须统一)

  • 普通索引:统一使用 idx_ 前缀,格式:idx_{table}_{column1}_{column2}
    • 示例:idx_sys_user_dept_ididx_sys_user_create_time
  • 唯一索引:统一使用 uk_ 前缀,格式:uk_{table}_{biz_key}
    • 示例:uk_sys_user_usernameuk_sys_dict_dict_code

索引设计建议:

  • 以查询条件为导向建立索引,避免“全字段索引”。
  • 组合索引遵循最左前缀原则,字段顺序以过滤性(选择性)优先。

6. 字段类型与字符集

  • 字符集:统一 utf8mb4
  • 长文本:优先 TEXT/LONGTEXT,避免超大 VARCHAR
  • 金额:使用 DECIMAL(p,s),禁止用 FLOAT/DOUBLE
  • 状态枚举:使用 TINYINT/SMALLINT,并在表/字段注释中定义取值语义。

7. 逻辑删除(如启用)

  • 逻辑删除字段统一:is_deleted
  • 所有查询必须默认过滤 is_deleted = 0(通过 ORM 全局过滤/基础查询封装实现)。

本规范适用于 所有后端模块 的数据库建模与接口设计:新表/新字段必须遵守;旧表在重构或需求改动时优先向本规范靠拢。

基于 MIT 许可发布