209 lines
8.3 KiB
Markdown
209 lines
8.3 KiB
Markdown
# 数据库建表语句生成参考
|
||
|
||
本文档包含 SpringBlade 开源版 MySQL 建表模板与菜单数据 SQL。所有模板均来源于开源工程 `doc/sql/` 下的真实 SQL 脚本。
|
||
|
||
> SpringBlade 开源版仅官方支持 **MySQL**,生成的建表脚本固定为 MySQL 方言。
|
||
|
||
## 目录
|
||
- [一、通用审计字段](#一通用审计字段)
|
||
- [二、字段类型映射表](#二字段类型映射表)
|
||
- [三、MySQL 建表模板](#三mysql-建表模板)
|
||
- [四、菜单 SQL 生成](#四菜单-sql-生成)
|
||
|
||
---
|
||
|
||
## 一、通用审计字段
|
||
|
||
所有继承 `TenantEntity` 或 `BaseEntity` 的业务表都包含以下固定审计字段:
|
||
|
||
| 字段名 | 说明 | Java 类型 | 是否可空 | 默认值 |
|
||
|--------|------|-----------|----------|--------|
|
||
| `id` | 主键(雪花 ID) | Long | NOT NULL | 无 |
|
||
| `tenant_id` | 租户 ID(仅 TenantEntity) | String | NULL | '000000' |
|
||
| `create_user` | 创建人 | Long | NULL | NULL |
|
||
| `create_dept` | 创建部门 | Long | NULL | NULL |
|
||
| `create_time` | 创建时间 | Date | NULL | NULL |
|
||
| `update_user` | 修改人 | Long | NULL | NULL |
|
||
| `update_time` | 修改时间 | Date | NULL | NULL |
|
||
| `status` | 业务状态 | Integer | NULL | 1 |
|
||
| `is_deleted` | 逻辑删除标记 | Integer | NULL | 0 |
|
||
|
||
- **BaseEntity 模式**不包含 `tenant_id` 字段
|
||
- **Raw Serializable 模式**手动定义全部字段(结构相同)
|
||
|
||
---
|
||
|
||
## 二、字段类型映射表
|
||
|
||
### Java 类型 → MySQL 类型映射
|
||
|
||
| Java 类型 | MySQL 类型 | 说明 |
|
||
|-----------|-----------|------|
|
||
| `String` (短) | `varchar(n)` | `n` 为字符数,通常 `varchar(255)` 以内 |
|
||
| `String` (长) | `text` | 超过 255 字符或富文本 |
|
||
| `Integer` | `int` | 32 位整型 |
|
||
| `Long` | `bigint` | 64 位整型(雪花 ID 必须用) |
|
||
| `Double` | `double` | 双精度浮点 |
|
||
| `BigDecimal` | `decimal(m,n)` | 金额、精确数值 |
|
||
| `Date` | `datetime` | 日期 + 时间 |
|
||
| `Boolean` | `tinyint(1)` | 0 = false,1 = true |
|
||
|
||
### 审计字段各字段定义(MySQL)
|
||
|
||
| 字段 | MySQL 定义 |
|
||
|------|-----------|
|
||
| id | `bigint NOT NULL` |
|
||
| tenant_id | `varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '000000'` |
|
||
| create_user | `bigint NULL DEFAULT NULL` |
|
||
| create_dept | `bigint NULL DEFAULT NULL` |
|
||
| create_time | `datetime NULL DEFAULT NULL` |
|
||
| update_user | `bigint NULL DEFAULT NULL` |
|
||
| update_time | `datetime NULL DEFAULT NULL` |
|
||
| status | `int NULL DEFAULT 1` |
|
||
| is_deleted | `int NULL DEFAULT 0` |
|
||
|
||
---
|
||
|
||
## 三、MySQL 建表模板
|
||
|
||
### TenantEntity 模式(多租户业务表)
|
||
|
||
```sql
|
||
SET NAMES utf8mb4;
|
||
SET FOREIGN_KEY_CHECKS = 0;
|
||
|
||
-- ----------------------------
|
||
-- Table structure for blade_{table_name}
|
||
-- ----------------------------
|
||
DROP TABLE IF EXISTS `blade_{table_name}`;
|
||
CREATE TABLE `blade_{table_name}` (
|
||
`id` bigint NOT NULL COMMENT '主键',
|
||
`tenant_id` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '000000' COMMENT '租户ID',
|
||
-- 业务字段
|
||
`{column_name}` {mysql_type} {null_constraint} {default_value} COMMENT '{字段注释}',
|
||
-- 审计字段
|
||
`create_user` bigint NULL DEFAULT NULL COMMENT '创建人',
|
||
`create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
|
||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||
`update_user` bigint NULL DEFAULT NULL COMMENT '修改人',
|
||
`update_time` datetime NULL DEFAULT NULL COMMENT '修改时间',
|
||
`status` int NULL DEFAULT 1 COMMENT '状态',
|
||
`is_deleted` int NULL DEFAULT 0 COMMENT '是否已删除',
|
||
PRIMARY KEY (`id`) USING BTREE
|
||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '{表注释}';
|
||
|
||
SET FOREIGN_KEY_CHECKS = 1;
|
||
```
|
||
|
||
### BaseEntity 模式(跨租户业务表)
|
||
|
||
与 TenantEntity 模板一致,**仅删除 `tenant_id` 这一行**:
|
||
|
||
```sql
|
||
SET NAMES utf8mb4;
|
||
SET FOREIGN_KEY_CHECKS = 0;
|
||
|
||
DROP TABLE IF EXISTS `blade_{table_name}`;
|
||
CREATE TABLE `blade_{table_name}` (
|
||
`id` bigint NOT NULL COMMENT '主键',
|
||
-- 业务字段
|
||
`{column_name}` {mysql_type} {null_constraint} {default_value} COMMENT '{字段注释}',
|
||
-- 审计字段
|
||
`create_user` bigint NULL DEFAULT NULL COMMENT '创建人',
|
||
`create_dept` bigint NULL DEFAULT NULL COMMENT '创建部门',
|
||
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
|
||
`update_user` bigint NULL DEFAULT NULL COMMENT '修改人',
|
||
`update_time` datetime NULL DEFAULT NULL COMMENT '修改时间',
|
||
`status` int NULL DEFAULT 1 COMMENT '状态',
|
||
`is_deleted` int NULL DEFAULT 0 COMMENT '是否已删除',
|
||
PRIMARY KEY (`id`) USING BTREE
|
||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '{表注释}';
|
||
|
||
SET FOREIGN_KEY_CHECKS = 1;
|
||
```
|
||
|
||
### Raw Serializable 模式(系统 / 关系表)
|
||
|
||
结构同 BaseEntity 模板(同样无 `tenant_id`)。差异在于 Java 侧手动定义全部字段,数据库层面建表语句本身不变。
|
||
|
||
### 索引建议
|
||
|
||
对于查询频繁的字段:
|
||
|
||
```sql
|
||
-- 普通索引
|
||
CREATE INDEX idx_{table_name}_{column} ON blade_{table_name} ({column_name});
|
||
|
||
-- 唯一索引
|
||
CREATE UNIQUE INDEX uk_{table_name}_{column} ON blade_{table_name} ({column_name});
|
||
|
||
-- 复合索引(多字段)
|
||
CREATE INDEX idx_{table_name}_{col1}_{col2} ON blade_{table_name} ({col1}, {col2});
|
||
```
|
||
|
||
**命名约定**:
|
||
- 唯一索引前缀 `uk_`
|
||
- 普通索引前缀 `idx_`
|
||
- 字段名用下划线拼接
|
||
|
||
### MySQL 约定
|
||
|
||
- 列名使用反引号 `` ` `` 包裹
|
||
- 注释直接用 `COMMENT` 关键字写在列定义后
|
||
- 表注释在 `CREATE TABLE` 末尾
|
||
- 字符集固定 `utf8mb4`,排序规则 `utf8mb4_general_ci`
|
||
- 存储引擎 `InnoDB`
|
||
- 主键索引类型 `USING BTREE`
|
||
- 租户 ID 列 `varchar(12)` 默认 `'000000'`
|
||
|
||
---
|
||
|
||
## 四、菜单 SQL 生成
|
||
|
||
每个新模块需要插入 5 条菜单记录:1 个主菜单 + 4 个操作按钮(新增、修改、删除、查看)。
|
||
|
||
### MySQL 菜单 SQL
|
||
|
||
```sql
|
||
-- ----------------------------
|
||
-- {中文名}菜单数据
|
||
-- ----------------------------
|
||
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
|
||
VALUES ({menuId}, {parentMenuId}, '{modelCode}', '{中文名}', 'menu', '/{module}/{modelCode}', NULL, 1, 1, 0, 1, NULL, 0);
|
||
|
||
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
|
||
VALUES ({addMenuId}, {menuId}, '{modelCode}_add', '新增', 'add', '/{module}/{modelCode}/add', 'plus', 1, 2, 1, 1, NULL, 0);
|
||
|
||
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
|
||
VALUES ({editMenuId}, {menuId}, '{modelCode}_edit', '修改', 'edit', '/{module}/{modelCode}/edit', 'form', 2, 2, 2, 1, NULL, 0);
|
||
|
||
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
|
||
VALUES ({removeMenuId}, {menuId}, '{modelCode}_delete', '删除', 'delete', '/{module}/{modelCode}/delete', 'delete', 3, 2, 3, 1, NULL, 0);
|
||
|
||
INSERT INTO `blade_menu` (`id`, `parent_id`, `code`, `name`, `alias`, `path`, `source`, `sort`, `category`, `action`, `is_open`, `remark`, `is_deleted`)
|
||
VALUES ({viewMenuId}, {menuId}, '{modelCode}_view', '查看', 'view', '/{module}/{modelCode}/view', 'eye-open', 4, 2, 2, 1, NULL, 0);
|
||
```
|
||
|
||
### 菜单字段说明
|
||
|
||
| 字段 | 说明 | 值 |
|
||
|------|------|-----|
|
||
| `id` | 主菜单 ID | 生成雪花 ID 或自定义(如 1123598812738675301) |
|
||
| `parent_id` | 父菜单 ID | 由用户指定或放在顶级(0) |
|
||
| `code` | 权限编码 | 主菜单: `{modelCode}`,按钮: `{modelCode}_{action}` |
|
||
| `name` | 显示名称 | 主菜单: `{中文名}`,按钮: 新增/修改/删除/查看 |
|
||
| `alias` | 别名 | 主菜单: `menu`,按钮: add/edit/delete/view |
|
||
| `path` | 路由路径 | `/{module}/{modelCode}` |
|
||
| `source` | 图标 | 按钮: plus/form/delete/eye-open |
|
||
| `sort` | 排序 | 按钮从 1 到 4 |
|
||
| `category` | 类别 | 1=菜单,2=按钮 |
|
||
| `action` | 操作类型 | 0=无,1=新增,2=修改,3=删除 |
|
||
| `is_open` | 是否打开 | 1=是 |
|
||
| `is_deleted` | 是否删除 | 0=否 |
|
||
|
||
---
|
||
|
||
## 附:无租户表模式速查
|
||
|
||
如果实体不需要 `tenant_id`(BaseEntity 或 Raw 模式),从建表模板中直接移除 `tenant_id` 行即可,其余审计字段保持不变。
|