文档修正:更新导航与迁移后引用
This commit is contained in:
1 parent
f7db7b592c
commit
dd2082cc39
18 files changed
+160
-148
No files matched your search
@@ -1,9 +1,9 @@
|
||||
# RailwaySystem 数据库 V2 DDL 生成与设计审查概览 (Round 2 最终静态收尾版)
|
||||
|
||||
> **设计状态**:数据库 V2 物理 DDL 最终静态收尾就绪(已完成 Round 2 全部 7 项缺陷修复,达到“允许进入测试迁移”标准)
|
||||
> **最高依据**:[`RailwaySystem 数据库 V2 字段设计与 Kingbase DDL 规范 V1.0.md`](file:///Users/wzb/Desktop/项目/RailwaySystem/doc/RailwaySystem%20数据库%20V2%20字段设计与%20Kingbase%20DDL%20规范%20V1.0.md)
|
||||
> **业务背景参考**:[`RailwaySystem 智慧培训系统一期 PRD V1.0.md`](file:///Users/wzb/Desktop/项目/RailwaySystem/doc/RailwaySystem%20智慧培训系统一期%20PRD%20V1.0.md)
|
||||
> **技术基线**:`main@4b450f46`,KingbaseES V009R003C018 (`database=training`, `schema=public`, `database_mode=mysql`)
|
||||
> **设计状态**:数据库 V2 物理 DDL 最终静态收尾就绪(已完成 Round 2 全部 7 项缺陷修复,达到“允许进入测试迁移”标准)
|
||||
> **最高依据**:[`RailwaySystem 数据库 V2 字段设计与 Kingbase DDL 规范 V1.0.md`](../archive/database-history/RailwaySystem%20数据库%20V2%20字段设计与%20Kingbase%20DDL%20规范%20V1.0.md)
|
||||
> **业务背景参考**:[`一期 PRD V1.0`](../requirements/一期PRD-V1.0.md)
|
||||
> **技术基线**:`main@4b450f46`,KingbaseES V009R003C018 (`database=training`, `schema=public`, `database_mode=mysql`)
|
||||
> **操作定位**:**纯静态收尾与审查阶段**(严禁执行 SQL、严禁修改真实库、严禁改动业务代码、严禁自动 git commit)。
|
||||
|
||||
---
|
||||
@@ -30,49 +30,49 @@
|
||||
|
||||
| 序号 / 关卡 | 脚本文件 | 事务边界 | 核心职责 |
|
||||
| :---: | :--- | :---: | :--- |
|
||||
| **Gate A** | [`000_tx_capability_probe.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/000_tx_capability_probe.sql) | 探针显式事务 | **执行前能力探针**:测试 DDL 事务回滚能力,若表残留强行阻断 |
|
||||
| **Gate B** | [`000_preflight.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/000_preflight.sql) | 纯只读骨架断言 | **Phase 0.5 骨架强校验**:集合差集校验 14 PK + 24 FK + 7 UNIQUE + 6 Identity + 9 Triggers |
|
||||
| **Stage 1** | [`001_backup_current_schema.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/001_backup_current_schema.sql) | `BEGIN ... COMMIT` | 备份当前 14 张表数据快照;增加防覆盖强校验,禁止 DROP CASCADE |
|
||||
| **Stage 2** | [`002_create_new_tables.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/002_create_new_tables.sql) | `BEGIN ... COMMIT` | 创建 8 张 V2 新表(无 `IF NOT EXISTS`,住宿默认0预分配,无业务默认值) |
|
||||
| **Stage 3** | [`003_alter_master_tables.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/003_alter_master_tables.sql) | `BEGIN ... COMMIT` | 卸载旧触发器与外键,调整 8 张主表(严格 `ADD COLUMN`,加容量 CHECK) |
|
||||
| **Stage 4** | [`004_rebuild_business_tables.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/004_rebuild_business_tables.sql) | `BEGIN ... COMMIT` | 校验 0 行后重构 5 张表(删除 `verify_result`/`checkin_way` 业务默认值) |
|
||||
| **Stage 5** | [`005_constraints.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/005_constraints.sql) | `BEGIN ... COMMIT` | 集中定义 13 组 UNIQUE、26 组 `ON DELETE NO ACTION` 外键与 9 条单行 CHECK |
|
||||
| **Stage 6** | [`006_indexes.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/006_indexes.sql) | `BEGIN ... COMMIT` | 建立外键索引、排课复合冲突索引与双非空过滤的部分唯一索引(无 `IF NOT EXISTS`) |
|
||||
| **-** | [`007_dicts.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/007_dicts.sql) | - | 声明 16 组业务字典注册脚本(**本结构迁移阶段跳过不执行**,留待权限阶段) |
|
||||
| **Stage 7** | [`008_migrate_teacher.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/008_migrate_teacher.sql) | `BEGIN ... COMMIT` | 平滑迁移 1 条教师真实数据,校验完整后固化 `status`/`del_flag` 为 NOT NULL 并删除旧列 |
|
||||
| **Stage 8** | [`009_drop_legacy_score.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/009_drop_legacy_score.sql) | `BEGIN ... COMMIT` | 前置 0 行强阻断校验后,显式解绑旧约束,常规 DROP 淘汰旧表 `train_score_info` |
|
||||
| **Stage 9** | [`010_verify.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/010_verify.sql) | 纯只读深度断言 | **“定义级深度验收”** 全量自动化强断言(逐表、列列表、外键删除规则、CHECK定义、默认值) |
|
||||
| **Gate A** | [`000_tx_capability_probe.sql`](../../RuoYi-Vue/sql/train/v2/000_tx_capability_probe.sql) | 探针显式事务 | **执行前能力探针**:测试 DDL 事务回滚能力,若表残留强行阻断 |
|
||||
| **Gate B** | [`000_preflight.sql`](../../RuoYi-Vue/sql/train/v2/000_preflight.sql) | 纯只读骨架断言 | **Phase 0.5 骨架强校验**:集合差集校验 14 PK + 24 FK + 7 UNIQUE + 6 Identity + 9 Triggers |
|
||||
| **Stage 1** | [`001_backup_current_schema.sql`](../../RuoYi-Vue/sql/train/v2/001_backup_current_schema.sql) | `BEGIN ... COMMIT` | 备份当前 14 张表数据快照;增加防覆盖强校验,禁止 DROP CASCADE |
|
||||
| **Stage 2** | [`002_create_new_tables.sql`](../../RuoYi-Vue/sql/train/v2/002_create_new_tables.sql) | `BEGIN ... COMMIT` | 创建 8 张 V2 新表(无 `IF NOT EXISTS`,住宿默认0预分配,无业务默认值) |
|
||||
| **Stage 3** | [`003_alter_master_tables.sql`](../../RuoYi-Vue/sql/train/v2/003_alter_master_tables.sql) | `BEGIN ... COMMIT` | 卸载旧触发器与外键,调整 8 张主表(严格 `ADD COLUMN`,加容量 CHECK) |
|
||||
| **Stage 4** | [`004_rebuild_business_tables.sql`](../../RuoYi-Vue/sql/train/v2/004_rebuild_business_tables.sql) | `BEGIN ... COMMIT` | 校验 0 行后重构 5 张表(删除 `verify_result`/`checkin_way` 业务默认值) |
|
||||
| **Stage 5** | [`005_constraints.sql`](../../RuoYi-Vue/sql/train/v2/005_constraints.sql) | `BEGIN ... COMMIT` | 集中定义 13 组 UNIQUE、26 组 `ON DELETE NO ACTION` 外键与 9 条单行 CHECK |
|
||||
| **Stage 6** | [`006_indexes.sql`](../../RuoYi-Vue/sql/train/v2/006_indexes.sql) | `BEGIN ... COMMIT` | 建立外键索引、排课复合冲突索引与双非空过滤的部分唯一索引(无 `IF NOT EXISTS`) |
|
||||
| **-** | [`007_dicts.sql`](../../RuoYi-Vue/sql/train/v2/007_dicts.sql) | - | 声明 16 组业务字典注册脚本(**本结构迁移阶段跳过不执行**,留待权限阶段) |
|
||||
| **Stage 7** | [`008_migrate_teacher.sql`](../../RuoYi-Vue/sql/train/v2/008_migrate_teacher.sql) | `BEGIN ... COMMIT` | 平滑迁移 1 条教师真实数据,校验完整后固化 `status`/`del_flag` 为 NOT NULL 并删除旧列 |
|
||||
| **Stage 8** | [`009_drop_legacy_score.sql`](../../RuoYi-Vue/sql/train/v2/009_drop_legacy_score.sql) | `BEGIN ... COMMIT` | 前置 0 行强阻断校验后,显式解绑旧约束,常规 DROP 淘汰旧表 `train_score_info` |
|
||||
| **Stage 9** | [`010_verify.sql`](../../RuoYi-Vue/sql/train/v2/010_verify.sql) | 纯只读深度断言 | **“定义级深度验收”** 全量自动化强断言(逐表、列列表、外键删除规则、CHECK定义、默认值) |
|
||||
|
||||
### 2.2 应急回滚资产清单 (`RuoYi-Vue/sql/train/v2/rollback/`)
|
||||
|
||||
| 序号 | 回滚文件 | 核心职责 |
|
||||
| :---: | :--- | :--- |
|
||||
| **0** | [`000_phase05_exact_schema.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/rollback/000_phase05_exact_schema.sql) | **Phase 0.5 真实物理基线 DDL**(14表字段、PK、24个FK、7组UNIQUE、9个触发器) |
|
||||
| **1** | [`001_rollback_new_tables.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/rollback/001_rollback_new_tables.sql) | 显式解除外键依赖,按拓扑反序常规 DROP 8 张 V2 新增表(`BEGIN ... COMMIT`) |
|
||||
| **2** | [`002_rollback_modified_tables.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/rollback/002_rollback_modified_tables.sql) | 基于 `000_phase05_exact_schema.sql` 精确结构重建 13 张表,灌回 `bak_v1_*` 数据并核验教师行数 |
|
||||
| **3** | [`003_restore_legacy_score.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/rollback/003_restore_legacy_score.sql) | 基于精确 DDL 重建历史 `train_score_info` 表及 3 个外键与唯一约束 |
|
||||
| **4** | [`README.md`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/rollback/README.md) | 应急回滚指南(解耦结构与数据,明确依赖 `000` 结构与 `bak_v1_*` 数据的执行规范) |
|
||||
| **0** | [`000_phase05_exact_schema.sql`](../../RuoYi-Vue/sql/train/v2/rollback/000_phase05_exact_schema.sql) | **Phase 0.5 真实物理基线 DDL**(14表字段、PK、24个FK、7组UNIQUE、9个触发器) |
|
||||
| **1** | [`001_rollback_new_tables.sql`](../../RuoYi-Vue/sql/train/v2/rollback/001_rollback_new_tables.sql) | 显式解除外键依赖,按拓扑反序常规 DROP 8 张 V2 新增表(`BEGIN ... COMMIT`) |
|
||||
| **2** | [`002_rollback_modified_tables.sql`](../../RuoYi-Vue/sql/train/v2/rollback/002_rollback_modified_tables.sql) | 基于 `000_phase05_exact_schema.sql` 精确结构重建 13 张表,灌回 `bak_v1_*` 数据并核验教师行数 |
|
||||
| **3** | [`003_restore_legacy_score.sql`](../../RuoYi-Vue/sql/train/v2/rollback/003_restore_legacy_score.sql) | 基于精确 DDL 重建历史 `train_score_info` 表及 3 个外键与唯一约束 |
|
||||
| **4** | [`README.md`](../../RuoYi-Vue/sql/train/v2/rollback/README.md) | 应急回滚指南(解耦结构与数据,明确依赖 `000` 结构与 `bak_v1_*` 数据的执行规范) |
|
||||
|
||||
### 2.3 架构与设计审查技术文档 (`docs/database-v2/`)
|
||||
|
||||
| 序号 | 文档名称 | 主要内容 |
|
||||
| :---: | :--- | :--- |
|
||||
| **1** | [`00_readme.md`](file:///Users/wzb/Desktop/项目/RailwaySystem/docs/database-v2/00_readme.md) | 本阶段全景综述、规范基线与资产索引导航 |
|
||||
| **2** | [`01_table_inventory.md`](file:///Users/wzb/Desktop/项目/RailwaySystem/docs/database-v2/01_table_inventory.md) | 21 张正式业务表清单、新旧对比、三大核心 ID 落地映射、字段默认值修正 |
|
||||
| **3** | [`02_migration_plan.md`](file:///Users/wzb/Desktop/项目/RailwaySystem/docs/database-v2/02_migration_plan.md) | 迁移执行流水线、双门禁 (Gate A/B) 准入机制、单文件显式事务边界与断点恢复 |
|
||||
| **4** | [`03_constraint_index_review.md`](file:///Users/wzb/Desktop/项目/RailwaySystem/docs/database-v2/03_constraint_index_review.md) | PK、26 组 NO ACTION 外键、13 组 UNIQUE、9 条 CHECK 与复合索引全面审查 |
|
||||
| **5** | [`04_risk_review.md`](file:///Users/wzb/Desktop/项目/RailwaySystem/docs/database-v2/04_risk_review.md) | **R-01 至 R-17** 全景风险深度剖析(固化架构决策 A/B,解耦双 source_type) |
|
||||
| **6** | [`05_execution_contract.md`](file:///Users/wzb/Desktop/项目/RailwaySystem/docs/database-v2/05_execution_contract.md) | **执行契约**(Gate A 事务探针 + Gate B 精确骨架 + 显式事务与即刻熔断) |
|
||||
| **7** | [`06_review_round1_changes.md`](file:///Users/wzb/Desktop/项目/RailwaySystem/docs/database-v2/06_review_round1_changes.md) | **Round 1 修订闭环记录表**(17 项评审意见落实明细) |
|
||||
| **8** | [`07_review_round2_changes.md`](file:///Users/wzb/Desktop/项目/RailwaySystem/docs/database-v2/07_review_round2_changes.md) | **Round 2 修订闭环记录表**(R2-01 ~ R2-07 最终静态收尾明细) |
|
||||
| **1** | [`00_readme.md`](00_readme.md) | 本阶段全景综述、规范基线与资产索引导航 |
|
||||
| **2** | [`01_table_inventory.md`](01_table_inventory.md) | 21 张正式业务表清单、新旧对比、三大核心 ID 落地映射、字段默认值修正 |
|
||||
| **3** | [`02_migration_plan.md`](02_migration_plan.md) | 迁移执行流水线、双门禁 (Gate A/B) 准入机制、单文件显式事务边界与断点恢复 |
|
||||
| **4** | [`03_constraint_index_review.md`](03_constraint_index_review.md) | PK、26 组 NO ACTION 外键、13 组 UNIQUE、9 条 CHECK 与复合索引全面审查 |
|
||||
| **5** | [`04_risk_review.md`](04_risk_review.md) | **R-01 至 R-17** 全景风险深度剖析(固化架构决策 A/B,解耦双 source_type) |
|
||||
| **6** | [`05_execution_contract.md`](05_execution_contract.md) | **执行契约**(Gate A 事务探针 + Gate B 精确骨架 + 显式事务与即刻熔断) |
|
||||
| **7** | [`06_review_round1_changes.md`](06_review_round1_changes.md) | **Round 1 修订闭环记录表**(17 项评审意见落实明细) |
|
||||
| **8** | [`07_review_round2_changes.md`](07_review_round2_changes.md) | **Round 2 修订闭环记录表**(R2-01 ~ R2-07 最终静态收尾明细) |
|
||||
|
||||
---
|
||||
|
||||
## 3. 人工 Review 准入与优先建议
|
||||
|
||||
建议高级技术负责人优先 Review 以下关键文件:
|
||||
1. **优先审查 Round 2 修订记录表**:[`docs/database-v2/07_review_round2_changes.md`](file:///Users/wzb/Desktop/项目/RailwaySystem/docs/database-v2/07_review_round2_changes.md)(核验 R2-01 ~ R2-07 修复明细);
|
||||
2. **优先审查执行契约与探针**:[`docs/database-v2/05_execution_contract.md`](file:///Users/wzb/Desktop/项目/RailwaySystem/docs/database-v2/05_execution_contract.md) 与 [`RuoYi-Vue/sql/train/v2/000_tx_capability_probe.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/000_tx_capability_probe.sql)(核验 Gate A 事务原子性实证机制);
|
||||
3. **优先审查 Preflight 骨架校验**:[`RuoYi-Vue/sql/train/v2/000_preflight.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/000_preflight.sql)(核验集合比对 14 PK + 24 FK + 7 UNIQUE + 6 Identity + 9 Triggers);
|
||||
4. **优先审查 Verify 定义级验收**:[`RuoYi-Vue/sql/train/v2/010_verify.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/010_verify.sql)(核验定义级断言、CHECK 逻辑与默认值强断言);
|
||||
5. **优先审查核心建表与重构脚本**:[`002_create_new_tables.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/002_create_new_tables.sql) 与 [`004_rebuild_business_tables.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/004_rebuild_business_tables.sql)(核验无 `IF NOT EXISTS`、无业务默认值及住宿状态 0)。
|
||||
1. **优先审查 Round 2 修订记录表**:[`docs/database-v2/07_review_round2_changes.md`](07_review_round2_changes.md)(核验 R2-01 ~ R2-07 修复明细);
|
||||
2. **优先审查执行契约与探针**:[`docs/database-v2/05_execution_contract.md`](05_execution_contract.md) 与 [`RuoYi-Vue/sql/train/v2/000_tx_capability_probe.sql`](../../RuoYi-Vue/sql/train/v2/000_tx_capability_probe.sql)(核验 Gate A 事务原子性实证机制);
|
||||
3. **优先审查 Preflight 骨架校验**:[`RuoYi-Vue/sql/train/v2/000_preflight.sql`](../../RuoYi-Vue/sql/train/v2/000_preflight.sql)(核验集合比对 14 PK + 24 FK + 7 UNIQUE + 6 Identity + 9 Triggers);
|
||||
4. **优先审查 Verify 定义级验收**:[`RuoYi-Vue/sql/train/v2/010_verify.sql`](../../RuoYi-Vue/sql/train/v2/010_verify.sql)(核验定义级断言、CHECK 逻辑与默认值强断言);
|
||||
5. **优先审查核心建表与重构脚本**:[`002_create_new_tables.sql`](../../RuoYi-Vue/sql/train/v2/002_create_new_tables.sql) 与 [`004_rebuild_business_tables.sql`](../../RuoYi-Vue/sql/train/v2/004_rebuild_business_tables.sql)(核验无 `IF NOT EXISTS`、无业务默认值及住宿状态 0)。
|
||||
@@ -1,6 +1,6 @@
|
||||
# RailwaySystem 数据库 V2 表结构清单与模型比对 (Round 1 修订版)
|
||||
|
||||
> **技术依据**:[`RailwaySystem 数据库 V2 字段设计与 Kingbase DDL 规范 V1.0.md`](file:///Users/wzb/Desktop/项目/RailwaySystem/doc/RailwaySystem%20数据库%20V2%20字段设计与%20Kingbase%20DDL%20规范%20V1.0.md)
|
||||
> **技术依据**:[`RailwaySystem 数据库 V2 字段设计与 Kingbase DDL 规范 V1.0.md`](../archive/database-history/RailwaySystem%20数据库%20V2%20字段设计与%20Kingbase%20DDL%20规范%20V1.0.md)
|
||||
> **状态**:一期 21 张培训业务表全覆盖冻结清单(已完成 Round 1 字段与约束精确审查修订)。
|
||||
|
||||
---
|
||||
@@ -47,9 +47,9 @@ V2 架构通过三个领域核心 ID 彻底取代旧模型中跨多表重复冗
|
||||
|
||||
| 核心 ID 标识 | 业务实体表 | 业务语义 | 衍生与引用的业务表 |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| **`enrollment_id`** | [`train_enrollment`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/002_create_new_tables.sql#L72) | **某学员参加某一期培训班的参训全生命周期档案** | `train_accommodation`<br>`train_class_report`<br>`train_student_checkin`<br>`train_student_score`<br>`train_study_duration`<br>`train_student_portrait` |
|
||||
| **`plan_course_id`** | [`train_plan_course`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/002_create_new_tables.sql#L52) | **某一期培训班中包含的某一门具体课程实例** | `train_lesson`<br>`train_score_item`<br>`train_study_duration` |
|
||||
| **`lesson_id`** | [`train_lesson`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/002_create_new_tables.sql#L106) | **本期某门课程中的具体一次教学活动(课表课次)** | `train_student_checkin` |
|
||||
| **`enrollment_id`** | [`train_enrollment`](../../RuoYi-Vue/sql/train/v2/002_create_new_tables.sql#L72) | **某学员参加某一期培训班的参训全生命周期档案** | `train_accommodation`<br>`train_class_report`<br>`train_student_checkin`<br>`train_student_score`<br>`train_study_duration`<br>`train_student_portrait` |
|
||||
| **`plan_course_id`** | [`train_plan_course`](../../RuoYi-Vue/sql/train/v2/002_create_new_tables.sql#L52) | **某一期培训班中包含的某一门具体课程实例** | `train_lesson`<br>`train_score_item`<br>`train_study_duration` |
|
||||
| **`lesson_id`** | [`train_lesson`](../../RuoYi-Vue/sql/train/v2/002_create_new_tables.sql#L106) | **本期某门课程中的具体一次教学活动(课表课次)** | `train_student_checkin` |
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# RailwaySystem 数据库 V2 迁移执行计划 (Round 1 修订版)
|
||||
|
||||
> **执行基线**:KingbaseES V009R003C018 (`schema=public`)
|
||||
> **设计依据**:[`RailwaySystem 数据库 V2 字段设计与 Kingbase DDL 规范 V1.0.md`](file:///Users/wzb/Desktop/项目/RailwaySystem/doc/RailwaySystem%20数据库%20V2%20字段设计与%20Kingbase%20DDL%20规范%20V1.0.md) 及 Round 1 审查要求
|
||||
> **执行基线**:KingbaseES V009R003C018 (`schema=public`)
|
||||
> **设计依据**:[`RailwaySystem 数据库 V2 字段设计与 Kingbase DDL 规范 V1.0.md`](../archive/database-history/RailwaySystem%20数据库%20V2%20字段设计与%20Kingbase%20DDL%20规范%20V1.0.md) 及 Round 1 审查要求
|
||||
> **前置条件**:当前正式库中 `train_teacher` 精确包含 1 行数据,其余 13 张现有表均为 0 行。
|
||||
|
||||
---
|
||||
@@ -36,7 +36,7 @@ flowchart TD
|
||||
## 2. 阶段明细与操作规范
|
||||
|
||||
### Stage 0: 只读基线预检 Preflight
|
||||
- **执行脚本**:[`000_preflight.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/000_preflight.sql)
|
||||
- **执行脚本**:[`000_preflight.sql`](../../RuoYi-Vue/sql/train/v2/000_preflight.sql)
|
||||
- **目标**:纯只读排查当前环境确实精确处于 Phase 0.5 初始状态。
|
||||
- **核验准则**:
|
||||
- 14 张旧表全部存在,8 张 V2 新表均不存在;
|
||||
@@ -45,35 +45,35 @@ flowchart TD
|
||||
- **阻断控制**:任何一项不符合,立即抛出异常中止,拒绝进入未知环境。
|
||||
|
||||
### Stage 1: 数据快照备份
|
||||
- **执行脚本**:[`001_backup_current_schema.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/001_backup_current_schema.sql)
|
||||
- **执行脚本**:[`001_backup_current_schema.sql`](../../RuoYi-Vue/sql/train/v2/001_backup_current_schema.sql)
|
||||
- **目标**:在显式事务中为当前 14 张培训旧表建立物理快照(`bak_v1_*`)。
|
||||
- **防覆盖控制**:若检测到既有 `bak_v1_*` 已存在,立即抛出异常强阻断,杜绝二次执行覆盖最初 V1 备份。
|
||||
|
||||
### Stage 2: 物理结构准备
|
||||
- **执行脚本**:
|
||||
1. [`002_create_new_tables.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/002_create_new_tables.sql):新建 8 张 V2 表(`t_id` 必填,场地互斥 CHECK,分数非负 CHECK);
|
||||
2. [`003_alter_master_tables.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/003_alter_master_tables.sql):卸载主数据旧触发器,显式解除旧外键,调整 8 张主数据表结构(移除猜测默认值,加 `capacity > 0` CHECK);
|
||||
3. [`004_rebuild_business_tables.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/004_rebuild_business_tables.sql):校验 0 行后,显式解绑旧外键并常规 DROP,按照 `enrollment_id` / `lesson_id` 重建 5 张业务表(增加学时时间与单号系统匹配 CHECK)。
|
||||
1. [`002_create_new_tables.sql`](../../RuoYi-Vue/sql/train/v2/002_create_new_tables.sql):新建 8 张 V2 表(`t_id` 必填,场地互斥 CHECK,分数非负 CHECK);
|
||||
2. [`003_alter_master_tables.sql`](../../RuoYi-Vue/sql/train/v2/003_alter_master_tables.sql):卸载主数据旧触发器,显式解除旧外键,调整 8 张主数据表结构(移除猜测默认值,加 `capacity > 0` CHECK);
|
||||
3. [`004_rebuild_business_tables.sql`](../../RuoYi-Vue/sql/train/v2/004_rebuild_business_tables.sql):校验 0 行后,显式解绑旧外键并常规 DROP,按照 `enrollment_id` / `lesson_id` 重建 5 张业务表(增加学时时间与单号系统匹配 CHECK)。
|
||||
|
||||
### Stage 3: 完整性约束与索引注入
|
||||
- **执行脚本**:
|
||||
1. [`005_constraints.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/005_constraints.sql):集中为 21 张表建立 13 组 UNIQUE 约束、26 组 `ON DELETE NO ACTION` 外键与全量单行 CHECK 约束;
|
||||
2. [`006_indexes.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/006_indexes.sql):创建外键索引、排课多维复合冲突索引及双非空部分唯一索引。
|
||||
1. [`005_constraints.sql`](../../RuoYi-Vue/sql/train/v2/005_constraints.sql):集中为 21 张表建立 13 组 UNIQUE 约束、26 组 `ON DELETE NO ACTION` 外键与全量单行 CHECK 约束;
|
||||
2. [`006_indexes.sql`](../../RuoYi-Vue/sql/train/v2/006_indexes.sql):创建外键索引、排课多维复合冲突索引及双非空部分唯一索引。
|
||||
|
||||
### Stage 4: 数据平滑迁移与旧表淘汰
|
||||
- **执行脚本**:
|
||||
1. [`008_migrate_teacher.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/008_migrate_teacher.sql):将教师历史数据映射至新列,校验数据完整性后将 `status` 与 `del_flag` 固化为 NOT NULL,安全删除旧列;
|
||||
2. [`009_drop_legacy_score.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/009_drop_legacy_score.sql):前置 0 行校验后,显式解除历史约束并安全常规 DROP。
|
||||
1. [`008_migrate_teacher.sql`](../../RuoYi-Vue/sql/train/v2/008_migrate_teacher.sql):将教师历史数据映射至新列,校验数据完整性后将 `status` 与 `del_flag` 固化为 NOT NULL,安全删除旧列;
|
||||
2. [`009_drop_legacy_score.sql`](../../RuoYi-Vue/sql/train/v2/009_drop_legacy_score.sql):前置 0 行校验后,显式解除历史约束并安全常规 DROP。
|
||||
|
||||
### Stage 5: 全面自动化强断言验收
|
||||
- **执行脚本**:[`010_verify.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/010_verify.sql)
|
||||
- **执行脚本**:[`010_verify.sql`](../../RuoYi-Vue/sql/train/v2/010_verify.sql)
|
||||
- **目标**:实现“失败即失败”,逐表逐项强断言,出现任何偏差直接抛异常报错。
|
||||
|
||||
---
|
||||
|
||||
## 3. 业务字典脚本定位特别说明
|
||||
|
||||
[`007_dicts.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/007_dicts.sql) **在当前数据库结构迁移阶段明确跳过、不执行**。
|
||||
[`007_dicts.sql`](../../RuoYi-Vue/sql/train/v2/007_dicts.sql) **在当前数据库结构迁移阶段明确跳过、不执行**。
|
||||
原因:该脚本向 `sys_dict_*` 系统表写入业务字典数据,属于 API 契约与权限设计范畴。当前阶段保持数据库结构与应用层配置解耦,待后续权限设计阶段统一执行。
|
||||
|
||||
---
|
||||
@@ -81,4 +81,4 @@ flowchart TD
|
||||
## 4. 断点恢复与精确回滚机制
|
||||
|
||||
- **单脚本失败自动撤销**:由于各脚本包含显式 `BEGIN ... COMMIT`,单脚本内部任何错误会自动触发事务 ROLLBACK,数据库保持在上一个脚本执行成功的整齐状态;
|
||||
- **精确全量回滚保障**:若需全量还原,严格基于 [`rollback/000_phase05_exact_schema.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/rollback/000_phase05_exact_schema.sql) 的真实物理 DDL 重建结构,结合 `bak_v1_*` 快照灌回数据,彻底消除 CTAS 丢失结构缺陷。
|
||||
- **精确全量回滚保障**:若需全量还原,严格基于 [`rollback/000_phase05_exact_schema.sql`](../../RuoYi-Vue/sql/train/v2/rollback/000_phase05_exact_schema.sql) 的真实物理 DDL 重建结构,结合 `bak_v1_*` 快照灌回数据,彻底消除 CTAS 丢失结构缺陷。
|
||||
@@ -1,7 +1,7 @@
|
||||
# RailwaySystem 数据库 V2 约束与索引技术审查报告 (Round 1 修订版)
|
||||
|
||||
> **审查依据**:[`RailwaySystem 数据库 V2 字段设计与 Kingbase DDL 规范 V1.0.md`](file:///Users/wzb/Desktop/项目/RailwaySystem/doc/RailwaySystem%20数据库%20V2%20字段设计与%20Kingbase%20DDL%20规范%20V1.0.md) 及 Round 1 审查要求
|
||||
> **审查对象**:[`005_constraints.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/005_constraints.sql) 与 [`006_indexes.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/006_indexes.sql)
|
||||
> **审查依据**:[`RailwaySystem 数据库 V2 字段设计与 Kingbase DDL 规范 V1.0.md`](../archive/database-history/RailwaySystem%20数据库%20V2%20字段设计与%20Kingbase%20DDL%20规范%20V1.0.md) 及 Round 1 审查要求
|
||||
> **审查对象**:[`005_constraints.sql`](../../RuoYi-Vue/sql/train/v2/005_constraints.sql) 与 [`006_indexes.sql`](../../RuoYi-Vue/sql/train/v2/006_indexes.sql)
|
||||
|
||||
---
|
||||
|
||||
@@ -114,7 +114,7 @@ V2 DDL 共注入 13 组核心业务 UNIQUE 约束:
|
||||
|
||||
## 5. 索引(INDEX)审查
|
||||
|
||||
[`006_indexes.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/006_indexes.sql) 包含外键索引、排课多维复合索引与部分唯一索引:
|
||||
[`006_indexes.sql`](../../RuoYi-Vue/sql/train/v2/006_indexes.sql) 包含外键索引、排课多维复合索引与部分唯一索引:
|
||||
|
||||
1. **外键索引**:为所有 26 组外键列配置独立 B-Tree 索引,杜绝父表更新锁定子表或关联全表扫描;
|
||||
2. **排课多维冲突高频复合索引**:
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# RailwaySystem 数据库 V2 关键设计风险深度审查报告 (R-01 ~ R-17)
|
||||
|
||||
> **审查定位**:数据库底层引擎兼容性、约束边界、数据一致性与应用层 Service 协同审查
|
||||
> **技术基线**:KingbaseES V009R003C018 (`schema=public`, `database_mode=mysql`)、MyBatis 3.5.x、RuoYi-Vue 基础架构
|
||||
> **审查定位**:数据库底层引擎兼容性、约束边界、数据一致性与应用层 Service 协同审查
|
||||
> **技术基线**:KingbaseES V009R003C018 (`schema=public`, `database_mode=mysql`)、MyBatis 3.5.x、RuoYi-Vue 基础架构
|
||||
> **版本状态**:Round 2 审查最终静态收尾版(固化架构决策 A/B,解耦 source_type 语义,清除业务选择型默认值)
|
||||
|
||||
---
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# RailwaySystem 数据库 V2 迁移执行契约 (Execution Contract)
|
||||
|
||||
> **适用范围**:数据库 V2 迁移在测试环境与未来生产环境中的正式执行规范
|
||||
> **技术基线**:KingbaseES V009R003C018 (`database=training`, `schema=public`, `database_mode=mysql`)
|
||||
> **适用范围**:数据库 V2 迁移在测试环境与未来生产环境中的正式执行规范
|
||||
> **技术基线**:KingbaseES V009R003C018 (`database=training`, `schema=public`, `database_mode=mysql`)
|
||||
> **核心原则**:**双门禁强准入 (Gate A/B)、单文件显式事务、纯 SQL 执行器兼容、失败即刻熔断**
|
||||
|
||||
---
|
||||
@@ -43,18 +43,18 @@ graph TD
|
||||
|
||||
| 阶段 | 脚本文件 | 事务边界 | 失败处理与影响 |
|
||||
| :---: | :--- | :---: | :--- |
|
||||
| **Gate A** | [`000_tx_capability_probe.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/000_tx_capability_probe.sql) | 探针显式事务 | **强阻断**:实证探测实例 DDL 回滚能力。若表残留立即抛出异常并中止,严禁进入后续阶段 |
|
||||
| **Gate B** | [`000_preflight.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/000_preflight.sql) | 纯只读骨架断言 | **强阻断**:集合差集校验 14旧表PK、24旧表FK、7组UNIQUE、6个identity主键、9触发器与行数基线,任何不符立即中止 |
|
||||
| **Stage 1** | [`001_backup_current_schema.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/001_backup_current_schema.sql) | `BEGIN ... COMMIT` | **强阻断**:全量快照 14 张表至 `bak_v1_*`;若已存在备份表则阻断;失败全单回滚 |
|
||||
| **Stage 2** | [`002_create_new_tables.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/002_create_new_tables.sql) | `BEGIN ... COMMIT` | 创建 V2 新增 8 张表;严禁 `IF NOT EXISTS`;失败事务回滚,新表全部撤销 |
|
||||
| **Stage 3** | [`003_alter_master_tables.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/003_alter_master_tables.sql) | `BEGIN ... COMMIT` | 调整 8 张主数据表;移除旧触发器与阻断外键,添加 V2 新列;失败事务回滚 |
|
||||
| **Stage 4** | [`004_rebuild_business_tables.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/004_rebuild_business_tables.sql) | `BEGIN ... COMMIT` | 断言 0 行后重构 5 张业务表;失败事务回滚,原表结构保持不变 |
|
||||
| **Stage 5** | [`005_constraints.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/005_constraints.sql) | `BEGIN ... COMMIT` | 集中注入 13 组 UNIQUE、26 组 FK (NO ACTION)、9 组 CHECK;失败事务回滚 |
|
||||
| **Stage 6** | [`006_indexes.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/006_indexes.sql) | `BEGIN ... COMMIT` | 创建外键索引、排课多维复合索引及双非空部分唯一索引;失败事务回滚 |
|
||||
| **-** | [`007_dicts.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/007_dicts.sql) | - | **【本迁移流水线跳过不执行】** 业务字典留待应用接口及权限配置阶段接入 |
|
||||
| **Stage 7** | [`008_migrate_teacher.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/008_migrate_teacher.sql) | `BEGIN ... COMMIT` | 迁移并断言教师 1 行数据,固化 NOT NULL,安全清理旧列;失败事务回滚 |
|
||||
| **Stage 8** | [`009_drop_legacy_score.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/009_drop_legacy_score.sql) | `BEGIN ... COMMIT` | 断言 0 行后下线旧表 `train_score_info`;失败事务回滚,旧表完好保留 |
|
||||
| **Stage 9** | [`010_verify.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/010_verify.sql) | 纯只读深度断言 | **强阻断**:定义级全量验收 21 表、UNIQUE 列清单、FK NO ACTION、CHECK 表达式、12 Identity、默认值及系统表零受损 |
|
||||
| **Gate A** | [`000_tx_capability_probe.sql`](../../RuoYi-Vue/sql/train/v2/000_tx_capability_probe.sql) | 探针显式事务 | **强阻断**:实证探测实例 DDL 回滚能力。若表残留立即抛出异常并中止,严禁进入后续阶段 |
|
||||
| **Gate B** | [`000_preflight.sql`](../../RuoYi-Vue/sql/train/v2/000_preflight.sql) | 纯只读骨架断言 | **强阻断**:集合差集校验 14旧表PK、24旧表FK、7组UNIQUE、6个identity主键、9触发器与行数基线,任何不符立即中止 |
|
||||
| **Stage 1** | [`001_backup_current_schema.sql`](../../RuoYi-Vue/sql/train/v2/001_backup_current_schema.sql) | `BEGIN ... COMMIT` | **强阻断**:全量快照 14 张表至 `bak_v1_*`;若已存在备份表则阻断;失败全单回滚 |
|
||||
| **Stage 2** | [`002_create_new_tables.sql`](../../RuoYi-Vue/sql/train/v2/002_create_new_tables.sql) | `BEGIN ... COMMIT` | 创建 V2 新增 8 张表;严禁 `IF NOT EXISTS`;失败事务回滚,新表全部撤销 |
|
||||
| **Stage 3** | [`003_alter_master_tables.sql`](../../RuoYi-Vue/sql/train/v2/003_alter_master_tables.sql) | `BEGIN ... COMMIT` | 调整 8 张主数据表;移除旧触发器与阻断外键,添加 V2 新列;失败事务回滚 |
|
||||
| **Stage 4** | [`004_rebuild_business_tables.sql`](../../RuoYi-Vue/sql/train/v2/004_rebuild_business_tables.sql) | `BEGIN ... COMMIT` | 断言 0 行后重构 5 张业务表;失败事务回滚,原表结构保持不变 |
|
||||
| **Stage 5** | [`005_constraints.sql`](../../RuoYi-Vue/sql/train/v2/005_constraints.sql) | `BEGIN ... COMMIT` | 集中注入 13 组 UNIQUE、26 组 FK (NO ACTION)、9 组 CHECK;失败事务回滚 |
|
||||
| **Stage 6** | [`006_indexes.sql`](../../RuoYi-Vue/sql/train/v2/006_indexes.sql) | `BEGIN ... COMMIT` | 创建外键索引、排课多维复合索引及双非空部分唯一索引;失败事务回滚 |
|
||||
| **-** | [`007_dicts.sql`](../../RuoYi-Vue/sql/train/v2/007_dicts.sql) | - | **【本迁移流水线跳过不执行】** 业务字典留待应用接口及权限配置阶段接入 |
|
||||
| **Stage 7** | [`008_migrate_teacher.sql`](../../RuoYi-Vue/sql/train/v2/008_migrate_teacher.sql) | `BEGIN ... COMMIT` | 迁移并断言教师 1 行数据,固化 NOT NULL,安全清理旧列;失败事务回滚 |
|
||||
| **Stage 8** | [`009_drop_legacy_score.sql`](../../RuoYi-Vue/sql/train/v2/009_drop_legacy_score.sql) | `BEGIN ... COMMIT` | 断言 0 行后下线旧表 `train_score_info`;失败事务回滚,旧表完好保留 |
|
||||
| **Stage 9** | [`010_verify.sql`](../../RuoYi-Vue/sql/train/v2/010_verify.sql) | 纯只读深度断言 | **强阻断**:定义级全量验收 21 表、UNIQUE 列清单、FK NO ACTION、CHECK 表达式、12 Identity、默认值及系统表零受损 |
|
||||
|
||||
---
|
||||
|
||||
@@ -87,6 +87,6 @@ graph TD
|
||||
- 若流水线中任何一个脚本执行报错,**严禁跳过该步骤继续执行后续脚本**!
|
||||
- 单文件具备 `BEGIN ... COMMIT`,当前失败脚本的所有物理改动会自动回滚撤销。
|
||||
2. **应急回滚调用准则**:
|
||||
- 若在 Stage 2 ~ Stage 8 中途发生不可调和的异常,必须立即暂停,并由 DBA 评估调用 [`rollback/`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/rollback/) 脚本;
|
||||
- 若在 Stage 2 ~ Stage 8 中途发生不可调和的异常,必须立即暂停,并由 DBA 评估调用 [`rollback/`](../../RuoYi-Vue/sql/train/v2/rollback/) 脚本;
|
||||
- 回滚流水线严格按照:`001_rollback_new_tables.sql` -> `002_rollback_modified_tables.sql` -> `003_restore_legacy_score.sql` 倒序执行;
|
||||
- 回滚完毕后,必须运行 `000_preflight.sql` 校验是否完全恢复至 Phase 0.5 精确基线。
|
||||
@@ -1,7 +1,7 @@
|
||||
# RailwaySystem 数据库 V2 DDL Review 修订记录表 (Round 1)
|
||||
|
||||
> **评审周期**:Round 1
|
||||
> **评审基线**:高级技术负责人第一轮人工 Review 意见
|
||||
> **评审周期**:Round 1
|
||||
> **评审基线**:高级技术负责人第一轮人工 Review 意见
|
||||
> **状态**:**已全部闭环解决 (100% Resolved)**
|
||||
|
||||
---
|
||||
@@ -10,20 +10,20 @@
|
||||
|
||||
| 问题编号 | 模块分类 | 原问题描述 | 涉及修改文件 | 具体修改内容与工程落地 | 解决状态 |
|
||||
| :---: | :---: | :--- | :--- | :--- | :---: |
|
||||
| **REV-01** | **P0 架构** | 破坏性迁移脚本无事务边界,遇错可能部分提交;包含客户端 `\echo` 指令 | [`001`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/001_backup_current_schema.sql)~[`009`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/009_drop_legacy_score.sql), [`05_execution_contract.md`](file:///Users/wzb/Desktop/项目/RailwaySystem/docs/database-v2/05_execution_contract.md) | 所有物理 DDL 脚本全面使用 `BEGIN ... COMMIT` 包裹,彻底删除 `\echo` 改造为纯 SQL,建立统一执行契约文档 | **已解决** |
|
||||
| **REV-02** | **P0 基线** | 缺乏迁移前置环境基线校验,可能在未知或已被破坏的环境中误执行 | [`000_preflight.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/000_preflight.sql) | 新增前置纯只读检查脚本,强校验当前环境必须精确符合 Phase 0.5 状态(14表、行数、触发器等),任何不符立即抛出异常中止 | **已解决** |
|
||||
| **REV-03** | **P0 备份** | 001 脚本使用 `DROP TABLE IF EXISTS bak_v1_*`,误执行可能覆盖最初 V1 备份 | [`001_backup_current_schema.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/001_backup_current_schema.sql) | 增加强防重校验,若已存在任意 `bak_v1_*` 表立即抛异常阻断,严禁自动 DROP 覆盖既有历史备份 | **已解决** |
|
||||
| **REV-04** | **P0 回滚** | CTAS 无法保留约束、默认值、触发器和 Identity,不能作为回滚结构来源 | [`rollback/000_phase05_exact_schema.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/rollback/000_phase05_exact_schema.sql), [`rollback/002`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/rollback/002_rollback_modified_tables.sql), [`rollback/003`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/rollback/003_restore_legacy_score.sql) | 新增标准 Phase 0.5 完整物理 DDL;重构回滚脚本,严格基于真实 DDL 重建结构,仅用 `bak_v1_*` 还原数据,解耦结构与数据 | **已解决** |
|
||||
| **REV-05** | **P0 验收** | 010_verify 很多检查仅输出文本,最终未强行阻断,存在假阳性漏报隐患 | [`010_verify.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/010_verify.sql) | 重构为真正的“失败即失败”,逐表、逐列、逐外键(删除规则)、逐唯一约束、逐索引进行 PL/pgSQL 强断言,出现任何不符立即抛异常终止 | **已解决** |
|
||||
| **REV-06** | **字段规范** | `train_lesson.t_id` 原定义为可空,与排课必要性要求冲突 | [`002_create_new_tables.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/002_create_new_tables.sql) | 将 `train_lesson.t_id` 设为 `VARCHAR(32) NOT NULL`,并在 010 中强断言 | **已解决** |
|
||||
| **REV-07** | **字段规范** | `train_teacher` 新增的 `status` 与 `del_flag` 未在迁移后固化为 NOT NULL | [`008_migrate_teacher.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/008_migrate_teacher.sql) | 迁移历史教师数据并完成数据完整性校验后,显式执行 `ALTER COLUMN SET NOT NULL` | **已解决** |
|
||||
| **REV-08** | **字段规范** | `train_student_score.score` 存在未经确认的 `DEFAULT 0`,掩盖未录入状态 | [`002_create_new_tables.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/002_create_new_tables.sql), [`005_constraints.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/005_constraints.sql) | 删除 `DEFAULT 0`,保留 `NOT NULL`,增加 `CHECK (score >= 0.00)`;未录成绩不建行,0 分代表真实得分 | **已解决** |
|
||||
| **REV-09** | **字段规范** | 宿舍表 `dorm_floor` 默认值 `'1'` 和 `capacity` 默认值 `4` 属于 AI 猜测 | [`003_alter_master_tables.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/003_alter_master_tables.sql), [`005_constraints.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/005_constraints.sql) | 移除所有业务默认值猜测,字段保持 NOT NULL 由管理员录入,增加 `CHECK (capacity > 0)` 约束 | **已解决** |
|
||||
| **REV-10** | **字段规范** | `train_electronic_board.board_name` 包含 `DEFAULT ''` 空串伪造合法值 | [`003_alter_master_tables.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/003_alter_master_tables.sql) | 彻底移除 `DEFAULT ''`,改为 `VARCHAR(100) NOT NULL`,由用户录入明确设备名 | **已解决** |
|
||||
| **REV-11** | **业务语义** | 学员来源出现“统招学员”等高校概念,两处 `source_type` 含义含糊 | [`002`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/002_create_new_tables.sql), [`003`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/003_alter_master_tables.sql), [`007_dicts.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/007_dicts.sql) | 彻底剥离高校术语,区分:`student.source_type` 为主档来源(管理员/Excel/平台同步);`enrollment.source_type` 为参训名单来源(指派/报名/推荐/调训) | **已解决** |
|
||||
| **REV-12** | **业务语义** | 教学资源类型字典与 V2 冻结稿存在分类差异 | [`002_create_new_tables.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/002_create_new_tables.sql), [`007_dicts.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/007_dicts.sql) | 严格对齐 V2 冻结稿:1文档, 2视频, 3 3D模型, 4 VR资源, 5外部教学链接, 6其他 | **已解决** |
|
||||
| **REV-13** | **约束安全** | 学习记录部分唯一索引当 `source_system = NULL` 且 `source_event_id != NULL` 时发生幂等逃逸 | [`004`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/004_rebuild_business_tables.sql), [`005`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/005_constraints.sql), [`006_indexes.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/006_indexes.sql) | 索引条件修正为双非空 `WHERE source_system IS NOT NULL AND source_event_id IS NOT NULL`;增加 CHECK 约束强制单号非空时系统名必填 | **已解决** |
|
||||
| **REV-14** | **依赖解耦** | 脚本滥用 `DROP TABLE ... CASCADE` 掩盖未预期依赖 | [`004`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/004_rebuild_business_tables.sql), [`009`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/009_drop_legacy_score.sql), [`rollback`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/rollback/) | 迁移与回滚脚本全面显式解除已知约束,改用常规 `DROP TABLE`,禁止使用 CASCADE 掩盖隐式依赖 | **已解决** |
|
||||
| **REV-15** | **数据一致** | 排课场地类型与教室/实训场地未在数据库层实现单行互斥;学时时间未核验先后 | [`002`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/002_create_new_tables.sql), [`004`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/004_rebuild_business_tables.sql), [`005_constraints.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/005_constraints.sql) | `train_lesson` 增加 `chk_lesson_venue` 互斥 CHECK;`train_study_duration` 增加 `end_time >= start_time` CHECK 约束 | **已解决** |
|
||||
| **REV-16** | **风险扩展** | 风险报告需要补充跨班级关联、班牌一致性、宿舍重叠计算等高级业务风险 | [`04_risk_review.md`](file:///Users/wzb/Desktop/项目/RailwaySystem/docs/database-v2/04_risk_review.md) | 在文档中新增 **R-11 至 R-15** 五项重大业务与并发一致性风险深度剖析 | **已解决** |
|
||||
| **REV-17** | **执行控制** | 结构迁移阶段执行 007_dicts 会污染空库测试基线 | [`02_migration_plan.md`](file:///Users/wzb/Desktop/项目/RailwaySystem/docs/database-v2/02_migration_plan.md), [`05_execution_contract.md`](file:///Users/wzb/Desktop/项目/RailwaySystem/docs/database-v2/05_execution_contract.md) | 正式明确 007 在本阶段暂不执行,等后续 API/权限设计阶段统一执行 | **已解决** |
|
||||
| **REV-01** | **P0 架构** | 破坏性迁移脚本无事务边界,遇错可能部分提交;包含客户端 `\echo` 指令 | [`001`](../../RuoYi-Vue/sql/train/v2/001_backup_current_schema.sql)~[`009`](../../RuoYi-Vue/sql/train/v2/009_drop_legacy_score.sql), [`05_execution_contract.md`](05_execution_contract.md) | 所有物理 DDL 脚本全面使用 `BEGIN ... COMMIT` 包裹,彻底删除 `\echo` 改造为纯 SQL,建立统一执行契约文档 | **已解决** |
|
||||
| **REV-02** | **P0 基线** | 缺乏迁移前置环境基线校验,可能在未知或已被破坏的环境中误执行 | [`000_preflight.sql`](../../RuoYi-Vue/sql/train/v2/000_preflight.sql) | 新增前置纯只读检查脚本,强校验当前环境必须精确符合 Phase 0.5 状态(14表、行数、触发器等),任何不符立即抛出异常中止 | **已解决** |
|
||||
| **REV-03** | **P0 备份** | 001 脚本使用 `DROP TABLE IF EXISTS bak_v1_*`,误执行可能覆盖最初 V1 备份 | [`001_backup_current_schema.sql`](../../RuoYi-Vue/sql/train/v2/001_backup_current_schema.sql) | 增加强防重校验,若已存在任意 `bak_v1_*` 表立即抛异常阻断,严禁自动 DROP 覆盖既有历史备份 | **已解决** |
|
||||
| **REV-04** | **P0 回滚** | CTAS 无法保留约束、默认值、触发器和 Identity,不能作为回滚结构来源 | [`rollback/000_phase05_exact_schema.sql`](../../RuoYi-Vue/sql/train/v2/rollback/000_phase05_exact_schema.sql), [`rollback/002`](../../RuoYi-Vue/sql/train/v2/rollback/002_rollback_modified_tables.sql), [`rollback/003`](../../RuoYi-Vue/sql/train/v2/rollback/003_restore_legacy_score.sql) | 新增标准 Phase 0.5 完整物理 DDL;重构回滚脚本,严格基于真实 DDL 重建结构,仅用 `bak_v1_*` 还原数据,解耦结构与数据 | **已解决** |
|
||||
| **REV-05** | **P0 验收** | 010_verify 很多检查仅输出文本,最终未强行阻断,存在假阳性漏报隐患 | [`010_verify.sql`](../../RuoYi-Vue/sql/train/v2/010_verify.sql) | 重构为真正的“失败即失败”,逐表、逐列、逐外键(删除规则)、逐唯一约束、逐索引进行 PL/pgSQL 强断言,出现任何不符立即抛异常终止 | **已解决** |
|
||||
| **REV-06** | **字段规范** | `train_lesson.t_id` 原定义为可空,与排课必要性要求冲突 | [`002_create_new_tables.sql`](../../RuoYi-Vue/sql/train/v2/002_create_new_tables.sql) | 将 `train_lesson.t_id` 设为 `VARCHAR(32) NOT NULL`,并在 010 中强断言 | **已解决** |
|
||||
| **REV-07** | **字段规范** | `train_teacher` 新增的 `status` 与 `del_flag` 未在迁移后固化为 NOT NULL | [`008_migrate_teacher.sql`](../../RuoYi-Vue/sql/train/v2/008_migrate_teacher.sql) | 迁移历史教师数据并完成数据完整性校验后,显式执行 `ALTER COLUMN SET NOT NULL` | **已解决** |
|
||||
| **REV-08** | **字段规范** | `train_student_score.score` 存在未经确认的 `DEFAULT 0`,掩盖未录入状态 | [`002_create_new_tables.sql`](../../RuoYi-Vue/sql/train/v2/002_create_new_tables.sql), [`005_constraints.sql`](../../RuoYi-Vue/sql/train/v2/005_constraints.sql) | 删除 `DEFAULT 0`,保留 `NOT NULL`,增加 `CHECK (score >= 0.00)`;未录成绩不建行,0 分代表真实得分 | **已解决** |
|
||||
| **REV-09** | **字段规范** | 宿舍表 `dorm_floor` 默认值 `'1'` 和 `capacity` 默认值 `4` 属于 AI 猜测 | [`003_alter_master_tables.sql`](../../RuoYi-Vue/sql/train/v2/003_alter_master_tables.sql), [`005_constraints.sql`](../../RuoYi-Vue/sql/train/v2/005_constraints.sql) | 移除所有业务默认值猜测,字段保持 NOT NULL 由管理员录入,增加 `CHECK (capacity > 0)` 约束 | **已解决** |
|
||||
| **REV-10** | **字段规范** | `train_electronic_board.board_name` 包含 `DEFAULT ''` 空串伪造合法值 | [`003_alter_master_tables.sql`](../../RuoYi-Vue/sql/train/v2/003_alter_master_tables.sql) | 彻底移除 `DEFAULT ''`,改为 `VARCHAR(100) NOT NULL`,由用户录入明确设备名 | **已解决** |
|
||||
| **REV-11** | **业务语义** | 学员来源出现“统招学员”等高校概念,两处 `source_type` 含义含糊 | [`002`](../../RuoYi-Vue/sql/train/v2/002_create_new_tables.sql), [`003`](../../RuoYi-Vue/sql/train/v2/003_alter_master_tables.sql), [`007_dicts.sql`](../../RuoYi-Vue/sql/train/v2/007_dicts.sql) | 彻底剥离高校术语,区分:`student.source_type` 为主档来源(管理员/Excel/平台同步);`enrollment.source_type` 为参训名单来源(指派/报名/推荐/调训) | **已解决** |
|
||||
| **REV-12** | **业务语义** | 教学资源类型字典与 V2 冻结稿存在分类差异 | [`002_create_new_tables.sql`](../../RuoYi-Vue/sql/train/v2/002_create_new_tables.sql), [`007_dicts.sql`](../../RuoYi-Vue/sql/train/v2/007_dicts.sql) | 严格对齐 V2 冻结稿:1文档, 2视频, 3 3D模型, 4 VR资源, 5外部教学链接, 6其他 | **已解决** |
|
||||
| **REV-13** | **约束安全** | 学习记录部分唯一索引当 `source_system = NULL` 且 `source_event_id != NULL` 时发生幂等逃逸 | [`004`](../../RuoYi-Vue/sql/train/v2/004_rebuild_business_tables.sql), [`005`](../../RuoYi-Vue/sql/train/v2/005_constraints.sql), [`006_indexes.sql`](../../RuoYi-Vue/sql/train/v2/006_indexes.sql) | 索引条件修正为双非空 `WHERE source_system IS NOT NULL AND source_event_id IS NOT NULL`;增加 CHECK 约束强制单号非空时系统名必填 | **已解决** |
|
||||
| **REV-14** | **依赖解耦** | 脚本滥用 `DROP TABLE ... CASCADE` 掩盖未预期依赖 | [`004`](../../RuoYi-Vue/sql/train/v2/004_rebuild_business_tables.sql), [`009`](../../RuoYi-Vue/sql/train/v2/009_drop_legacy_score.sql), [`rollback`](../../RuoYi-Vue/sql/train/v2/rollback/) | 迁移与回滚脚本全面显式解除已知约束,改用常规 `DROP TABLE`,禁止使用 CASCADE 掩盖隐式依赖 | **已解决** |
|
||||
| **REV-15** | **数据一致** | 排课场地类型与教室/实训场地未在数据库层实现单行互斥;学时时间未核验先后 | [`002`](../../RuoYi-Vue/sql/train/v2/002_create_new_tables.sql), [`004`](../../RuoYi-Vue/sql/train/v2/004_rebuild_business_tables.sql), [`005_constraints.sql`](../../RuoYi-Vue/sql/train/v2/005_constraints.sql) | `train_lesson` 增加 `chk_lesson_venue` 互斥 CHECK;`train_study_duration` 增加 `end_time >= start_time` CHECK 约束 | **已解决** |
|
||||
| **REV-16** | **风险扩展** | 风险报告需要补充跨班级关联、班牌一致性、宿舍重叠计算等高级业务风险 | [`04_risk_review.md`](04_risk_review.md) | 在文档中新增 **R-11 至 R-15** 五项重大业务与并发一致性风险深度剖析 | **已解决** |
|
||||
| **REV-17** | **执行控制** | 结构迁移阶段执行 007_dicts 会污染空库测试基线 | [`02_migration_plan.md`](02_migration_plan.md), [`05_execution_contract.md`](05_execution_contract.md) | 正式明确 007 在本阶段暂不执行,等后续 API/权限设计阶段统一执行 | **已解决** |
|
||||
@@ -1,7 +1,7 @@
|
||||
# RailwaySystem 数据库 V2 DDL Review Round 2 变更记录 (最终静态收尾)
|
||||
|
||||
> **修订阶段**:数据库 V2 DDL Review Round 2(最终静态收尾)
|
||||
> **最高依据**:`RailwaySystem 数据库 V2 字段设计与 Kingbase DDL 规范 V1.0.md`
|
||||
> **修订阶段**:数据库 V2 DDL Review Round 2(最终静态收尾)
|
||||
> **最高依据**:`RailwaySystem 数据库 V2 字段设计与 Kingbase DDL 规范 V1.0.md`
|
||||
> **修订目标**:解决高级技术负责人 Final Static Review 提出的 7 个核心静态问题(R2-01 ~ R2-07),使数据库 V2 DDL 达到“允许进入测试迁移”状态。
|
||||
|
||||
---
|
||||
@@ -15,8 +15,8 @@
|
||||
accommodation_status SMALLINT NOT NULL DEFAULT 1
|
||||
```
|
||||
- **修改文件**:
|
||||
- [`002_create_new_tables.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/002_create_new_tables.sql#L142)
|
||||
- [`010_verify.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/010_verify.sql)
|
||||
- [`002_create_new_tables.sql`](../../RuoYi-Vue/sql/train/v2/002_create_new_tables.sql#L142)
|
||||
- [`010_verify.sql`](../../RuoYi-Vue/sql/train/v2/010_verify.sql)
|
||||
- **修改后实现**:
|
||||
```sql
|
||||
accommodation_status SMALLINT NOT NULL DEFAULT 0
|
||||
@@ -37,9 +37,9 @@
|
||||
- `train_student_checkin.checkin_way`: `DEFAULT 1`
|
||||
- `train_class_report.verify_result`: `DEFAULT 1`
|
||||
- **修改文件**:
|
||||
- [`002_create_new_tables.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/002_create_new_tables.sql)
|
||||
- [`004_rebuild_business_tables.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/004_rebuild_business_tables.sql)
|
||||
- [`010_verify.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/010_verify.sql)
|
||||
- [`002_create_new_tables.sql`](../../RuoYi-Vue/sql/train/v2/002_create_new_tables.sql)
|
||||
- [`004_rebuild_business_tables.sql`](../../RuoYi-Vue/sql/train/v2/004_rebuild_business_tables.sql)
|
||||
- [`010_verify.sql`](../../RuoYi-Vue/sql/train/v2/010_verify.sql)
|
||||
- **修改后实现**:
|
||||
上述 6 个字段全部移除 `DEFAULT` 声明,仅保留 `SMALLINT NOT NULL`。`010_verify.sql` 中增加只读断言:上述字段的 `column_default` 必须全部为 `NULL`,若存在默认值当场抛异常。
|
||||
- **验证方式**:静态 grep 全局检索与 `010_verify.sql` 断言校验。
|
||||
@@ -54,9 +54,9 @@
|
||||
COMMENT ON COLUMN train_enrollment.source_type IS '进入本期培训名单的来源 (1:组织指派, 2:自主报名, 3:单位推荐, 4:统一调训)';
|
||||
```
|
||||
- **修改文件**:
|
||||
- [`002_create_new_tables.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/002_create_new_tables.sql#L94)
|
||||
- [`04_risk_review.md`](file:///Users/wzb/Desktop/项目/RailwaySystem/docs/database-v2/04_risk_review.md)
|
||||
- [`01_table_inventory.md`](file:///Users/wzb/Desktop/项目/RailwaySystem/docs/database-v2/01_table_inventory.md)
|
||||
- [`002_create_new_tables.sql`](../../RuoYi-Vue/sql/train/v2/002_create_new_tables.sql#L94)
|
||||
- [`04_risk_review.md`](04_risk_review.md)
|
||||
- [`01_table_inventory.md`](01_table_inventory.md)
|
||||
- **修改后实现**:
|
||||
- 注释修改为:
|
||||
```sql
|
||||
@@ -74,7 +74,7 @@
|
||||
- **问题**:原 `000_preflight.sql` 仅做了表存在性、行数和少量代表性约束判断,未能覆盖完整的 Phase 0.5 物理结构骨架,若存在“少一个正确FK + 多一个错误FK”的对冲情况可能假阳性通过。
|
||||
- **原实现**:部分抽检 + 触发器循环判断。
|
||||
- **修改文件**:
|
||||
- [`000_preflight.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/000_preflight.sql)
|
||||
- [`000_preflight.sql`](../../RuoYi-Vue/sql/train/v2/000_preflight.sql)
|
||||
- **修改后实现**:
|
||||
采用 CTE `VALUES(...)` 构造预期基线集合,与系统目录做全集合差集比对:
|
||||
- 14 个旧表 PK (table_name + constraint_name + column_name)
|
||||
@@ -94,7 +94,7 @@
|
||||
- **问题**:原 010 验收脚本主要核验对象名称存在性,对约束内部的具体列排序、外键删除规则、CHECK 表达式逻辑等未做定义级校验。
|
||||
- **原实现**:检查约束名称与 `count(*) = 26` 等数量判断。
|
||||
- **修改文件**:
|
||||
- [`010_verify.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/010_verify.sql)
|
||||
- [`010_verify.sql`](../../RuoYi-Vue/sql/train/v2/010_verify.sql)
|
||||
- **修改后实现**:
|
||||
- **UNIQUE 验收**:必须断言 `table_name` + `constraint_name` + `column_list`(如 `train_enrollment(plan_id, student_id)`);
|
||||
- **FK 验收**:必须断言源表、源列、目标表、目标列及 `delete_rule = 'NO ACTION'`,严禁 CASCADE;
|
||||
@@ -114,9 +114,9 @@
|
||||
- `ADD COLUMN IF NOT EXISTS ...` (003)
|
||||
- `CREATE INDEX IF NOT EXISTS ...` (006)
|
||||
- **修改文件**:
|
||||
- [`002_create_new_tables.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/002_create_new_tables.sql)
|
||||
- [`003_alter_master_tables.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/003_alter_master_tables.sql)
|
||||
- [`006_indexes.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/006_indexes.sql)
|
||||
- [`002_create_new_tables.sql`](../../RuoYi-Vue/sql/train/v2/002_create_new_tables.sql)
|
||||
- [`003_alter_master_tables.sql`](../../RuoYi-Vue/sql/train/v2/003_alter_master_tables.sql)
|
||||
- [`006_indexes.sql`](../../RuoYi-Vue/sql/train/v2/006_indexes.sql)
|
||||
- **修改后实现**:
|
||||
- 002 中 8 张新增表全部改为严格 `CREATE TABLE`;
|
||||
- 003 中新增字段全部改为严格 `ADD COLUMN`;
|
||||
@@ -131,8 +131,8 @@
|
||||
- **问题**:迁移执行契约依赖事务的原子性(`BEGIN ... COMMIT / ROLLBACK`)。当前环境为 KingbaseES V009R003C018 (`database_mode=mysql`),需在正式执行 V2 前实证验证当前数据库实例对 DDL 的事务回滚支持能力。
|
||||
- **原实现**:未设立 DDL 事务能力前置探针。
|
||||
- **修改文件**:
|
||||
- 新增:[`RuoYi-Vue/sql/train/v2/000_tx_capability_probe.sql`](file:///Users/wzb/Desktop/项目/RailwaySystem/RuoYi-Vue/sql/train/v2/000_tx_capability_probe.sql)
|
||||
- [`05_execution_contract.md`](file:///Users/wzb/Desktop/项目/RailwaySystem/docs/database-v2/05_execution_contract.md)
|
||||
- 新增:[`RuoYi-Vue/sql/train/v2/000_tx_capability_probe.sql`](../../RuoYi-Vue/sql/train/v2/000_tx_capability_probe.sql)
|
||||
- [`05_execution_contract.md`](05_execution_contract.md)
|
||||
- **修改后实现**:
|
||||
- 创建独立的安全探针脚本(作为 Gate A):
|
||||
- **Phase A**:`BEGIN -> CREATE TABLE public.__railway_v2_tx_probe -> ALTER TABLE -> ROLLBACK`;
|
||||
|
||||
Reference in new issue
Block a user