8.2 KiB
name, overview, todos
| name | overview | todos | ||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 重构元数据数据库结构 | 按 新数据库结构.md 重写 fms-api/config/migrations/000_reset_metadata.sql,使表结构完全符合目标 schema;b_user 表保持不变,迁移脚本末尾仅种子 m_system 与 m_metadata。 |
|
用户需求
根据 新数据库结构.md 重构元数据数据库结构,使表结构完全符合目标 schema;b_user 表保持不变;迁移脚本末尾的种子数据仅保留"系统管理"目录与"模块管理"模块,移除多语言管理与用户授权相关全部数据。
产品概述
本次为纯数据库结构重构,不涉及前后端功能页面。成果为重写 fms-api/config/migrations/000_reset_metadata.sql 迁移脚本,使其中所有元数据表(除 b_user 外)与目标设计文档逐一对应,并收敛种子数据。
核心改动
b_module_field:重命名列并采用新控件类型集合,删除冗余列。b_module_field_list:移除自包含树(b_parent_id/b_kind/b_display_type/b_canedit),改为引用统一分组表b_module_field_group。- 新增
b_module_field_group:统一承载列表多级表头与编辑分组的布局分组树(取代旧的b_module_field_edit_group)。 b_module_field_edit:剔除编辑器细节列,改为引用分组表的b_group_id,统一显示顺序列为b_xh。b_module_field_query、b_module_power、b_user_module、b_user_power、b_i18n已符合目标,无需改动。- 种子数据仅保留
m_system目录与m_metadata模块及其操作权限、管理员授权;删除m_i18n、m_authorization全部相关行。
技术栈
- 目标数据库:SQL Server(Druid 连接池,按机构独立库)。
- 变更载体:单文件 SQL 迁移脚本
fms-api/config/migrations/000_reset_metadata.sql,属于"RESET"脚本(执行前删除除 b_user 外的全部用户表、保留视图,再重建并插入种子)。 - 不涉及后端 Java / 前端 Vue 代码:已 grep 确认旧列名仅在迁移脚本内出现,通用接口为表/列透传,模块管理前端当前为空占位页。
实施方法
完全重写 000_reset_metadata.sql 的建表与种子部分,使每个元数据表逐字段对齐 新数据库结构.md。脚本开头的"删除旧表 + 保留视图 + 重置管理员会话上下文"逻辑保持不变(它依赖 b_user,符合"b_user 不改"约束)。
关键修改点(按目标文档)
1. b_module_field(混合旧列拆分)
b_field_type varchar(30) NOT NULL→ 重命名为b_type,CHECK 改为('input','textarea','number','money','date','datetime','switch','select')。b_value nvarchar(500) NULL→ 重命名为b_default_value nvarchar(500) NULL。b_dict_code varchar(100) NULL→ 重命名为b_options nvarchar(max) NULL,新增CHECK (b_options IS NULL OR ISJSON(b_options) = 1)。- 删除
b_remark、b_inputdatetime两列。 - 保留
b_id/b_module_id/b_field/b_name/b_i18n/b_canuse及外键、唯一索引(b_module_id, b_field)、索引(b_module_id, b_canuse, b_id)。
2. b_module_field_group(新增,取代 b_module_field_edit_group)
- 列:
b_id bigint NOT NULL、b_module_id bigint NOT NULL、b_parent_id bigint NULL、b_title nvarchar(100) NOT NULL、b_i18n varchar(150) NULL、b_xh int NOT NULL DEFAULT 0、b_canuse int NOT NULL DEFAULT 1。 - 外键:
FK..._module→ b_module(b_id);FK..._parent→ 自引用 b_module_field_group(b_id)。 - 约束:
CK..._canuse CHECK (b_canuse IN (0,1));索引IX (b_module_id, b_canuse, b_xh, b_id)。 - 注意:旧的
b_code列不再需要(被 b_id 稳定关联键取代),不保留。
3. b_module_field_list(引用统一分组表)
- 删除
b_parent_id、b_kind、b_display_type、b_canedit及其自引用 FKFK_b_module_field_list_parent、shape CHECKCK_b_module_field_list_kind/CK_b_module_field_list_shape/CK_b_module_field_list_canedit/CK_b_module_field_list_width(宽度校验可保留为简单>0)。 - 新增
b_group_id bigint NULL,FK_b_module_field_list_group→ b_module_field_group(b_id)(同模块分组;为空时为顶层列)。 - 保留
b_id/b_module_id/b_field_id/b_title/b_i18n/b_visible/b_xh/b_width/b_sortable及 CHECKb_visible/b_sortable IN (0,1)。 - 唯一索引
UX (b_module_id, b_field_id);索引IX (b_module_id, b_group_id, b_xh, b_id)。
4. b_module_field_edit(通用编辑配置)
- 删除
b_editor、b_edit_format、b_editor_options、b_placeholder、b_canform、b_edit_group、b_edit_span七列。 b_edit_xh→ 重命名为b_xh(DEFAULT 0)。- 新增
b_group_id bigint NULL,FK_b_module_field_edit_group→ b_module_field_group(b_id)。 - 保留
b_id/b_module_id/b_field_id/b_required/b_readonly/b_disabled及对应 CHECK;唯一(b_module_id, b_field_id);索引(b_module_id, b_xh, b_id)。
5. 无需改动(已符合目标)
b_module(含模块类型校验、目录/页面/数据三类约束)、b_module_field_query、b_module_power、b_user_module、b_user_power、b_i18n结构、约束、索引保持不变。
建表顺序(满足外键依赖)
b_module → b_module_field_group → b_module_field → b_module_field_list / b_module_field_edit / b_module_field_query → b_module_power → b_user_module / b_user_power → b_i18n → 种子插入。
说明:b_module_field_group 必须在 b_module_field 之前建(list/edit 的 group_id 引用它);b_module_field_list 与 b_module_field_edit 的 b_field_id 依赖 b_module_field。
种子数据(按"只保留元数据")
- 保留模块:
m_system(directory,b_canmenu=1)、m_metadata(page,/system/metadata,b_canmenu=1)。 - 保留操作权限(b_module_power):
m_metadata的 create/update/delete/sync 四条。 - 保留授权(b_user_module / b_user_power):管理员对
m_metadata的模块权限及上述四条操作权限。 - 移除:
m_i18n、m_authorization模块及其全部b_module_power、b_user_module、b_user_power行。 - 固定雪花种子 ID(9 开头)相应精简为 system/metadata 两套,避免与已删除模块 ID 冲突。
实施注意
- 脚本头部 DROP 逻辑保留:仅删用户表(排除 b_user)、保留视图,重置 admin 会话上下文(依赖 b_user,符合约束)。
- 保持
SET XACT_ABORT ON与事务包裹,确保失败时回滚。 - 不引入任何前端/后端代码改动;现有通用接口对列名透传,无需适配。
- 按开发规范,不主动执行脚本或构建;交付时说明未执行,建议用户在选定的组织库(g3hd)手动执行验证。
目录结构
本次仅修改一个文件:
fms-api/config/migrations/
└── 000_reset_metadata.sql # [MODIFY] 重写建表与种子部分,对齐 新数据库结构.md:
# - b_module_field 列重命名/精简
# - 新增 b_module_field_group 取代 b_module_field_edit_group
# - b_module_field_list 改引用分组表、移除自包含树
# - b_module_field_edit 精简并引用分组表
# - 种子仅保留 m_system + m_metadata
# 头部 DROP 与 admin 上下文逻辑保持不变