数据库规范
适用于 youlai 所有后端实现(Java / Node / Go / Python / PHP / .NET),主要参考《阿里巴巴开发手册》与企业级系统最佳实践。
1. 总体原则
- 表结构优先服务于"可维护性 + 可演进性",避免过度设计。
- 关键字段必须可追踪(创建/更新)、可审计(创建人/更新人,可选)。
- 统一命名风格与索引命名,降低跨语言/跨团队协作成本。
2. 必备字段(所有业务表必须包含)
| 字段 | 类型建议 | 约束 | 说明 |
|---|---|---|---|
id | BIGINT UNSIGNED | PK, NOT NULL | 主键,建议雪花/自增(环境可选) |
create_time | DATETIME | NOT NULL | 创建时间,默认 CURRENT_TIMESTAMP |
update_time | DATETIME | NOT NULL | 更新时间,默认 CURRENT_TIMESTAMP,建议 ON UPDATE CURRENT_TIMESTAMP |
推荐公共字段(按需启用):
| 字段 | 类型建议 | 约束 | 说明 |
|---|---|---|---|
create_by | BIGINT UNSIGNED | NULL | 创建人 ID |
update_by | BIGINT UNSIGNED | NULL | 更新人 ID |
is_deleted | TINYINT(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_xxx或xxx_flag(择一并保持一致)。
5. 索引规范(命名必须统一)
- 普通索引:统一使用
idx_前缀,格式:idx_{table}_{column1}_{column2}- 示例:
idx_sys_user_dept_id、idx_sys_user_create_time
- 示例:
- 唯一索引:统一使用
uk_前缀,格式:uk_{table}_{biz_key}- 示例:
uk_sys_user_username、uk_sys_dict_dict_code
- 示例:
索引设计建议:
- 以查询条件为导向建立索引,避免"全字段索引"。
- 组合索引遵循最左前缀原则,字段顺序以过滤性(选择性)优先。
6. 字段类型与字符集
- 字符集:统一
utf8mb4。 - 长文本:优先
TEXT/LONGTEXT,避免超大VARCHAR。 - 金额:使用
DECIMAL(p,s),禁止用FLOAT/DOUBLE。 - 状态枚举:使用
TINYINT/SMALLINT,并在表/字段注释中定义取值语义。
7. 逻辑删除(如启用)
- 逻辑删除字段统一:
is_deleted。 - 所有查询必须默认过滤
is_deleted = 0(通过 ORM 全局过滤/基础查询封装实现)。
本规范适用于 所有后端模块 的数据库建模与接口设计:新表/新字段必须遵守;旧表在重构或需求改动时优先向本规范靠拢。
