Files
rxthinkcmf-wiki/RXThinkCMF_ThinkPhp6_NaiveVue/zh/guide/database.md
T
2026-09-29 10:14:04 +08:00

76 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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)` |