Files
workspace/code/fms/.codebuddy/plans/重构元数据数据库结构_40656417(未完成).md
T
2026-07-23 17:33:18 +08:00

8.2 KiB
Raw Blame History

name, overview, todos
name overview todos
重构元数据数据库结构 按 新数据库结构.md 重写 fms-api/config/migrations/000_reset_metadata.sql,使表结构完全符合目标 schema;b_user 表保持不变,迁移脚本末尾仅种子 m_system 与 m_metadata。
id content status
rewrite-b-module-field 重写 b_module_field:b_type/b_default_value/b_options 列与约束,删冗余列 pending
id content status
add-b-module-field-group 新增 b_module_field_group 表(含自引用树),取代 b_module_field_edit_group pending
id content status dependencies
refactor-b-module-field-list 重构 b_module_field_list:引用分组表,移除 b_parent_id/b_kind/display/canedit pending
add-b-module-field-group
id content status dependencies
refactor-b-module-field-edit 重构 b_module_field_edit:引用分组表,精简编辑器列,统一 b_xh pending
add-b-module-field-group
id content status dependencies
update-seed-data 收敛种子数据仅保留 m_system 与 m_metadata pending
rewrite-b-module-field
refactor-b-module-field-list
refactor-b-module-field-edit

用户需求

根据 新数据库结构.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 及其自引用 FK FK_b_module_field_list_parent、shape CHECK CK_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 及 CHECK b_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 上下文逻辑保持不变