数据库规范
Forge 使用 MySQL 8.0+ 作为主数据库。你在设计新表或修改字段时,必须遵循以下规范。
表命名
| 前缀 | 用途 | 示例 |
|---|---|---|
sys_ | 系统管理表 | sys_user、sys_role、sys_dict_type |
biz_ | 业务数据表 | biz_order、biz_contract |
act_ | Flowable 引擎表(框架管理) | act_ru_task |
forge_ | 框架内部表 | forge_schema_history |
必备字段
所有业务表必须包含以下字段:
| 字段 | 类型 | 说明 |
|---|---|---|
id | bigint | 主键 |
tenant_id | bigint | 租户 ID,默认 1 |
create_by | bigint | 创建人 |
create_time | datetime | 创建时间 |
create_dept | bigint | 创建部门 |
update_by | bigint | 更新人 |
update_time | datetime | 更新时间 |
del_flag | bigint | 逻辑删除标记,0 未删除 |
建表示例:
sql
CREATE TABLE IF NOT EXISTS biz_order (
id BIGINT NOT NULL COMMENT '主键',
tenant_id BIGINT NOT NULL DEFAULT 1 COMMENT '租户ID',
order_no VARCHAR(64) NOT NULL COMMENT '订单号',
amount BIGINT NOT NULL DEFAULT 0 COMMENT '金额(分)',
status VARCHAR(20) NOT NULL DEFAULT '0' COMMENT '状态',
create_by BIGINT NULL COMMENT '创建人',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
create_dept BIGINT NULL COMMENT '创建部门',
update_by BIGINT NULL COMMENT '更新人',
update_time DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
del_flag BIGINT NOT NULL DEFAULT 0 COMMENT '逻辑删除',
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单表';字段类型选择
| 业务场景 | 推荐类型 | 说明 |
|---|---|---|
| 金额 | BIGINT | 单位分,禁止用 float/double |
| 时间 | DATETIME | 不用 timestamp |
| 状态 | VARCHAR(20) | 字典值 |
| 布尔 | TINYINT | 0/1 |
| 主键 | BIGINT | 雪花算法生成 |
| 长文本 | TEXT | 不用 LONGTEXT |
| 唯一编码 | VARCHAR(64) | 不用 int 自增 |
字符集与引擎
- 字符集:
utf8mb4 - 排序规则:
utf8mb4_general_ci - 存储引擎:
InnoDB
索引规范
| 索引类型 | 命名 | 说明 |
|---|---|---|
| 普通索引 | idx_字段名 | idx_create_time |
| 唯一索引 | uk_字段名 | uk_tenant_order_no |
| 联合索引 | idx_字段1_字段2 | idx_tenant_status |
唯一索引必须包含 tenant_id 和 del_flag:
sql
CREATE UNIQUE INDEX uk_tenant_order_no
ON biz_order(tenant_id, order_no, del_flag);禁止事项
- 禁止使用外键约束
- 禁止使用存储过程
- 禁止使用数据库触发器
- 禁止使用
SELECT *,必须显式指定字段 - 禁止在表中存储密码明文
