7.2 KiB
7.2 KiB
RailwaySystem 数据库 V2 DDL Review 修订记录表 (Round 1)
评审周期:Round 1 评审基线:高级技术负责人第一轮人工 Review 意见 状态:已全部闭环解决 (100% Resolved)
修改明细汇总表
| 问题编号 | 模块分类 | 原问题描述 | 涉及修改文件 | 具体修改内容与工程落地 | 解决状态 |
|---|---|---|---|---|---|
| REV-01 | P0 架构 | 破坏性迁移脚本无事务边界,遇错可能部分提交;包含客户端 \echo 指令 |
001~009, 05_execution_contract.md |
所有物理 DDL 脚本全面使用 BEGIN ... COMMIT 包裹,彻底删除 \echo 改造为纯 SQL,建立统一执行契约文档 |
已解决 |
| REV-02 | P0 基线 | 缺乏迁移前置环境基线校验,可能在未知或已被破坏的环境中误执行 | 000_preflight.sql |
新增前置纯只读检查脚本,强校验当前环境必须精确符合 Phase 0.5 状态(14表、行数、触发器等),任何不符立即抛出异常中止 | 已解决 |
| REV-03 | P0 备份 | 001 脚本使用 DROP TABLE IF EXISTS bak_v1_*,误执行可能覆盖最初 V1 备份 |
001_backup_current_schema.sql |
增加强防重校验,若已存在任意 bak_v1_* 表立即抛异常阻断,严禁自动 DROP 覆盖既有历史备份 |
已解决 |
| REV-04 | P0 回滚 | CTAS 无法保留约束、默认值、触发器和 Identity,不能作为回滚结构来源 | rollback/000_phase05_exact_schema.sql, rollback/002, rollback/003 |
新增标准 Phase 0.5 完整物理 DDL;重构回滚脚本,严格基于真实 DDL 重建结构,仅用 bak_v1_* 还原数据,解耦结构与数据 |
已解决 |
| REV-05 | P0 验收 | 010_verify 很多检查仅输出文本,最终未强行阻断,存在假阳性漏报隐患 | 010_verify.sql |
重构为真正的“失败即失败”,逐表、逐列、逐外键(删除规则)、逐唯一约束、逐索引进行 PL/pgSQL 强断言,出现任何不符立即抛异常终止 | 已解决 |
| REV-06 | 字段规范 | train_lesson.t_id 原定义为可空,与排课必要性要求冲突 |
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 |
迁移历史教师数据并完成数据完整性校验后,显式执行 ALTER COLUMN SET NOT NULL |
已解决 |
| REV-08 | 字段规范 | train_student_score.score 存在未经确认的 DEFAULT 0,掩盖未录入状态 |
002_create_new_tables.sql, 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, 005_constraints.sql |
移除所有业务默认值猜测,字段保持 NOT NULL 由管理员录入,增加 CHECK (capacity > 0) 约束 |
已解决 |
| REV-10 | 字段规范 | train_electronic_board.board_name 包含 DEFAULT '' 空串伪造合法值 |
003_alter_master_tables.sql |
彻底移除 DEFAULT '',改为 VARCHAR(100) NOT NULL,由用户录入明确设备名 |
已解决 |
| REV-11 | 业务语义 | 学员来源出现“统招学员”等高校概念,两处 source_type 含义含糊 |
002, 003, 007_dicts.sql |
彻底剥离高校术语,区分:student.source_type 为主档来源(管理员/Excel/平台同步);enrollment.source_type 为参训名单来源(指派/报名/推荐/调训) |
已解决 |
| REV-12 | 业务语义 | 教学资源类型字典与 V2 冻结稿存在分类差异 | 002_create_new_tables.sql, 007_dicts.sql |
严格对齐 V2 冻结稿:1文档, 2视频, 3 3D模型, 4 VR资源, 5外部教学链接, 6其他 | 已解决 |
| REV-13 | 约束安全 | 学习记录部分唯一索引当 source_system = NULL 且 source_event_id != NULL 时发生幂等逃逸 |
004, 005, 006_indexes.sql |
索引条件修正为双非空 WHERE source_system IS NOT NULL AND source_event_id IS NOT NULL;增加 CHECK 约束强制单号非空时系统名必填 |
已解决 |
| REV-14 | 依赖解耦 | 脚本滥用 DROP TABLE ... CASCADE 掩盖未预期依赖 |
004, 009, rollback |
迁移与回滚脚本全面显式解除已知约束,改用常规 DROP TABLE,禁止使用 CASCADE 掩盖隐式依赖 |
已解决 |
| REV-15 | 数据一致 | 排课场地类型与教室/实训场地未在数据库层实现单行互斥;学时时间未核验先后 | 002, 004, 005_constraints.sql |
train_lesson 增加 chk_lesson_venue 互斥 CHECK;train_study_duration 增加 end_time >= start_time CHECK 约束 |
已解决 |
| REV-16 | 风险扩展 | 风险报告需要补充跨班级关联、班牌一致性、宿舍重叠计算等高级业务风险 | 04_risk_review.md |
在文档中新增 R-11 至 R-15 五项重大业务与并发一致性风险深度剖析 | 已解决 |
| REV-17 | 执行控制 | 结构迁移阶段执行 007_dicts 会污染空库测试基线 | 02_migration_plan.md, 05_execution_contract.md |
正式明确 007 在本阶段暂不执行,等后续 API/权限设计阶段统一执行 | 已解决 |