76 lines
3.3 KiB
Markdown
76 lines
3.3 KiB
Markdown
# 3.2 数据库建表
|
||
|
||
:::tip 概述
|
||
建表是模块开发的第一步。所有表必须包含公共字段(id、软删除、审计字段),这是 BaseModel 自动处理的基础。
|
||
:::
|
||
|
||
## 公共字段规范
|
||
|
||
所有业务表必须包含以下公共字段:
|
||
|
||
```sql
|
||
-- 公共字段(每个表都必须包含)
|
||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
|
||
is_delete TINYINT(1) DEFAULT 0 COMMENT '软删除 0=正常 1=已删除',
|
||
create_user VARCHAR(50) DEFAULT '' COMMENT '创建人',
|
||
create_time DATETIME COMMENT '创建时间',
|
||
update_user VARCHAR(50) DEFAULT '' COMMENT '更新人',
|
||
update_time DATETIME COMMENT '更新时间'
|
||
```
|
||
|
||
:::warning 为什么必须包含这些字段?
|
||
- `is_delete`:BaseModel 的全局查询范围 `soft_delete` 会自动过滤 `is_delete=1` 的数据
|
||
- `create_user` / `create_time`:BaseModel 的 `onBeforeInsert` 事件自动填充
|
||
- `update_user` / `update_time`:BaseModel 的 `onBeforeUpdate` 事件自动填充
|
||
:::
|
||
|
||
## 建表 SQL 示例(example 模块)
|
||
|
||
```sql
|
||
CREATE TABLE think_example (
|
||
-- 主键
|
||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
|
||
|
||
-- 业务字段
|
||
name VARCHAR(200) NOT NULL COMMENT '案例名称',
|
||
type TINYINT(1) DEFAULT 0 COMMENT '案例类型(字典 example_type)',
|
||
status TINYINT(1) DEFAULT 0 COMMENT '案例状态(字典 example_status)',
|
||
sort INT DEFAULT 0 COMMENT '排序值(越小越靠前)',
|
||
avatar VARCHAR(500) DEFAULT '' COMMENT '头像(文件路径)',
|
||
|
||
-- 公共字段(必须)
|
||
is_delete TINYINT(1) DEFAULT 0 COMMENT '软删除 0=正常 1=已删除',
|
||
create_user VARCHAR(50) DEFAULT '' COMMENT '创建人',
|
||
create_time DATETIME COMMENT '创建时间',
|
||
update_user VARCHAR(50) DEFAULT '' COMMENT '更新人',
|
||
update_time DATETIME COMMENT '更新时间',
|
||
|
||
-- 索引
|
||
INDEX idx_type (type),
|
||
INDEX idx_status (status),
|
||
INDEX idx_sort (sort)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='案例演示表';
|
||
```
|
||
|
||
## 字段与 Logic 属性对应关系
|
||
|
||
| 数据库字段 | 类型 | Logic 属性 | 说明 |
|
||
|-----------|------|-----------|------|
|
||
| `name` | VARCHAR(200) | `pageLikeFields` | LIKE 模糊搜索 |
|
||
| `type` | TINYINT(1) | `pageEqFields` + `serializeMaps` | 精确匹配 + 枚举翻译 |
|
||
| `status` | TINYINT(1) | `pageEqFields` + `serializeMaps` | 精确匹配 + 枚举翻译 |
|
||
| `sort` | INT | `pageOrderBy` | 默认排序字段 |
|
||
| `avatar` | VARCHAR(500) | `fileFields` | 文件字段,自动处理 |
|
||
|
||
## 常见字段类型参考
|
||
|
||
| 用途 | 推荐类型 | 示例 |
|
||
|------|----------|------|
|
||
| 主键 | `INT AUTO_INCREMENT` | `id INT PRIMARY KEY AUTO_INCREMENT` |
|
||
| 外键 | `INT DEFAULT 0` | `category_id INT DEFAULT 0` |
|
||
| 短文本 | `VARCHAR(n)` | `name VARCHAR(200)` |
|
||
| 长文本 | `TEXT` | `content TEXT` |
|
||
| 布尔值 | `TINYINT(1)` | `status TINYINT(1) DEFAULT 0` |
|
||
| 整数 | `INT` | `sort INT DEFAULT 0` |
|
||
| 日期时间 | `DATETIME` | `create_time DATETIME` |
|
||
| 文件路径 | `VARCHAR(500)` | `avatar VARCHAR(500)` | |