# 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)` |