Files
EasyGoAdmin_GoFrame_EleVue/document/wiki/12_数据模型与表清单.txt
T
2026-10-20 11:37:25 +08:00

175 lines
12 KiB
Plaintext
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.
================================================================================
EasyGoAdmin 后端开发者文档 · 12 数据模型与表清单
================================================================================
来源:resource/sql/mysql.sql(规范基准,25 张表)+ internal/model/hooks +
internal/model/entity。方言 DDL(pgsql/sqlite/mssql/oracle)对齐此基准转换,
后四份待人工校对。
--------------------------------------------------------------------------------
1. 全表统一规范
--------------------------------------------------------------------------------
表前缀 goframe_;存储引擎 InnoDB;字符集 utf8mb4。
每张表统一审计列(全部 25 表齐备):
id int NOT NULL AUTO_INCREMENT 主键(数据库自增,禁用雪花)
create_user varchar(50) 创建人(ctx 用户名)
create_time datetime DEFAULT (now()) 创建时间
update_user varchar(50) 更新人
update_time datetime DEFAULT (now()) 更新时间
del_flag int DEFAULT 0 0-正常 1-已删除(软删)
租户级表另有 tenant_id int DEFAULT 0(0=平台级),共 9 张(见第 3 节)。
删除一律软删(deleteHook 改写);查询一律经 dao.Ctx 过滤 del_flag=0。
--------------------------------------------------------------------------------
2. ER 关系图(逻辑外键,无物理外键约束)
--------------------------------------------------------------------------------
goframe_tenant ──< goframe_user >──┬──< goframe_user_role >── goframe_role
│ │
│ goframe_role_menu
│ │
├──< goframe_dept ▼
├──< goframe_level goframe_menu
├──< goframe_position ▲
│ (user.level_id/position_id/dept_id 引用)
│
goframe_config ──< goframe_config_item
goframe_dict ──< goframe_dict_item
goframe_category(树 parent_id) ──< goframe_article(tenant_id, category_id)
article: cover 单图 / images 多图 / content 富文本
goframe_notice / goframe_link(tenant_id)
goframe_city(树 pid + parent_code,全国行政区划,无租户)
goframe_job ──< goframe_job_log(job_id, job_name 冗余)
goframe_operation_log / goframe_login_log(独立日志表,无租户)
goframe_file_template(全局文件模板,code 唯一)
goframe_param(全局系统参数,code 唯一)
goframe_example(案例演示表,导入导出/状态演示用)
“>” 侧为多端;如 user >-- user_role --< role 为多对多。
--------------------------------------------------------------------------------
3. 25 张表清单
--------------------------------------------------------------------------------
表名 中文注释 域 租户级 特征列/说明
------------------------- --------------- ------ ------ ------------------
goframe_article 文章表 content 是 category_id/cover/
images(多图)/content
(富文本)/status/click/sort
goframe_category 文章分类表 content 是 树形 parent_id、
category_name/code/sort
goframe_city 城市行政区划表 data 否 树形 pid+parent_code、
city_code/area_code/level、
lng/lat/pinyin(大数据量表)
goframe_config 系统配置表 data 否 name/code/sort
goframe_config_item 配置项表 data 否 config_id/value/options/type/
status/sort
goframe_dept 部门表 system 是 树形、删除有子级/用户守卫
goframe_dict 数据字典表 data 否 name/code;缓存 dict:item:{code}
goframe_dict_item 字典项表 data 否 dict_id/name/value/sort
goframe_example 案例演示表 tool 否 七件套+导入导出+状态演示
goframe_file_template 文件模板表 tool 否 code 唯一;getTemplateByCode
goframe_job 定时任务表 monitor 否 job_name/cron_expression/
execute_policy/is_sync/url/
params/status(0未发布/1运行/2暂停)
goframe_job_log 定时任务日志表 monitor 否 job_id/status/耗时/exception_info
goframe_level 职级表 system 是 导入导出启用;user_count 展示
goframe_link 友链表 content 是 无 status 列
goframe_login_log 登录日志表 monitor 否 log_type(1登录/2退出)/ip/
location/os/browser/status
goframe_menu 菜单表 system 否 树形;type(0菜单/1权限节点)/
permission/status/hide/sort
goframe_notice 通知公告表 data 是 status
goframe_operation_log 操作日志表 monitor 否 title/type(log_type枚举)/
param/result/ip/location/
consume_time/status/error
goframe_param 系统参数表 data 否 code 唯一
goframe_position 岗位表 system 是
goframe_role 角色表 system 是 code/data_scope(四档行级数据权限)
goframe_role_menu 角色菜单关联表 system 否 role_id+menu_id(无模块文件)
goframe_tenant 租户表 system 否 code(T+ID)/status/expire_time/
max_user_num
goframe_user 用户表 system 是 username/password( bcrypt)/salt/
mobile/email/avatar/dept_id/
level_id/position_id/status/code
goframe_user_role 用户角色关联表 system 否 user_id+role_id(无模块文件)
--------------------------------------------------------------------------------
4. 唯一索引清单(13 个,resource/sql 定稿;并发唯一性的最终保证)
--------------------------------------------------------------------------------
表 索引名 列 语义
-------------- ------------------- ------------------------------------------ ------------
goframe_category uk_tenant_name (tenant_id, category_name, del_flag) 租户内分类名唯一
goframe_config uk_code (code) 全局配置编码唯一
goframe_dept uk_tenant_name (tenant_id, name, del_flag) 租户内部门名唯一
goframe_dict uk_code (code) 全局字典编码唯一
goframe_file_template uk_code (code) 全局模板编码唯一
goframe_level uk_tenant_name (tenant_id, name, del_flag) 租户内职级名唯一
goframe_param uk_code (code) 全局参数编码唯一
goframe_position uk_tenant_name (tenant_id, name, del_flag) 租户内岗位名唯一
goframe_role uk_tenant_code (tenant_id, code, del_flag) 租户内角色编码唯一
goframe_tenant uk_code (code) 租户编码全局唯一
goframe_user uk_tenant_username (tenant_id, username, del_flag) 租户内用户名唯一
goframe_user uk_tenant_mobile (tenant_id, mobile, del_flag) 租户内手机号唯一
goframe_user uk_tenant_code (tenant_id, code, del_flag) 租户内用户编码唯一
要点:
* 索引含 del_flag(软删行不占坑,与 dao.Ctx 恒过滤 del_flag=0 语义一致)。
* 含 tenant_id 的索引,模块唯一预检(UniqueFields/手写检查)范围必须等于
索引范围(Group:"tenant_id" 或按行现租户),否则漏报 1062 或跨租户误报。
* document/easygoadmin.goframe.elevue.sql 导入脚本与定稿存在已知 DDL 漂移
(部分 uk_code 缺失),以 resource/sql 为准,需人工补齐。
--------------------------------------------------------------------------------
5. 枚举列约定(列注释驱动字典与生成器)
--------------------------------------------------------------------------------
注释写法 "字段名:1-正常 2-禁用"(或 = 分隔),生成器解析为前端选项并自动
建字典(编码 {模块驼峰}_{字段驼峰})。常见枚举:
status(账号/租户/字典项等) 1-正常 2-禁用
article.status 0-正常 1-下架
city.level 0-省份 1-城市 2-县区 3-街道 4-社区
menu.type 0-菜单 1-权限节点
job.status 0-未发布 1-运行中 2-暂停
job.execute_policy 1-立即执行 2-执行一次 3-放弃执行
job.is_sync 1-同步 0-异步
role.data_scope 1-全部 2-本部门及以下 3-本部门 4-仅本人
(默认 1;字典 role_data_scope 已随定稿种子
写入 dict/dict_item,机制见 03 章第 6 节)
del_flag 0-正常 1-已删除
login_log.log_type 1-登录 2-退出
operation_log.type 见 consts/log_type.go(41 个值,静态映射不走字典)
--------------------------------------------------------------------------------
6. 租户级表与平台级表(hooks.tenantTables,共 9 张)
--------------------------------------------------------------------------------
租户级(tenant_id 自动过滤/盖章):
goframe_user / role / dept / level / position / article / category / notice / link
平台级(无租户过滤):
tenant / menu / city / config / config_item / param / dict / dict_item /
file_template / job / job_log / operation_log / login_log / example /
user_role / role_menu
新增租户级表必须同步修改 internal/model/hooks/hooks.go 的 tenantTables
(代码生成器不自动维护此清单)。
--------------------------------------------------------------------------------
7. 大表与性能注意
--------------------------------------------------------------------------------
goframe_city 为全国行政区划大表(AUTO_INCREMENT 已至 78 万+):
查询走 parent_code/pid 索引路径(级联懒加载 getCityList),
避免全表 List;导入/迁移时注意批大小。
日志三表(operation_log/login_log/job_log)只增不改,依赖 LogClean 任务
按 job.logRetentionDays(默认 90 天)分批物理清理。
导出接口统一 ChunkQuery 分批(500/页)防 OOM。
--------------------------------------------------------------------------------
8. 建表/变更工作流
--------------------------------------------------------------------------------
1) 以 mysql.sql 为基准补 ALTER(含列注释枚举、uk_* 唯一索引、索引命名
uk_/idx_ 规范)
2) gf gen dao -c hack/config.yaml 刷新 dao/entity/do(service 手维护)
3) 同步 resource/sql 其余四份方言 DDL(人工校对)
4) 租户级表 → 修改 hooks.tenantTables
5) go build ./... 重启;必要时 go run ./cmd/migrator 同步到其他环境库