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

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