Files
workspace/code/fms/数据库迁移计划.md
T
2026-08-03 22:54:03 +08:00

73 lines
4.6 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.
# FMS 业务数据库结构迁移计划
> 本文件记录业务表迁移历史。当前模块元数据架构和 `033`/`034` 切换顺序以 `新数据库结构.md` 为准;文中旧授权表名只描述切换前状态。
## 目标与现状
- 源库:`G3HY2025`,只读取系统目录和视图定义。
- 目标库:`FMS`,只迁移结构,不迁移业务数据,不迁移存储过程。
- 源库现有 121 张用户表、61 个视图;目标库迁移前已有 17 张表、1 个视图。
- 目标库现有 `s_module*`、`b_user_module`、`b_user_power`、`s_module_auto_code` 是新模型,不从旧库重复迁移。
## 对象边界
| 对象范围 | 处理 |
| --- | --- |
| `b_*` 基础资料 | 重建设计后迁移,明确排除项除外 |
| `bc_*` 合同和价目表 | 重建设计后迁移 |
| `bf_*` 文件资料 | 重建设计后迁移 |
| `bs_*` 业务单据 | 重建设计后迁移 |
| `cw_*` 财务 | 重建设计后迁移 |
| `oa_*` OA 实体 | 重建设计后迁移 |
| `v_b_*`、`v_bc_*`、`v_bs_*`、`v_cw_*`、`v_feetype` | 保留有业务意义的名称和核心字段,按新表结构重建 |
| `s_*`、`sh_*`、`v_s_*`、`v_sh_*` | 不迁移 |
已存在且不重复创建:
- `b_user`、`b_contact`、`b_othercompany`、`b_othercompany_bmfl`、`b_user_power`、`v_b_contact`
- 新 module 元数据、授权、多语言、自动编码和登录日志表
明确排除:
- 旧元数据和权限:`s_module*`、`s_autoidrule`、`s_column*`、`s_search*`、`s_select*`、`s_setpage`、`b_user_qx`
- 历史基础设施:`dtproperties`、`log_datas`、`s_Log`、`s_log_sp`、`b_user_record`
- 暂缓能力:`s_report`、`s_exceltpl*`、`s_expression*`、`s_awoke*`、`s_shlevel`、`sh_*`
- 废弃对象:`b_contact_type`、`v_autoidrule`、`v_b_user_record`
## 新结构规则
- 主表使用 `b_id bigint` 雪花 ID 作为系统主键;明细和子表保留 `subid bigint` 雪花主键,不改名为 `b_id`。
- 主表及子表的关联字段统一为 `bigint`;子表 `father` 指向对应主表的 `b_id`。
- 主业务对象保留独立文本业务编号。合同使用 `b_htno`,业务单及财务单据使用 `b_ywno`,其余主对象使用已有语义字段或 `b_code`。
- 自动业务编号字段使用 `varchar(50)`,必须有单字段唯一索引,可由现有 `s_module_auto_code` 绑定;需要中文编号时才使用 `nvarchar(50)`。
- 明细、关系表不增加无业务意义的自动编号。旧 `subid` 保留字段名并改为 `bigint` 雪花 ID。
- 固定层级分类表统一改为 `b_id`、`b_parent_id`、`b_name`、`b_level`、`b_path`、`b_xh`、`b_canuse` 和审计字段。
- 中文名称、备注和正文使用 `nvarchar`;`text` 改为 `nvarchar(max)`;`image` 改为 `varbinary(max)`。
- 日期时间使用 `date` 或 `datetime2`;布尔值使用 `int` 的 `0/1`;`float` 金额和计量值改为定精度 `decimal`。
- 逗号拼接的关联 ID 不再作为关系依据,后续业务模块使用独立关系表。
- 视图显式列出原定义字段,不使用 `SELECT *`,不依赖旧 module 表、跨库对象或业务存储过程。
## 脚本顺序
1. `015_normalize_existing_business_tables.sql`:规范化目标库已有合作伙伴、联系人和分类结构。
2. `016_create_base_tables.sql`:基础资料和用户业务扩展。
3. `017_create_contract_file_tables.sql`:合同、价目表和文件资料。
4. `018_create_business_tables.sql`:业务主表和明细。
5. `019_create_finance_tables.sql`:财务主表和明细。
6. `020_create_oa_tables.sql`:OA 实体、附件和接收关系。
7. `021_create_business_views.sql`:保留的基础资料、业务和财务视图。
8. `verify_business_schema.sql`:只读验证对象、字段、约束、索引和视图依赖。
所有迁移脚本必须断言目标数据库为 `FMS`,使用 `XACT_ABORT ON` 和显式事务,并允许重复执行。
## 执行结果
- 执行日期:2026-07-29。
- `015` 至 `021` 已在 `FMS` 完整执行两次,两次均成功,幂等验证通过。
- 目标库现有 102 张用户表、49 个视图;本次新建的 85 张业务表均为空。
- 主表 `b_id`、子表 `subid`、`father` 和关联 ID 均为 `bigint`,主键规则验证通过。
- 所有 49 个视图均已通过 `sys.sp_refreshview` 编译验证。
- 目标库原有用户和 module 元数据仍在:9 个用户、11 个 module、72 个 module 字段。
- 旧自动编码规则未迁移;当前 `s_module_auto_code` 为 0 行,后续由新 module 配置通过 `createAutoCodeDraft` 创建。
- 可使用 `config/migrations/tools/VerifyBusinessMigration.java` 重复执行只读验收。