From 0f1cad86c36403c5342553f3b160a7a21c786c0f Mon Sep 17 00:00:00 2001 From: "agent.develop" Date: Fri, 18 Sep 2026 19:04:05 +0800 Subject: [PATCH] =?UTF-8?q?approve:=20[M3a]=20pbl=5Fcompiler=20=E7=BC=96?= =?UTF-8?q?=E8=AF=91=E6=A0=B8=E5=BF=83=E4=B8=8E=E7=A1=AE=E5=AE=9A=E6=80=A7?= =?UTF-8?q?=E4=BA=A7=E7=89=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/ddl/pbls_tables.sql | 98 +++++++++++++++++++++++-------------- 1 file changed, 62 insertions(+), 36 deletions(-) diff --git a/scripts/ddl/pbls_tables.sql b/scripts/ddl/pbls_tables.sql index a10b086..d88bcc4 100644 --- a/scripts/ddl/pbls_tables.sql +++ b/scripts/ddl/pbls_tables.sql @@ -35,7 +35,7 @@ CREATE TABLE IF NOT EXISTS pbl_tenant ( UNIQUE KEY uk_pbl_tenant_code (tenant_id, tenant_code), KEY idx_pbl_tenant_tid_status (tenant_id, status), KEY idx_pbl_tenant_tid_org (tenant_id, org_code) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL 租户主表'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL 租户主表'; -- 2. pbl_role_binding 租户内角色绑定(复用 rbac,不改 rbac 基表) CREATE TABLE IF NOT EXISTS pbl_role_binding ( @@ -58,7 +58,7 @@ CREATE TABLE IF NOT EXISTS pbl_role_binding ( KEY idx_pbl_role_binding_tid_user (tenant_id, user_code, status), KEY idx_pbl_role_binding_tid_scope (tenant_id, scope_type, scope_code), KEY idx_pbl_role_binding_tid_role (tenant_id, role_code) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL 租户角色绑定'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL 租户角色绑定'; -- 3. pbl_audit_log 审计日志(append-only) CREATE TABLE IF NOT EXISTS pbl_audit_log ( @@ -81,7 +81,7 @@ CREATE TABLE IF NOT EXISTS pbl_audit_log ( KEY idx_pbl_audit_tid_obj (tenant_id, object_type, object_code), KEY idx_pbl_audit_tid_actor (tenant_id, actor_type, actor_code), KEY idx_pbl_audit_tid_trace (tenant_id, trace_id) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL 审计日志(append-only)'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL 审计日志(append-only)'; -- ===================================================================== -- 模块 pbl_blueprint(11 表,M1a) @@ -120,7 +120,7 @@ CREATE TABLE IF NOT EXISTS pbl_blueprint ( KEY idx_pbl_bp_tid_subject (tenant_id, subject_code, grade_code), KEY idx_pbl_bp_tid_quality (tenant_id, quality_level), KEY idx_pbl_bp_tid_source (tenant_id, source_type, source_code) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL 蓝图聚合根'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL 蓝图聚合根'; -- 5. pbl_blueprint_version 版本快照 + change_delta(append-only) CREATE TABLE IF NOT EXISTS pbl_blueprint_version ( @@ -140,7 +140,7 @@ CREATE TABLE IF NOT EXISTS pbl_blueprint_version ( UNIQUE KEY uk_pbl_bp_version_no (tenant_id, bp_code, version_no), KEY idx_pbl_bp_version_tid_bp (tenant_id, bp_code, create_time), KEY idx_pbl_bp_version_tid_ck (tenant_id, checksum) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL 蓝图版本快照(append-only)'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL 蓝图版本快照(append-only)'; -- 6. pbl_blueprint_lock 编辑锁 CREATE TABLE IF NOT EXISTS pbl_blueprint_lock ( @@ -162,7 +162,7 @@ CREATE TABLE IF NOT EXISTS pbl_blueprint_lock ( UNIQUE KEY uk_pbl_bp_lock_active (tenant_id, bp_code, lock_state), KEY idx_pbl_bp_lock_tid_holder (tenant_id, holder_code), KEY idx_pbl_bp_lock_tid_expire (tenant_id, expire_at) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL 蓝图编辑锁'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL 蓝图编辑锁'; -- 7. pbl_subobject 7 类子对象泛化主表 CREATE TABLE IF NOT EXISTS pbl_subobject ( @@ -188,7 +188,7 @@ CREATE TABLE IF NOT EXISTS pbl_subobject ( KEY idx_pbl_subobj_tid_bp_type (tenant_id, bp_code, obj_type, sort_no), KEY idx_pbl_subobj_tid_parent (tenant_id, parent_code), KEY idx_pbl_subobj_tid_status (tenant_id, status) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL 蓝图 7 类子对象泛化主表'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL 蓝图 7 类子对象泛化主表'; -- 8. pbl_subobject_attr 子对象泛化属性(KV) CREATE TABLE IF NOT EXISTS pbl_subobject_attr ( @@ -207,7 +207,7 @@ CREATE TABLE IF NOT EXISTS pbl_subobject_attr ( UNIQUE KEY uk_pbl_subobj_attr_code (tenant_id, attr_code), UNIQUE KEY uk_pbl_subobj_attr_key (tenant_id, obj_code, attr_key), KEY idx_pbl_subobj_attr_tid_obj (tenant_id, obj_code, sort_no) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL 子对象泛化属性 KV'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL 子对象泛化属性 KV'; -- 9. pbl_subobject_rel 子对象间关系 CREATE TABLE IF NOT EXISTS pbl_subobject_rel ( @@ -228,7 +228,7 @@ CREATE TABLE IF NOT EXISTS pbl_subobject_rel ( UNIQUE KEY uk_pbl_subobj_rel_triple (tenant_id, src_obj_code, dst_obj_code, rel_type), KEY idx_pbl_subobj_rel_tid_bp (tenant_id, bp_code, rel_type), KEY idx_pbl_subobj_rel_tid_dst (tenant_id, dst_obj_code) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL 子对象关系'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL 子对象关系'; -- 10. pbl_subobject_asset 子对象资产引用(只读引用平台资产,不落资产本体) CREATE TABLE IF NOT EXISTS pbl_subobject_asset ( @@ -251,7 +251,7 @@ CREATE TABLE IF NOT EXISTS pbl_subobject_asset ( UNIQUE KEY uk_pbl_subobj_asset_code (tenant_id, asset_code), KEY idx_pbl_subobj_asset_tid_obj (tenant_id, obj_code, sort_no), KEY idx_pbl_subobj_asset_tid_kind (tenant_id, asset_kind) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL 子对象资产引用'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL 子对象资产引用'; -- 11. pbl_subobject_ref 子对象对复用域对象的只读引用(world/scene/entity/script) CREATE TABLE IF NOT EXISTS pbl_subobject_ref ( @@ -272,7 +272,7 @@ CREATE TABLE IF NOT EXISTS pbl_subobject_ref ( UNIQUE KEY uk_pbl_subobj_ref_code (tenant_id, ref_code), KEY idx_pbl_subobj_ref_tid_obj (tenant_id, obj_code), KEY idx_pbl_subobj_ref_tid_mod (tenant_id, ref_module, ref_table, ref_biz_code) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL 子对象对复用域只读引用'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL 子对象对复用域只读引用'; -- 12. pbl_subobject_review 子对象评审意见(append-only) CREATE TABLE IF NOT EXISTS pbl_subobject_review ( @@ -291,7 +291,7 @@ CREATE TABLE IF NOT EXISTS pbl_subobject_review ( UNIQUE KEY uk_pbl_subobj_review_code (tenant_id, review_code), KEY idx_pbl_subobj_review_tid_bp (tenant_id, bp_code, create_time), KEY idx_pbl_subobj_review_tid_obj (tenant_id, obj_code) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL 子对象评审意见(append-only)'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL 子对象评审意见(append-only)'; -- 13. pbl_blueprint_tag 蓝图标签 CREATE TABLE IF NOT EXISTS pbl_blueprint_tag ( @@ -307,7 +307,7 @@ CREATE TABLE IF NOT EXISTS pbl_blueprint_tag ( UNIQUE KEY uk_pbl_bp_tag_code (tenant_id, tag_code), UNIQUE KEY uk_pbl_bp_tag_kv (tenant_id, bp_code, tag_key), KEY idx_pbl_bp_tag_tid_key (tenant_id, tag_key, tag_value) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL 蓝图标签'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL 蓝图标签'; -- 14. pbl_blueprint_publish 发布记录(append-only) CREATE TABLE IF NOT EXISTS pbl_blueprint_publish ( @@ -326,7 +326,7 @@ CREATE TABLE IF NOT EXISTS pbl_blueprint_publish ( UNIQUE KEY uk_pbl_bp_publish_code (tenant_id, publish_code), KEY idx_pbl_bp_publish_tid_bp (tenant_id, bp_code, create_time), KEY idx_pbl_bp_publish_tid_target (tenant_id, channel, target_code) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL 蓝图发布记录(append-only)'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL 蓝图发布记录(append-only)'; -- ===================================================================== -- 模块 pbl_template(2 表,M1b) @@ -355,7 +355,7 @@ CREATE TABLE IF NOT EXISTS pbl_template ( KEY idx_pbl_template_tid_kind (tenant_id, tpl_kind, status), KEY idx_pbl_template_tid_subj (tenant_id, subject_code, grade_code), KEY idx_pbl_template_tid_offline (tenant_id, offline_flag) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL 模板主表'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL 模板主表'; -- 16. pbl_template_item 模板条目(实例化 ID 重映射映射表) CREATE TABLE IF NOT EXISTS pbl_template_item ( @@ -374,7 +374,7 @@ CREATE TABLE IF NOT EXISTS pbl_template_item ( UNIQUE KEY uk_pbl_template_item_code (tenant_id, item_code), UNIQUE KEY uk_pbl_template_item_key (tenant_id, tpl_code, tpl_obj_key), KEY idx_pbl_template_item_tid_tpl (tenant_id, tpl_code, sort_no) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL 模板条目'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL 模板条目'; -- ===================================================================== -- 模块 pbl_validation(3 表,M2:14 维 + 5 级质量状态) @@ -402,7 +402,7 @@ CREATE TABLE IF NOT EXISTS pbl_validation_ruleset ( UNIQUE KEY uk_pbl_valid_ruleset_code (tenant_id, ruleset_code), KEY idx_pbl_valid_ruleset_tid_dim (tenant_id, dim_code, enabled), KEY idx_pbl_valid_ruleset_tid_sort (tenant_id, sort_no) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL 14 维校验规则集'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL 14 维校验规则集'; -- 18. pbl_validation_run 校验执行批次 CREATE TABLE IF NOT EXISTS pbl_validation_run ( @@ -431,7 +431,7 @@ CREATE TABLE IF NOT EXISTS pbl_validation_run ( KEY idx_pbl_valid_run_tid_bp (tenant_id, bp_code, create_time), KEY idx_pbl_valid_run_tid_state (tenant_id, run_state), KEY idx_pbl_valid_run_tid_level (tenant_id, quality_level) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL 校验执行批次'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL 校验执行批次'; -- 19. pbl_validation_finding 校验发现明细(append-only 留痕) CREATE TABLE IF NOT EXISTS pbl_validation_finding ( @@ -452,7 +452,7 @@ CREATE TABLE IF NOT EXISTS pbl_validation_finding ( KEY idx_pbl_valid_finding_tid_run (tenant_id, run_code, dim_code), KEY idx_pbl_valid_finding_tid_bp (tenant_id, bp_code, create_time), KEY idx_pbl_valid_finding_tid_obj (tenant_id, obj_code) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL 校验发现明细(append-only)'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL 校验发现明细(append-only)'; -- ===================================================================== -- 模块 pbl_compiler(4 表,M3a/M3b:确定性编译 + Game Definition) @@ -482,7 +482,7 @@ CREATE TABLE IF NOT EXISTS pbl_compile_job ( KEY idx_pbl_compile_job_tid_bp (tenant_id, bp_code, create_time), KEY idx_pbl_compile_job_tid_state (tenant_id, job_state), KEY idx_pbl_compile_job_tid_ick (tenant_id, input_checksum) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL 编译作业'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL 编译作业'; -- 21. pbl_compile_artifact 编译中间产物 CREATE TABLE IF NOT EXISTS pbl_compile_artifact ( @@ -501,7 +501,7 @@ CREATE TABLE IF NOT EXISTS pbl_compile_artifact ( UNIQUE KEY uk_pbl_compile_artifact_code (tenant_id, artifact_code), KEY idx_pbl_compile_artifact_tid_job (tenant_id, job_code, sort_no), KEY idx_pbl_compile_artifact_tid_kind (tenant_id, artifact_kind) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL 编译中间产物'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL 编译中间产物'; -- 22. pbl_game_definition Game Definition(编译最终产出) CREATE TABLE IF NOT EXISTS pbl_game_definition ( @@ -528,7 +528,7 @@ CREATE TABLE IF NOT EXISTS pbl_game_definition ( KEY idx_pbl_gd_tid_state (tenant_id, gd_state), KEY idx_pbl_gd_tid_ck (tenant_id, checksum), KEY idx_pbl_gd_tid_world (tenant_id, world_ref, scene_ref) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL Game Definition'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL Game Definition'; -- 23. pbl_compile_log 编译日志(append-only) CREATE TABLE IF NOT EXISTS pbl_compile_log ( @@ -546,7 +546,7 @@ CREATE TABLE IF NOT EXISTS pbl_compile_log ( UNIQUE KEY uk_pbl_compile_log_code (tenant_id, log_code), KEY idx_pbl_compile_log_tid_job (tenant_id, job_code, seq_no), KEY idx_pbl_compile_log_tid_level (tenant_id, log_level, create_time) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL 编译日志(append-only)'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL 编译日志(append-only)'; -- ===================================================================== -- 模块 pbl_agent_runtime(4 表,M4a/M4b:Designer/Critic + fail-closed 裁决) @@ -575,7 +575,7 @@ CREATE TABLE IF NOT EXISTS pbl_agent_session ( KEY idx_pbl_agent_session_tid_bp (tenant_id, bp_code, session_state), KEY idx_pbl_agent_session_tid_role (tenant_id, agent_role), KEY idx_pbl_agent_session_tid_owner (tenant_id, owner_code) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL Agent 会话'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL Agent 会话'; -- 25. pbl_agent_message Agent 消息(append-only) CREATE TABLE IF NOT EXISTS pbl_agent_message ( @@ -594,7 +594,7 @@ CREATE TABLE IF NOT EXISTS pbl_agent_message ( UNIQUE KEY uk_pbl_agent_msg_code (tenant_id, msg_code), KEY idx_pbl_agent_msg_tid_sess (tenant_id, session_code, turn_no), KEY idx_pbl_agent_msg_tid_time (tenant_id, create_time) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL Agent 消息(append-only)'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL Agent 消息(append-only)'; -- 26. pbl_agent_tool_call 工具调用记录(append-only) CREATE TABLE IF NOT EXISTS pbl_agent_tool_call ( @@ -614,7 +614,7 @@ CREATE TABLE IF NOT EXISTS pbl_agent_tool_call ( KEY idx_pbl_agent_call_tid_sess (tenant_id, session_code, turn_no), KEY idx_pbl_agent_call_tid_tool (tenant_id, tool_name, tool_state), KEY idx_pbl_agent_call_tid_time (tenant_id, create_time) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL Agent 工具调用(append-only)'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL Agent 工具调用(append-only)'; -- 27. pbl_agent_arbitration fail-closed 裁决记录(append-only) CREATE TABLE IF NOT EXISTS pbl_agent_arbitration ( @@ -635,7 +635,7 @@ CREATE TABLE IF NOT EXISTS pbl_agent_arbitration ( KEY idx_pbl_agent_arb_tid_tool (tenant_id, tool_name, decision), KEY idx_pbl_agent_arb_tid_sess (tenant_id, session_code, create_time), KEY idx_pbl_agent_arb_tid_reason (tenant_id, deny_reason) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL Agent fail-closed 裁决记录(append-only)'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL Agent fail-closed 裁决记录(append-only)'; -- ===================================================================== -- 模块 pbl_evidence(4 表,M5a/M5b:产出物采集 + 证据幂等) @@ -667,7 +667,7 @@ CREATE TABLE IF NOT EXISTS pbl_artifact ( KEY idx_pbl_artifact_tid_team (tenant_id, team_code), KEY idx_pbl_artifact_tid_sess (tenant_id, session_code), KEY idx_pbl_artifact_tid_ck (tenant_id, checksum) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL 学生产出物'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL 学生产出物'; -- 29. pbl_evidence 证据主表 CREATE TABLE IF NOT EXISTS pbl_evidence ( @@ -696,7 +696,7 @@ CREATE TABLE IF NOT EXISTS pbl_evidence ( KEY idx_pbl_evidence_tid_team (tenant_id, team_code, student_code), KEY idx_pbl_evidence_tid_obj (tenant_id, obj_code), KEY idx_pbl_evidence_tid_time (tenant_id, occurred_at) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL 证据主表(幂等键唯一)'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL 证据主表(幂等键唯一)'; -- 30. pbl_evidence_idem 证据幂等提交台账(append-only) CREATE TABLE IF NOT EXISTS pbl_evidence_idem ( @@ -715,7 +715,7 @@ CREATE TABLE IF NOT EXISTS pbl_evidence_idem ( UNIQUE KEY uk_pbl_evidence_idem_key (tenant_id, idem_key), KEY idx_pbl_evidence_idem_tid_time (tenant_id, create_time), KEY idx_pbl_evidence_idem_tid_conf (tenant_id, conflict_flag) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL 证据幂等台账(append-only)'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL 证据幂等台账(append-only)'; -- 31. pbl_evidence_binding 证据与复用域对象绑定(零改表关联) CREATE TABLE IF NOT EXISTS pbl_evidence_binding ( @@ -734,7 +734,7 @@ CREATE TABLE IF NOT EXISTS pbl_evidence_binding ( UNIQUE KEY uk_pbl_evidence_binding_code (tenant_id, bind_code), KEY idx_pbl_evidence_binding_tid_ev (tenant_id, evidence_code), KEY idx_pbl_evidence_binding_tid_ref (tenant_id, ref_module, ref_table, ref_biz_code) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL 证据与复用域绑定(零改表)'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL 证据与复用域绑定(零改表)'; -- ===================================================================== -- 模块 pbl_assessment(3 表,M6:Rubric 加权评估与报告) @@ -762,7 +762,7 @@ CREATE TABLE IF NOT EXISTS pbl_rubric ( UNIQUE KEY uk_pbl_rubric_code (tenant_id, rubric_code), KEY idx_pbl_rubric_tid_bp (tenant_id, bp_code, status), KEY idx_pbl_rubric_tid_default (tenant_id, is_default) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL 量规主表'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL 量规主表'; -- 33. pbl_rubric_criterion 量规评价维度条目 CREATE TABLE IF NOT EXISTS pbl_rubric_criterion ( @@ -784,7 +784,7 @@ CREATE TABLE IF NOT EXISTS pbl_rubric_criterion ( UNIQUE KEY uk_pbl_rubric_crit_code (tenant_id, crit_code), KEY idx_pbl_rubric_crit_tid_rub (tenant_id, rubric_code, sort_no), KEY idx_pbl_rubric_crit_tid_obj (tenant_id, obj_code) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL 量规评价维度'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL 量规评价维度'; -- 34. pbl_assessment_report 评估报告 CREATE TABLE IF NOT EXISTS pbl_assessment_report ( @@ -815,7 +815,7 @@ CREATE TABLE IF NOT EXISTS pbl_assessment_report ( KEY idx_pbl_assess_report_tid_team (tenant_id, team_code, student_code), KEY idx_pbl_assess_report_tid_state (tenant_id, report_state), KEY idx_pbl_assess_report_tid_grade (tenant_id, grade_code) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL 评估报告'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL 评估报告'; -- ===================================================================== -- 模块 pbl_domain_ext(1 表,M8:world/scene/entity 租户·班级·团队关联,不改基表) @@ -849,7 +849,7 @@ CREATE TABLE IF NOT EXISTS pbl_domain_binding ( KEY idx_pbl_domain_binding_tid_bp (tenant_id, bp_code), KEY idx_pbl_domain_binding_tid_sess (tenant_id, session_code), KEY idx_pbl_domain_binding_tid_ref (tenant_id, ref_module, ref_id) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL 复用域绑定(零改表)'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL 复用域绑定(零改表)'; -- ===================================================================== -- 模块 pbl_analytics(1 表,M10:分析看板快照,append-only) @@ -874,7 +874,7 @@ CREATE TABLE IF NOT EXISTS pbl_analytics_snapshot ( UNIQUE KEY uk_pbl_analytics_snap_dim (tenant_id, metric_group, scope_type, scope_code, period_key), KEY idx_pbl_analytics_snap_tid_group (tenant_id, metric_group, period_key), KEY idx_pbl_analytics_snap_tid_scope (tenant_id, scope_type, scope_code) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL 分析看板快照(append-only)'; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='PBL 分析看板快照(append-only)'; SET FOREIGN_KEY_CHECKS = 1; @@ -891,3 +891,29 @@ SET FOREIGN_KEY_CHECKS = 1; -- FOREIGN KEY / REFERENCES / ENUM( / SERIAL / BIGSERIAL / nextval / TIMESTAMP -- 全部索引以 tenant_id 打头;每表 id BIGINT NOT NULL AUTO_INCREMENT + xxx_code 唯一业务主键。 -- ===================================================================== + +CREATE TABLE IF NOT EXISTS `pbl_compile_task` ( + `tenant_id` VARCHAR(64) NOT NULL COMMENT 租户ID(强制打头), + `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键, + `task_no` VARCHAR(64) NOT NULL COMMENT "任务流水号(确定性派生 CT+blueprint_id+version+seq)", + `blueprint_id` BIGINT UNSIGNED NOT NULL COMMENT "蓝图ID", + `blueprint_version` INT NOT NULL DEFAULT 0 COMMENT "蓝图版本(须已审批)", + `compiler_version` VARCHAR(32) NOT NULL COMMENT "编译器版本号", + `ruleset_version` VARCHAR(32) NOT NULL COMMENT "规则集版本", + `status` VARCHAR(32) NOT NULL DEFAULT 'pending' COMMENT "appcodes:pbl_compile_status(pending/running/success/failed)", + `approval_id` BIGINT UNSIGNED NULL COMMENT "关联审批记录(未审批拒绝 F-CP-01)", + `game_def_id` BIGINT UNSIGNED NULL COMMENT "产出的 Game Definition ID(success 回填)", + `content_fingerprint` VARCHAR(64) NULL COMMENT "产物 SHA-256 指纹(success 回填,US-11 比对锚点)", + `error_code` VARCHAR(64) NULL COMMENT "失败错误码(PBL_E_*)", + `error_msg` VARCHAR(2048) NULL COMMENT "失败原因(fail-closed 可追溯)", + `triggered_by` VARCHAR(64) NULL COMMENT "触发人(审计)", + `duration_ms` INT NOT NULL DEFAULT 0 COMMENT "耗时(易变,不参与指纹)", + `started_at` DATETIME NULL COMMENT "开始时间", + `finished_at` DATETIME NULL COMMENT "结束时间", + `created_at` DATETIME NOT NULL DEFAULT '1970-01-01 00:00:00' COMMENT "创建时间(应用层写入)", + `updated_at` DATETIME NOT NULL DEFAULT '1970-01-01 00:00:00' COMMENT "更新时间(应用层写入)", + PRIMARY KEY (`id`), + UNIQUE KEY `uk_ct_task_no` (`tenant_id`, `task_no`), + KEY `idx_ct_blueprint` (`tenant_id`, `blueprint_id`, `blueprint_version`), + KEY `idx_ct_status` (`tenant_id`, `status`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT="编译任务(approval_id 门禁,F-CP-01/US-10)";