71 lines
4.4 KiB
Markdown
71 lines
4.4 KiB
Markdown
# 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` 重复执行只读验收。
|