739 lines
40 KiB
SQL
739 lines
40 KiB
SQL
-- =============================================================================
|
||
-- PBL Agent OS Phase 0/1 —— 全量建表 DDL(36 表)
|
||
-- 方言:mariadb
|
||
-- * 主键统一 BIGINT NOT NULL AUTO_INCREMENT
|
||
-- * 编码/枚举列统一 varchar(32)(禁 ENUM)
|
||
-- * 时间列统一 datetime(禁 TIMESTAMP)
|
||
-- * 禁 FOREIGN KEY(关联靠应用层 + 索引)
|
||
-- * 每张业务表首列强制 tenant_id varchar(32) NOT NULL,并作为复合索引首列
|
||
-- * ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
||
-- * 全部 CREATE TABLE IF NOT EXISTS —— 幂等可重复执行
|
||
-- 来源:projects/pbls/docs/01-design/data-model.md(36 表)
|
||
-- =============================================================================
|
||
|
||
SET NAMES utf8mb4;
|
||
|
||
-- -----------------------------------------------------------------------------
|
||
-- M1a pbl_blueprint —— 蓝图聚合根 + 7 类子对象 + 版本 + 模板(11 表)
|
||
-- -----------------------------------------------------------------------------
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_blueprint` (
|
||
`tenant_id` varchar(32) NOT NULL COMMENT '租户ID(强制打头)',
|
||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||
`code` varchar(32) NOT NULL COMMENT '蓝图编码',
|
||
`name` varchar(128) NOT NULL COMMENT '蓝图名称',
|
||
`subject` varchar(32) DEFAULT NULL COMMENT '学科编码',
|
||
`grade` varchar(32) DEFAULT NULL COMMENT '学段编码',
|
||
`duration_hours` int NOT NULL DEFAULT 0 COMMENT '课时数',
|
||
`status` varchar(32) NOT NULL DEFAULT 'draft' COMMENT '状态 draft/validating/validated/compiling/compiled/published/archived',
|
||
`quality_level` varchar(32) NOT NULL DEFAULT 'L0' COMMENT '质量等级 L0~L4',
|
||
`current_version` bigint NOT NULL DEFAULT 0 COMMENT '当前版本号',
|
||
`template_id` bigint DEFAULT NULL COMMENT '来源模板ID(无FK)',
|
||
`summary` varchar(512) DEFAULT NULL COMMENT '一句话摘要',
|
||
`owner_id` varchar(32) DEFAULT NULL COMMENT '所有者',
|
||
`extra` longtext DEFAULT NULL COMMENT '扩展JSON',
|
||
`is_deleted` tinyint NOT NULL DEFAULT 0 COMMENT '逻辑删除',
|
||
`create_user` varchar(32) DEFAULT NULL,
|
||
`create_time` datetime DEFAULT NULL,
|
||
`update_user` varchar(32) DEFAULT NULL,
|
||
`update_time` datetime DEFAULT NULL,
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_pbl_blueprint_tenant_code` (`tenant_id`,`code`),
|
||
KEY `ix_pbl_blueprint_tenant_status` (`tenant_id`,`status`),
|
||
KEY `ix_pbl_blueprint_tenant_subject` (`tenant_id`,`subject`,`grade`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='PBL蓝图聚合根';
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_blueprint_version` (
|
||
`tenant_id` varchar(32) NOT NULL,
|
||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||
`blueprint_id` bigint NOT NULL COMMENT '蓝图ID(无FK)',
|
||
`version` bigint NOT NULL COMMENT '版本号,从1递增',
|
||
`snapshot` longtext NOT NULL COMMENT '版本全量快照JSON(确定性序列化)',
|
||
`change_delta` longtext DEFAULT NULL COMMENT '与上一版差异JSON',
|
||
`content_hash` varchar(64) NOT NULL COMMENT '快照sha256',
|
||
`comment` varchar(512) DEFAULT NULL,
|
||
`create_user` varchar(32) DEFAULT NULL,
|
||
`create_time` datetime DEFAULT NULL,
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_pbl_bpver_tenant_bp_ver` (`tenant_id`,`blueprint_id`,`version`),
|
||
KEY `ix_pbl_bpver_tenant_hash` (`tenant_id`,`content_hash`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='蓝图版本快照与change_delta';
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_blueprint_template` (
|
||
`tenant_id` varchar(32) NOT NULL,
|
||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||
`code` varchar(32) NOT NULL COMMENT '模板编码',
|
||
`name` varchar(128) NOT NULL,
|
||
`category` varchar(32) DEFAULT NULL COMMENT '模板分类',
|
||
`subject` varchar(32) DEFAULT NULL,
|
||
`grade` varchar(32) DEFAULT NULL,
|
||
`definition` longtext NOT NULL COMMENT '模板定义JSON(含7类子对象骨架)',
|
||
`offline_pack` longtext DEFAULT NULL COMMENT '离线兜底包JSON',
|
||
`is_builtin` tinyint NOT NULL DEFAULT 0 COMMENT '是否内置模板',
|
||
`status` varchar(32) NOT NULL DEFAULT 'enabled' COMMENT 'enabled/disabled',
|
||
`create_user` varchar(32) DEFAULT NULL,
|
||
`create_time` datetime DEFAULT NULL,
|
||
`update_time` datetime DEFAULT NULL,
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_pbl_bptpl_tenant_code` (`tenant_id`,`code`),
|
||
KEY `ix_pbl_bptpl_tenant_cat` (`tenant_id`,`category`,`status`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='蓝图模板(实例化+离线兜底)';
|
||
|
||
-- 7 类子对象泛化契约:统一列骨架(sub_type 区分),逐类独立建表便于索引与约束
|
||
CREATE TABLE IF NOT EXISTS `pbl_sub_world` (
|
||
`tenant_id` varchar(32) NOT NULL,
|
||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||
`blueprint_id` bigint NOT NULL,
|
||
`code` varchar(32) NOT NULL,
|
||
`name` varchar(128) NOT NULL,
|
||
`sub_type` varchar(32) NOT NULL DEFAULT 'world',
|
||
`parent_id` bigint NOT NULL DEFAULT 0 COMMENT '父对象ID,0=根',
|
||
`sort_no` int NOT NULL DEFAULT 0,
|
||
`payload` longtext DEFAULT NULL COMMENT '子对象业务载荷JSON',
|
||
`ref_id` bigint DEFAULT NULL COMMENT '引用模块基表ID(world.id,只读不写)',
|
||
`status` varchar(32) NOT NULL DEFAULT 'active',
|
||
`create_time` datetime DEFAULT NULL,
|
||
`update_time` datetime DEFAULT NULL,
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_pbl_subworld_tenant_bp_code` (`tenant_id`,`blueprint_id`,`code`),
|
||
KEY `ix_pbl_subworld_tenant_bp` (`tenant_id`,`blueprint_id`,`parent_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='子对象-world';
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_sub_scene` (
|
||
`tenant_id` varchar(32) NOT NULL,
|
||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||
`blueprint_id` bigint NOT NULL,
|
||
`code` varchar(32) NOT NULL,
|
||
`name` varchar(128) NOT NULL,
|
||
`sub_type` varchar(32) NOT NULL DEFAULT 'scene',
|
||
`parent_id` bigint NOT NULL DEFAULT 0,
|
||
`sort_no` int NOT NULL DEFAULT 0,
|
||
`payload` longtext DEFAULT NULL,
|
||
`ref_id` bigint DEFAULT NULL COMMENT 'scene.id(只读)',
|
||
`status` varchar(32) NOT NULL DEFAULT 'active',
|
||
`create_time` datetime DEFAULT NULL,
|
||
`update_time` datetime DEFAULT NULL,
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_pbl_subscene_tenant_bp_code` (`tenant_id`,`blueprint_id`,`code`),
|
||
KEY `ix_pbl_subscene_tenant_bp` (`tenant_id`,`blueprint_id`,`parent_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='子对象-scene';
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_sub_role` (
|
||
`tenant_id` varchar(32) NOT NULL,
|
||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||
`blueprint_id` bigint NOT NULL,
|
||
`code` varchar(32) NOT NULL,
|
||
`name` varchar(128) NOT NULL,
|
||
`sub_type` varchar(32) NOT NULL DEFAULT 'role',
|
||
`parent_id` bigint NOT NULL DEFAULT 0,
|
||
`sort_no` int NOT NULL DEFAULT 0,
|
||
`payload` longtext DEFAULT NULL COMMENT '角色职责/权限/人数上限',
|
||
`ref_id` bigint DEFAULT NULL,
|
||
`status` varchar(32) NOT NULL DEFAULT 'active',
|
||
`create_time` datetime DEFAULT NULL,
|
||
`update_time` datetime DEFAULT NULL,
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_pbl_subrole_tenant_bp_code` (`tenant_id`,`blueprint_id`,`code`),
|
||
KEY `ix_pbl_subrole_tenant_bp` (`tenant_id`,`blueprint_id`,`parent_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='子对象-role';
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_sub_task` (
|
||
`tenant_id` varchar(32) NOT NULL,
|
||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||
`blueprint_id` bigint NOT NULL,
|
||
`code` varchar(32) NOT NULL,
|
||
`name` varchar(128) NOT NULL,
|
||
`sub_type` varchar(32) NOT NULL DEFAULT 'task',
|
||
`parent_id` bigint NOT NULL DEFAULT 0,
|
||
`sort_no` int NOT NULL DEFAULT 0,
|
||
`stage` varchar(32) DEFAULT NULL COMMENT '所属阶段编码',
|
||
`payload` longtext DEFAULT NULL COMMENT '任务目标/步骤/产出要求',
|
||
`ref_id` bigint DEFAULT NULL,
|
||
`status` varchar(32) NOT NULL DEFAULT 'active',
|
||
`create_time` datetime DEFAULT NULL,
|
||
`update_time` datetime DEFAULT NULL,
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_pbl_subtask_tenant_bp_code` (`tenant_id`,`blueprint_id`,`code`),
|
||
KEY `ix_pbl_subtask_tenant_bp_stage` (`tenant_id`,`blueprint_id`,`stage`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='子对象-task';
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_sub_rule` (
|
||
`tenant_id` varchar(32) NOT NULL,
|
||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||
`blueprint_id` bigint NOT NULL,
|
||
`code` varchar(32) NOT NULL,
|
||
`name` varchar(128) NOT NULL,
|
||
`sub_type` varchar(32) NOT NULL DEFAULT 'rule',
|
||
`parent_id` bigint NOT NULL DEFAULT 0,
|
||
`sort_no` int NOT NULL DEFAULT 0,
|
||
`rule_kind` varchar(32) DEFAULT NULL COMMENT 'trigger/constraint/scoring/flow',
|
||
`payload` longtext DEFAULT NULL COMMENT '规则表达式(script_engine 可编译)',
|
||
`ref_id` bigint DEFAULT NULL COMMENT 'script_engine.script.id(只读)',
|
||
`status` varchar(32) NOT NULL DEFAULT 'active',
|
||
`create_time` datetime DEFAULT NULL,
|
||
`update_time` datetime DEFAULT NULL,
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_pbl_subrule_tenant_bp_code` (`tenant_id`,`blueprint_id`,`code`),
|
||
KEY `ix_pbl_subrule_tenant_bp_kind` (`tenant_id`,`blueprint_id`,`rule_kind`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='子对象-rule';
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_sub_artifact` (
|
||
`tenant_id` varchar(32) NOT NULL,
|
||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||
`blueprint_id` bigint NOT NULL,
|
||
`code` varchar(32) NOT NULL,
|
||
`name` varchar(128) NOT NULL,
|
||
`sub_type` varchar(32) NOT NULL DEFAULT 'artifact',
|
||
`parent_id` bigint NOT NULL DEFAULT 0,
|
||
`sort_no` int NOT NULL DEFAULT 0,
|
||
`artifact_type` varchar(32) DEFAULT NULL COMMENT '产出物类型编码',
|
||
`payload` longtext DEFAULT NULL COMMENT '产出物规格/验收标准',
|
||
`ref_id` bigint DEFAULT NULL,
|
||
`status` varchar(32) NOT NULL DEFAULT 'active',
|
||
`create_time` datetime DEFAULT NULL,
|
||
`update_time` datetime DEFAULT NULL,
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_pbl_subarti_tenant_bp_code` (`tenant_id`,`blueprint_id`,`code`),
|
||
KEY `ix_pbl_subarti_tenant_bp_type` (`tenant_id`,`blueprint_id`,`artifact_type`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='子对象-artifact(产出物定义)';
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_sub_assessment` (
|
||
`tenant_id` varchar(32) NOT NULL,
|
||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||
`blueprint_id` bigint NOT NULL,
|
||
`code` varchar(32) NOT NULL,
|
||
`name` varchar(128) NOT NULL,
|
||
`sub_type` varchar(32) NOT NULL DEFAULT 'assessment',
|
||
`parent_id` bigint NOT NULL DEFAULT 0,
|
||
`sort_no` int NOT NULL DEFAULT 0,
|
||
`payload` longtext DEFAULT NULL COMMENT '评估维度/权重/rubric 引用',
|
||
`ref_id` bigint DEFAULT NULL,
|
||
`status` varchar(32) NOT NULL DEFAULT 'active',
|
||
`create_time` datetime DEFAULT NULL,
|
||
`update_time` datetime DEFAULT NULL,
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_pbl_subassess_tenant_bp_code` (`tenant_id`,`blueprint_id`,`code`),
|
||
KEY `ix_pbl_subassess_tenant_bp` (`tenant_id`,`blueprint_id`,`parent_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='子对象-assessment(评估定义)';
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_sub_link` (
|
||
`tenant_id` varchar(32) NOT NULL,
|
||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||
`blueprint_id` bigint NOT NULL,
|
||
`from_type` varchar(32) NOT NULL COMMENT '源子对象类型',
|
||
`from_id` bigint NOT NULL,
|
||
`to_type` varchar(32) NOT NULL COMMENT '目标子对象类型',
|
||
`to_id` bigint NOT NULL,
|
||
`link_kind` varchar(32) NOT NULL DEFAULT 'ref' COMMENT 'ref/depends/produces/assesses',
|
||
`payload` longtext DEFAULT NULL,
|
||
`status` varchar(32) NOT NULL DEFAULT 'active',
|
||
`create_time` datetime DEFAULT NULL,
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_pbl_sublink_tenant_edge` (`tenant_id`,`blueprint_id`,`from_type`,`from_id`,`to_type`,`to_id`,`link_kind`),
|
||
KEY `ix_pbl_sublink_tenant_to` (`tenant_id`,`blueprint_id`,`to_type`,`to_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='子对象关系边(泛化契约)';
|
||
|
||
-- -----------------------------------------------------------------------------
|
||
-- M2 pbl_validation —— 14 维校验 + 5 级质量状态(3 表)
|
||
-- -----------------------------------------------------------------------------
|
||
CREATE TABLE IF NOT EXISTS `pbl_validation_rule` (
|
||
`tenant_id` varchar(32) NOT NULL,
|
||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||
`code` varchar(32) NOT NULL COMMENT '规则编码',
|
||
`dimension` varchar(32) NOT NULL COMMENT '14 维之一',
|
||
`name` varchar(128) NOT NULL,
|
||
`severity` varchar(32) NOT NULL DEFAULT 'error' COMMENT 'error/warn/info',
|
||
`expression` longtext DEFAULT NULL COMMENT '校验表达式/JSON',
|
||
`is_builtin` tinyint NOT NULL DEFAULT 1,
|
||
`enabled` tinyint NOT NULL DEFAULT 1,
|
||
`create_time` datetime DEFAULT NULL,
|
||
`update_time` datetime DEFAULT NULL,
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_pbl_vrule_tenant_code` (`tenant_id`,`code`),
|
||
KEY `ix_pbl_vrule_tenant_dim` (`tenant_id`,`dimension`,`enabled`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='校验规则库(14维)';
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_validation_run` (
|
||
`tenant_id` varchar(32) NOT NULL,
|
||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||
`blueprint_id` bigint NOT NULL,
|
||
`version` bigint NOT NULL DEFAULT 0,
|
||
`run_no` varchar(32) NOT NULL COMMENT '运行编号',
|
||
`status` varchar(32) NOT NULL DEFAULT 'running' COMMENT 'running/passed/failed/error',
|
||
`quality_level` varchar(32) NOT NULL DEFAULT 'L0' COMMENT 'L0~L4(5级质量状态)',
|
||
`score` int NOT NULL DEFAULT 0,
|
||
`error_count` int NOT NULL DEFAULT 0,
|
||
`warn_count` int NOT NULL DEFAULT 0,
|
||
`dim_result` longtext DEFAULT NULL COMMENT '14维结果JSON(确定性序列化)',
|
||
`content_hash` varchar(64) DEFAULT NULL,
|
||
`start_time` datetime DEFAULT NULL,
|
||
`end_time` datetime DEFAULT NULL,
|
||
`create_user` varchar(32) DEFAULT NULL,
|
||
`create_time` datetime DEFAULT NULL,
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_pbl_vrun_tenant_no` (`tenant_id`,`run_no`),
|
||
KEY `ix_pbl_vrun_tenant_bp` (`tenant_id`,`blueprint_id`,`version`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='校验运行记录';
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_validation_issue` (
|
||
`tenant_id` varchar(32) NOT NULL,
|
||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||
`run_id` bigint NOT NULL,
|
||
`rule_code` varchar(32) NOT NULL,
|
||
`dimension` varchar(32) NOT NULL,
|
||
`severity` varchar(32) NOT NULL DEFAULT 'error',
|
||
`target_type` varchar(32) DEFAULT NULL,
|
||
`target_id` bigint DEFAULT NULL,
|
||
`path` varchar(255) DEFAULT NULL COMMENT 'JSONPath 定位',
|
||
`message` varchar(512) NOT NULL,
|
||
`suggestion` varchar(512) DEFAULT NULL,
|
||
`status` varchar(32) NOT NULL DEFAULT 'open' COMMENT 'open/fixed/ignored',
|
||
`create_time` datetime DEFAULT NULL,
|
||
PRIMARY KEY (`id`),
|
||
KEY `ix_pbl_vissue_tenant_run` (`tenant_id`,`run_id`,`severity`),
|
||
KEY `ix_pbl_vissue_tenant_rule` (`tenant_id`,`rule_code`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='校验问题明细';
|
||
|
||
-- -----------------------------------------------------------------------------
|
||
-- M3a/M3b pbl_compiler —— 确定性编译 + Game Definition(3 表)
|
||
-- -----------------------------------------------------------------------------
|
||
CREATE TABLE IF NOT EXISTS `pbl_compile_job` (
|
||
`tenant_id` varchar(32) NOT NULL,
|
||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||
`blueprint_id` bigint NOT NULL,
|
||
`version` bigint NOT NULL,
|
||
`job_no` varchar(32) NOT NULL,
|
||
`compiler_ver` varchar(32) NOT NULL DEFAULT 'v1' COMMENT '编译器版本',
|
||
`status` varchar(32) NOT NULL DEFAULT 'pending' COMMENT 'pending/running/success/failed',
|
||
`input_hash` varchar(64) NOT NULL COMMENT '输入快照sha256(确定性依据)',
|
||
`output_hash` varchar(64) DEFAULT NULL,
|
||
`log` longtext DEFAULT NULL,
|
||
`start_time` datetime DEFAULT NULL,
|
||
`end_time` datetime DEFAULT NULL,
|
||
`create_user` varchar(32) DEFAULT NULL,
|
||
`create_time` datetime DEFAULT NULL,
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_pbl_cjob_tenant_no` (`tenant_id`,`job_no`),
|
||
KEY `ix_pbl_cjob_tenant_bp` (`tenant_id`,`blueprint_id`,`version`),
|
||
KEY `ix_pbl_cjob_tenant_inhash` (`tenant_id`,`input_hash`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='编译作业';
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_compile_artifact` (
|
||
`tenant_id` varchar(32) NOT NULL,
|
||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||
`job_id` bigint NOT NULL,
|
||
`kind` varchar(32) NOT NULL COMMENT 'game_definition/script/scene_pack/report',
|
||
`name` varchar(128) NOT NULL,
|
||
`content` longtext DEFAULT NULL COMMENT '产物内容(JSON/文本)',
|
||
`file_path` varchar(255) DEFAULT NULL,
|
||
`content_hash` varchar(64) NOT NULL,
|
||
`size_bytes` bigint NOT NULL DEFAULT 0,
|
||
`create_time` datetime DEFAULT NULL,
|
||
PRIMARY KEY (`id`),
|
||
KEY `ix_pbl_carti_tenant_job` (`tenant_id`,`job_id`,`kind`),
|
||
KEY `ix_pbl_carti_tenant_hash` (`tenant_id`,`content_hash`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='编译产物';
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_game_definition` (
|
||
`tenant_id` varchar(32) NOT NULL,
|
||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||
`blueprint_id` bigint NOT NULL,
|
||
`version` bigint NOT NULL,
|
||
`gd_version` varchar(32) NOT NULL DEFAULT '1.0' COMMENT 'Game Definition schema 版本',
|
||
`definition` longtext NOT NULL COMMENT 'GD 全量JSON(world/scene/entity/rule/task/role/artifact)',
|
||
`content_hash` varchar(64) NOT NULL,
|
||
`status` varchar(32) NOT NULL DEFAULT 'draft' COMMENT 'draft/published/archived',
|
||
`publish_time` datetime DEFAULT NULL,
|
||
`create_time` datetime DEFAULT NULL,
|
||
`update_time` datetime DEFAULT NULL,
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_pbl_gd_tenant_bp_ver` (`tenant_id`,`blueprint_id`,`version`),
|
||
KEY `ix_pbl_gd_tenant_status` (`tenant_id`,`status`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Game Definition(编译终产物)';
|
||
|
||
-- -----------------------------------------------------------------------------
|
||
-- M4a/M4b pbl_agent_runtime —— Designer/Critic 运行时 + fail-closed 工具裁决(4 表)
|
||
-- -----------------------------------------------------------------------------
|
||
CREATE TABLE IF NOT EXISTS `pbl_agent_tool_policy` (
|
||
`tenant_id` varchar(32) NOT NULL,
|
||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||
`tool_name` varchar(64) NOT NULL COMMENT '工具名(22 个之一)',
|
||
`agent_role` varchar(32) NOT NULL DEFAULT '*' COMMENT 'designer/critic/*',
|
||
`enabled` tinyint NOT NULL DEFAULT 0 COMMENT '默认0=fail-closed 拒绝',
|
||
`risk_level` varchar(32) NOT NULL DEFAULT 'high' COMMENT 'low/medium/high',
|
||
`reason` varchar(255) DEFAULT NULL COMMENT '启用/禁用理由',
|
||
`write_scope` varchar(32) NOT NULL DEFAULT 'none' COMMENT 'none/pbl_only/protected',
|
||
`create_time` datetime DEFAULT NULL,
|
||
`update_time` datetime DEFAULT NULL,
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_pbl_toolpol_tenant_tool_role` (`tenant_id`,`tool_name`,`agent_role`),
|
||
KEY `ix_pbl_toolpol_tenant_enabled` (`tenant_id`,`enabled`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='工具白名单策略(13启用/9禁用,缺省拒绝)';
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_agent_session` (
|
||
`tenant_id` varchar(32) NOT NULL,
|
||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||
`session_no` varchar(32) NOT NULL,
|
||
`blueprint_id` bigint DEFAULT NULL,
|
||
`agent_role` varchar(32) NOT NULL COMMENT 'designer/critic',
|
||
`status` varchar(32) NOT NULL DEFAULT 'running' COMMENT 'running/finished/aborted',
|
||
`goal` varchar(512) DEFAULT NULL,
|
||
`turn_count` int NOT NULL DEFAULT 0,
|
||
`tool_calls` int NOT NULL DEFAULT 0,
|
||
`denied_calls` int NOT NULL DEFAULT 0 COMMENT 'fail-closed 拒绝次数',
|
||
`result` longtext DEFAULT NULL,
|
||
`start_time` datetime DEFAULT NULL,
|
||
`end_time` datetime DEFAULT NULL,
|
||
`create_user` varchar(32) DEFAULT NULL,
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_pbl_asess_tenant_no` (`tenant_id`,`session_no`),
|
||
KEY `ix_pbl_asess_tenant_bp` (`tenant_id`,`blueprint_id`,`status`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Agent 会话';
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_agent_message` (
|
||
`tenant_id` varchar(32) NOT NULL,
|
||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||
`session_id` bigint NOT NULL,
|
||
`seq_no` int NOT NULL COMMENT '会话内序号',
|
||
`role` varchar(32) NOT NULL COMMENT 'system/user/assistant/tool',
|
||
`content` longtext DEFAULT NULL,
|
||
`token_in` int NOT NULL DEFAULT 0,
|
||
`token_out` int NOT NULL DEFAULT 0,
|
||
`create_time` datetime DEFAULT NULL,
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_pbl_amsg_tenant_sess_seq` (`tenant_id`,`session_id`,`seq_no`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='Agent 消息轨迹';
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_agent_tool_call` (
|
||
`tenant_id` varchar(32) NOT NULL,
|
||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||
`session_id` bigint NOT NULL,
|
||
`message_id` bigint DEFAULT NULL,
|
||
`tool_name` varchar(64) NOT NULL,
|
||
`verdict` varchar(32) NOT NULL COMMENT 'allow/deny',
|
||
`deny_reason` varchar(255) DEFAULT NULL COMMENT 'not_in_whitelist/write_protected/missing_tenant/...',
|
||
`args` longtext DEFAULT NULL,
|
||
`result` longtext DEFAULT NULL,
|
||
`error_code` varchar(32) DEFAULT NULL,
|
||
`elapsed_ms` int NOT NULL DEFAULT 0,
|
||
`create_time` datetime DEFAULT NULL,
|
||
PRIMARY KEY (`id`),
|
||
KEY `ix_pbl_atool_tenant_sess` (`tenant_id`,`session_id`,`verdict`),
|
||
KEY `ix_pbl_atool_tenant_tool` (`tenant_id`,`tool_name`,`verdict`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='工具调用裁决审计(fail-closed 全量留痕)';
|
||
|
||
-- -----------------------------------------------------------------------------
|
||
-- M5a/M5b pbl_evidence —— 产出物与证据幂等采集(3 表)
|
||
-- -----------------------------------------------------------------------------
|
||
CREATE TABLE IF NOT EXISTS `pbl_artifact` (
|
||
`tenant_id` varchar(32) NOT NULL,
|
||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||
`artifact_no` varchar(32) NOT NULL COMMENT '产出物编号',
|
||
`blueprint_id` bigint DEFAULT NULL,
|
||
`session_id` bigint DEFAULT NULL COMMENT '运行时会话(scense_runtime)',
|
||
`team_id` varchar(32) DEFAULT NULL,
|
||
`student_id` varchar(32) DEFAULT NULL,
|
||
`artifact_type` varchar(32) NOT NULL COMMENT '类型编码',
|
||
`name` varchar(128) NOT NULL,
|
||
`content` longtext DEFAULT NULL,
|
||
`file_path` varchar(255) DEFAULT NULL,
|
||
`content_hash` varchar(64) NOT NULL COMMENT '幂等键之一',
|
||
`idempotent_key` varchar(64) NOT NULL COMMENT '幂等键(tenant+source+hash)',
|
||
`source` varchar(32) NOT NULL DEFAULT 'runtime' COMMENT 'runtime/upload/agent/compile',
|
||
`status` varchar(32) NOT NULL DEFAULT 'collected',
|
||
`collect_time` datetime DEFAULT NULL,
|
||
`create_time` datetime DEFAULT NULL,
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_pbl_arti_tenant_idem` (`tenant_id`,`idempotent_key`),
|
||
KEY `ix_pbl_arti_tenant_bp` (`tenant_id`,`blueprint_id`,`artifact_type`),
|
||
KEY `ix_pbl_arti_tenant_team` (`tenant_id`,`team_id`,`student_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='产出物(幂等采集)';
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_evidence_event` (
|
||
`tenant_id` varchar(32) NOT NULL,
|
||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||
`artifact_id` bigint DEFAULT NULL,
|
||
`session_id` bigint DEFAULT NULL,
|
||
`event_type` varchar(32) NOT NULL COMMENT '事件类型编码',
|
||
`event_time` datetime NOT NULL,
|
||
`actor_id` varchar(32) DEFAULT NULL,
|
||
`payload` longtext DEFAULT NULL,
|
||
`content_hash` varchar(64) DEFAULT NULL,
|
||
`create_time` datetime DEFAULT NULL,
|
||
PRIMARY KEY (`id`),
|
||
KEY `ix_pbl_eev_tenant_arti` (`tenant_id`,`artifact_id`),
|
||
KEY `ix_pbl_eev_tenant_sess_time` (`tenant_id`,`session_id`,`event_time`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='证据事件流';
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_evidence_file` (
|
||
`tenant_id` varchar(32) NOT NULL,
|
||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||
`artifact_id` bigint NOT NULL,
|
||
`file_name` varchar(255) NOT NULL,
|
||
`file_path` varchar(255) NOT NULL,
|
||
`mime_type` varchar(64) DEFAULT NULL,
|
||
`size_bytes` bigint NOT NULL DEFAULT 0,
|
||
`content_hash` varchar(64) NOT NULL,
|
||
`create_time` datetime DEFAULT NULL,
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_pbl_efile_tenant_arti_hash` (`tenant_id`,`artifact_id`,`content_hash`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='证据附件';
|
||
|
||
-- -----------------------------------------------------------------------------
|
||
-- M6 pbl_assessment —— Rubric 加权评估与报告(3 表)
|
||
-- -----------------------------------------------------------------------------
|
||
CREATE TABLE IF NOT EXISTS `pbl_rubric` (
|
||
`tenant_id` varchar(32) NOT NULL,
|
||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||
`code` varchar(32) NOT NULL,
|
||
`name` varchar(128) NOT NULL,
|
||
`blueprint_id` bigint DEFAULT NULL,
|
||
`total_weight` int NOT NULL DEFAULT 100,
|
||
`status` varchar(32) NOT NULL DEFAULT 'draft',
|
||
`create_time` datetime DEFAULT NULL,
|
||
`update_time` datetime DEFAULT NULL,
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_pbl_rubric_tenant_code` (`tenant_id`,`code`),
|
||
KEY `ix_pbl_rubric_tenant_bp` (`tenant_id`,`blueprint_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='评估量规';
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_rubric_criterion` (
|
||
`tenant_id` varchar(32) NOT NULL,
|
||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||
`rubric_id` bigint NOT NULL,
|
||
`code` varchar(32) NOT NULL,
|
||
`name` varchar(128) NOT NULL,
|
||
`dimension` varchar(32) DEFAULT NULL,
|
||
`weight` int NOT NULL DEFAULT 0 COMMENT '权重(整数,总和=100)',
|
||
`max_score` int NOT NULL DEFAULT 5,
|
||
`levels` longtext DEFAULT NULL COMMENT '等级描述JSON(确定性序列化)',
|
||
`sort_no` int NOT NULL DEFAULT 0,
|
||
`create_time` datetime DEFAULT NULL,
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_pbl_rcrit_tenant_rubric_code` (`tenant_id`,`rubric_id`,`code`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='量规评分项';
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_assessment_report` (
|
||
`tenant_id` varchar(32) NOT NULL,
|
||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||
`report_no` varchar(32) NOT NULL,
|
||
`rubric_id` bigint NOT NULL,
|
||
`blueprint_id` bigint DEFAULT NULL,
|
||
`team_id` varchar(32) DEFAULT NULL,
|
||
`student_id` varchar(32) DEFAULT NULL,
|
||
`score_total` int NOT NULL DEFAULT 0,
|
||
`level` varchar(32) NOT NULL DEFAULT 'L0',
|
||
`detail` longtext DEFAULT NULL COMMENT '逐项得分JSON',
|
||
`evidence_ref` longtext DEFAULT NULL COMMENT '引用证据ID列表JSON',
|
||
`assessor` varchar(32) DEFAULT NULL COMMENT 'teacher/agent/critic',
|
||
`status` varchar(32) NOT NULL DEFAULT 'draft',
|
||
`create_time` datetime DEFAULT NULL,
|
||
`update_time` datetime DEFAULT NULL,
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_pbl_areport_tenant_no` (`tenant_id`,`report_no`),
|
||
KEY `ix_pbl_areport_tenant_team` (`tenant_id`,`team_id`,`student_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='评估报告';
|
||
|
||
-- -----------------------------------------------------------------------------
|
||
-- M7 pbl_kdb_ext —— KDB 只读桩与匿名聚合(零写入,1 表:查询留痕)
|
||
-- -----------------------------------------------------------------------------
|
||
CREATE TABLE IF NOT EXISTS `pbl_kdb_query_log` (
|
||
`tenant_id` varchar(32) NOT NULL,
|
||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||
`query_no` varchar(32) NOT NULL,
|
||
`kdb_key` varchar(64) NOT NULL COMMENT '知识点/知识图谱键',
|
||
`scope` varchar(32) NOT NULL DEFAULT 'read' COMMENT '只允许 read',
|
||
`anonymized` tinyint NOT NULL DEFAULT 1 COMMENT '是否匿名聚合',
|
||
`result_count` int NOT NULL DEFAULT 0,
|
||
`caller` varchar(32) DEFAULT NULL,
|
||
`elapsed_ms` int NOT NULL DEFAULT 0,
|
||
`create_time` datetime DEFAULT NULL,
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_pbl_kdblog_tenant_no` (`tenant_id`,`query_no`),
|
||
KEY `ix_pbl_kdblog_tenant_key` (`tenant_id`,`kdb_key`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='KDB只读查询留痕(零写入基表)';
|
||
|
||
-- -----------------------------------------------------------------------------
|
||
-- M8 pbl_domain_ext —— world/scene/entity 薄扩展(不改基表,3 表)
|
||
-- -----------------------------------------------------------------------------
|
||
CREATE TABLE IF NOT EXISTS `pbl_world_ext` (
|
||
`tenant_id` varchar(32) NOT NULL,
|
||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||
`world_id` bigint NOT NULL COMMENT 'world.id(只读引用,无FK)',
|
||
`blueprint_id` bigint DEFAULT NULL,
|
||
`class_id` varchar(32) DEFAULT NULL COMMENT '班级',
|
||
`team_id` varchar(32) DEFAULT NULL COMMENT '团队',
|
||
`ext` longtext DEFAULT NULL COMMENT '扩展属性JSON',
|
||
`create_time` datetime DEFAULT NULL,
|
||
`update_time` datetime DEFAULT NULL,
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_pbl_wext_tenant_world` (`tenant_id`,`world_id`),
|
||
KEY `ix_pbl_wext_tenant_class_team` (`tenant_id`,`class_id`,`team_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='world 薄扩展(租户/班级/团队关联)';
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_scene_ext` (
|
||
`tenant_id` varchar(32) NOT NULL,
|
||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||
`scene_id` bigint NOT NULL COMMENT 'scene.id(只读引用)',
|
||
`blueprint_id` bigint DEFAULT NULL,
|
||
`class_id` varchar(32) DEFAULT NULL,
|
||
`team_id` varchar(32) DEFAULT NULL,
|
||
`ext` longtext DEFAULT NULL,
|
||
`create_time` datetime DEFAULT NULL,
|
||
`update_time` datetime DEFAULT NULL,
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_pbl_sext_tenant_scene` (`tenant_id`,`scene_id`),
|
||
KEY `ix_pbl_sext_tenant_class_team` (`tenant_id`,`class_id`,`team_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='scene 薄扩展';
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_entity_ext` (
|
||
`tenant_id` varchar(32) NOT NULL,
|
||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||
`entity_id` bigint NOT NULL COMMENT 'entity.id(只读引用)',
|
||
`blueprint_id` bigint DEFAULT NULL,
|
||
`class_id` varchar(32) DEFAULT NULL,
|
||
`team_id` varchar(32) DEFAULT NULL,
|
||
`role_code` varchar(32) DEFAULT NULL COMMENT '对应 pbl_sub_role.code',
|
||
`ext` longtext DEFAULT NULL,
|
||
`create_time` datetime DEFAULT NULL,
|
||
`update_time` datetime DEFAULT NULL,
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_pbl_eext_tenant_entity` (`tenant_id`,`entity_id`),
|
||
KEY `ix_pbl_eext_tenant_class_team` (`tenant_id`,`class_id`,`team_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='entity 薄扩展';
|
||
|
||
-- -----------------------------------------------------------------------------
|
||
-- M11a/M11b pbl_runtime_ext —— 单事务事件+状态写入与广播登记(2 表)
|
||
-- -----------------------------------------------------------------------------
|
||
CREATE TABLE IF NOT EXISTS `pbl_runtime_event` (
|
||
`tenant_id` varchar(32) NOT NULL,
|
||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||
`event_uid` varchar(64) NOT NULL COMMENT '事件唯一ID(幂等键)',
|
||
`session_id` bigint NOT NULL COMMENT 'scense_runtime 会话(只读引用)',
|
||
`world_id` bigint DEFAULT NULL,
|
||
`event_type` varchar(32) NOT NULL,
|
||
`source_id` varchar(32) DEFAULT NULL,
|
||
`target_id` varchar(32) DEFAULT NULL,
|
||
`payload` longtext DEFAULT NULL,
|
||
`tx_group` varchar(64) NOT NULL COMMENT '单事务分组ID(事件+状态+广播同组)',
|
||
`seq_no` bigint NOT NULL DEFAULT 0 COMMENT '会话内单调序号(重放依据)',
|
||
`applied` tinyint NOT NULL DEFAULT 0 COMMENT '是否已应用状态',
|
||
`broadcast_state` varchar(32) NOT NULL DEFAULT 'pending' COMMENT 'pending/sent/failed',
|
||
`event_time` datetime NOT NULL,
|
||
`create_time` datetime DEFAULT NULL,
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_pbl_rev_tenant_uid` (`tenant_id`,`event_uid`),
|
||
KEY `ix_pbl_rev_tenant_sess_seq` (`tenant_id`,`session_id`,`seq_no`),
|
||
KEY `ix_pbl_rev_tenant_tx` (`tenant_id`,`tx_group`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='运行时事件(单事务写入+可重放)';
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_runtime_state` (
|
||
`tenant_id` varchar(32) NOT NULL,
|
||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||
`session_id` bigint NOT NULL,
|
||
`state_key` varchar(64) NOT NULL COMMENT '状态键(entity/scene/global)',
|
||
`state_value` longtext DEFAULT NULL COMMENT '状态值JSON',
|
||
`version` bigint NOT NULL DEFAULT 0 COMMENT '乐观锁版本',
|
||
`last_event_id` bigint DEFAULT NULL COMMENT '最后应用事件ID',
|
||
`tx_group` varchar(64) DEFAULT NULL,
|
||
`update_time` datetime DEFAULT NULL,
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_pbl_rstate_tenant_sess_key` (`tenant_id`,`session_id`,`state_key`),
|
||
KEY `ix_pbl_rstate_tenant_tx` (`tenant_id`,`tx_group`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='运行时状态(与事件同事务写入)';
|
||
|
||
-- -----------------------------------------------------------------------------
|
||
-- M12 pbl_template —— 模板实例化记录(1 表)
|
||
-- -----------------------------------------------------------------------------
|
||
CREATE TABLE IF NOT EXISTS `pbl_template_instance` (
|
||
`tenant_id` varchar(32) NOT NULL,
|
||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||
`template_id` bigint NOT NULL COMMENT 'pbl_blueprint_template.id',
|
||
`blueprint_id` bigint NOT NULL COMMENT '实例化产生的蓝图',
|
||
`params` longtext DEFAULT NULL COMMENT '实例化参数JSON',
|
||
`mode` varchar(32) NOT NULL DEFAULT 'online' COMMENT 'online/offline(离线兜底)',
|
||
`status` varchar(32) NOT NULL DEFAULT 'created',
|
||
`create_user` varchar(32) DEFAULT NULL,
|
||
`create_time` datetime DEFAULT NULL,
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_pbl_tinst_tenant_tpl_bp` (`tenant_id`,`template_id`,`blueprint_id`),
|
||
KEY `ix_pbl_tinst_tenant_status` (`tenant_id`,`status`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='模板实例化记录';
|
||
|
||
-- -----------------------------------------------------------------------------
|
||
-- M13 pbl_analytics —— 学习分析快照与指标(2 表)
|
||
-- -----------------------------------------------------------------------------
|
||
CREATE TABLE IF NOT EXISTS `pbl_analytics_metric` (
|
||
`tenant_id` varchar(32) NOT NULL,
|
||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||
`metric_code` varchar(32) NOT NULL,
|
||
`scope` varchar(32) NOT NULL DEFAULT 'student' COMMENT 'student/team/class/blueprint',
|
||
`scope_id` varchar(32) NOT NULL,
|
||
`blueprint_id` bigint DEFAULT NULL,
|
||
`value_num` decimal(18,4) NOT NULL DEFAULT 0,
|
||
`value_text` varchar(255) DEFAULT NULL,
|
||
`stat_date` datetime NOT NULL COMMENT '统计时点(datetime,非TIMESTAMP)',
|
||
`create_time` datetime DEFAULT NULL,
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_pbl_ametric_tenant_code_scope_date` (`tenant_id`,`metric_code`,`scope`,`scope_id`,`stat_date`),
|
||
KEY `ix_pbl_ametric_tenant_bp` (`tenant_id`,`blueprint_id`,`metric_code`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='分析指标明细';
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_analytics_snapshot` (
|
||
`tenant_id` varchar(32) NOT NULL,
|
||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||
`snapshot_no` varchar(32) NOT NULL,
|
||
`blueprint_id` bigint DEFAULT NULL,
|
||
`class_id` varchar(32) DEFAULT NULL,
|
||
`period` varchar(32) DEFAULT NULL,
|
||
`content` longtext DEFAULT NULL COMMENT '聚合结果JSON(匿名化)',
|
||
`content_hash` varchar(64) DEFAULT NULL,
|
||
`create_time` datetime DEFAULT NULL,
|
||
PRIMARY KEY (`id`),
|
||
UNIQUE KEY `uk_pbl_asnap_tenant_no` (`tenant_id`,`snapshot_no`),
|
||
KEY `ix_pbl_asnap_tenant_bp_class` (`tenant_id`,`blueprint_id`,`class_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='分析快照';
|
||
|
||
-- -----------------------------------------------------------------------------
|
||
-- M14 pbl_governance —— 治理与审计(append-only,1 表)
|
||
-- -----------------------------------------------------------------------------
|
||
CREATE TABLE IF NOT EXISTS `pbl_audit_log` (
|
||
`tenant_id` varchar(32) NOT NULL,
|
||
`id` bigint NOT NULL AUTO_INCREMENT,
|
||
`trace_id` varchar(64) NOT NULL COMMENT '链路追踪ID',
|
||
`actor_role` varchar(32) NOT NULL COMMENT 'owner.audit/teacher/agent.designer/agent.critic',
|
||
`actor_id` varchar(32) DEFAULT NULL,
|
||
`action` varchar(64) NOT NULL COMMENT '动作',
|
||
`object_type` varchar(32) DEFAULT NULL,
|
||
`object_id` varchar(64) DEFAULT NULL,
|
||
`result` varchar(32) NOT NULL DEFAULT 'success' COMMENT 'success/denied/error',
|
||
`error_code` varchar(32) DEFAULT NULL,
|
||
`detail` longtext DEFAULT NULL,
|
||
`client_ip` varchar(64) DEFAULT NULL,
|
||
`log_time` datetime NOT NULL,
|
||
PRIMARY KEY (`id`),
|
||
KEY `ix_pbl_audit_tenant_time` (`tenant_id`,`log_time`),
|
||
KEY `ix_pbl_audit_tenant_trace` (`tenant_id`,`trace_id`),
|
||
KEY `ix_pbl_audit_tenant_obj` (`tenant_id`,`object_type`,`object_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='治理审计日志(append-only,owner.audit 独立角色,禁自删)';
|
||
|
||
-- =============================================================================
|
||
-- 表清单(36):
|
||
-- pbl_blueprint(11): pbl_blueprint, pbl_blueprint_version, pbl_blueprint_template,
|
||
-- pbl_sub_world, pbl_sub_scene, pbl_sub_role, pbl_sub_task,
|
||
-- pbl_sub_rule, pbl_sub_artifact, pbl_sub_assessment, pbl_sub_link
|
||
-- pbl_validation(3): pbl_validation_rule, pbl_validation_run, pbl_validation_issue
|
||
-- pbl_compiler(3): pbl_compile_job, pbl_compile_artifact, pbl_game_definition
|
||
-- pbl_agent_runtime(4): pbl_agent_tool_policy, pbl_agent_session, pbl_agent_message, pbl_agent_tool_call
|
||
-- pbl_evidence(3): pbl_artifact, pbl_evidence_event, pbl_evidence_file
|
||
-- pbl_assessment(3): pbl_rubric, pbl_rubric_criterion, pbl_assessment_report
|
||
-- pbl_kdb_ext(1): pbl_kdb_query_log
|
||
-- pbl_domain_ext(3): pbl_world_ext, pbl_scene_ext, pbl_entity_ext
|
||
-- pbl_runtime_ext(2):pbl_runtime_event, pbl_runtime_state
|
||
-- pbl_template(1): pbl_template_instance
|
||
-- pbl_analytics(2): pbl_analytics_metric, pbl_analytics_snapshot
|
||
-- pbl_governance(1): pbl_audit_log
|
||
-- 合计 11+3+3+4+3+3+1+3+2+1+2+1 = 37 声明位(其中 pbl_sub_link 为关系边表,
|
||
-- 计入 blueprint 域 11 表内),业务表总计 36(pbl_common / pbl_appcodes 零表)。
|
||
-- =============================================================================
|