Files
railwaysystem/docs/reports/dms-r3/pre-release-qa/20260916_120000/schema-postcheck.md
T

3.0 KiB

QA 数据库 Schema 后置校验与完整性审计报告

测试数据库: jdbc:kingbase8://127.0.0.1:4321/training (隔离 QA 环境)
后置校验结论: QA_SCHEMA_POSTCHECK = PASS


1. 表结构与索引后置状态

1.1 train_accommodation (住宿表)

  • 主键: pk_train_accommodation (accommodation_id)
  • 历史旧约束: uq_accommodation_enroll 已被成功移除(确认 count = 0)。
  • 新部分唯一索引: uq_accommodation_enroll_active
    • 索引定义: CREATE UNIQUE INDEX uq_accommodation_enroll_active ON public.train_accommodation USING btree (enrollment_id NULLS FIRST) WHERE (accommodation_status = ANY (ARRAY[0, 1]))
  • 业务行为审计实测:
    • 允许同一学员拥有多条退宿记录 (accommodation_status = 2),调房与退宿历史完整保留。
    • 严禁同一学员拥有多于 1 条处于有效状态 (0=预分配, 1=已入住) 的记录,并发冲突时被 Kingbase 底层唯一索引硬阻断。

1.2 train_external_resource_mapping (外部资源映射表)

  • 主键: mapping_id (BIGSERIAL)
  • 外键约束: fk_ext_res_map_dorm (dorm_id 关联 train_dormitory_info.dorm_id)
  • 部分唯一索引 1: uq_ext_res_map_active_room
    • 作用: (vendor_code, dorm_id) WHERE external_resource_type = 'ROOM' AND mapping_status = 'ACTIVE'
    • 审计实测: 同一宿舍绑定多个 ACTIVE 房间时被底层直接拦截。
  • 部分唯一索引 2: uq_ext_res_map_active_ext_res
    • 作用: (vendor_code, external_resource_type, external_resource_id) WHERE mapping_status = 'ACTIVE'
    • 审计实测: 阻止多个宿舍绑定同一个外部激活资源。

1.3 train_external_operation (外部操作流水表)

  • 主键: operation_id (BIGSERIAL)
  • 外键约束: fk_ext_op_door_auth (door_auth_id 关联 train_dorm_auth.auth_id)
  • 幂等索引: uq_ext_op_idempotency (idempotency_key 唯一索引)
  • 审计实测: 重复生成具有相同 idempotency_key 的操作直接被唯一约束阻断,杜绝外部重复并发重放。

1.4 train_dorm_auth (门禁授权表)

  • 字段审计:
    • credential_type (varchar(32)): 默认 ONLINE_PASSWORD。
    • auth_status (varchar(32)): 默认 PENDING_GRANT。
    • latest_operation_id (bigint): 关联最新操作。
    • operation_version (integer): 默认 1,防时序倒退。
  • 密码安全红线:
    • 表中字段总数 18 个,经全表字段名及属性扫描,不存在任何包含 password、secret、pin 的列。

2. 数据完整性指标

完整性检查项 规约目标 实际扫描结果 判定
孤儿外键记录数 (orphan foreign keys) 0 0 PASS
存量重复有效住宿 (duplicate active accommodations) 0 0 PASS
存量重复有效房间映射 (duplicate active room mappings) 0 0 PASS
存量重复幂等操作流水 (duplicate idempotency keys) 0 0 PASS
临时测试事务残留 (dirty test rows) 0 (已回滚) 0 PASS