Skip to content

数据库规范 ​

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

必备字段 ​

所有业务表必须包含以下字段:

字段类型说明
idbigint主键
tenant_idbigint租户 ID,默认 1
create_bybigint创建人
create_timedatetime创建时间
create_deptbigint创建部门
update_bybigint更新人
update_timedatetime更新时间
del_flagbigint逻辑删除标记,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 COLLATE=utf8mb4_0900_ai_ci COMMENT='订单表';

字段类型选择 ​

业务场景推荐类型说明
金额BIGINT单位分,禁止用 float/double
时间DATETIME不用 timestamp
状态VARCHAR(20)字典值
布尔TINYINT0/1
主键BIGINT雪花算法生成
长文本TEXT不用 LONGTEXT
唯一编码VARCHAR(64)不用 int 自增

字符集与引擎 ​

  • 字符集:utf8mb4
  • 排序规则:utf8mb4_0900_ai_ci
  • 存储引擎:InnoDB

数据库以及使用 utf8mb4 的正式表、临时表和业务字符串列必须使用同一排序规则。禁止混用 utf8mb4_unicode_ci、utf8mb4_general_ci 和 utf8mb4_0900_ai_ci,否则字符串列执行 =、JOIN 或 NOT EXISTS 比较时可能报 Illegal mix of collations。哈希、令牌等只保存 ASCII 的安全字段可以显式使用 ascii_bin。

索引规范 ​

索引类型命名说明
普通索引idx_字段名idx_create_time
唯一索引uk_字段名uk_tenant_order_no
联合索引idx_字段1_字段2idx_tenant_status

唯一索引必须包含 tenant_id 和 del_flag:

sql
CREATE UNIQUE INDEX uk_tenant_order_no
ON biz_order(tenant_id, order_no, del_flag);

禁止事项 ​

  • 禁止使用外键约束
  • 禁止使用存储过程
  • 禁止使用数据库触发器
  • 禁止使用 SELECT *,必须显式指定字段
  • 禁止在表中存储密码明文