# FMS 业务数据库结构迁移计划 ## 目标与现状 - 源库:`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` 重复执行只读验收。