669 lines
41 KiB
SQL
669 lines
41 KiB
SQL
-- pbls 36 表 DDL(MariaDB 10.x 方言,由 scripts/gen_artifacts.py 从同一 spec 生成)
|
||
-- 硬约束:tenant_id 打头 / id 为 BIGINT UNSIGNED AUTO_INCREMENT 主键;-- 不使用 外键约束 / 枚举列类型 / 时间戳列类型 / 位图列类型(枚举值走 appcodes 编码表,时间列走 DATETIME 由应用层写入)
|
||
-- 方言来源:projects/pbls/env/test.json -> db.engine = mariadb(禁 BIGSERIAL/SERIAL/nextval 等 PG 语法)
|
||
SET NAMES utf8mb4;
|
||
|
||
-- ===== pbl_blueprint (M1) =====
|
||
CREATE TABLE IF NOT EXISTS `pbl_blueprint` (
|
||
`tenant_id` VARCHAR(32) NOT NULL NOT NULL COMMENT 租户ID(强制打头),
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键,
|
||
`code` VARCHAR(64) NOT NULL COMMENT "蓝图编码",
|
||
`title` VARCHAR(128) NOT NULL COMMENT "标题",
|
||
`subject` VARCHAR(64) NOT NULL COMMENT "学科",
|
||
`grade` VARCHAR(64) NOT NULL COMMENT "年级",
|
||
`description` TEXT NULL COMMENT "说明",
|
||
`quality_state` VARCHAR(64) NOT NULL COMMENT "质量状态 pbl_quality_state",
|
||
`generation_source` VARCHAR(64) NOT NULL COMMENT "生成来源 llm/template_fallback/manual",
|
||
`approval_status` VARCHAR(64) NOT NULL COMMENT "审批状态",
|
||
`visibility` VARCHAR(64) NOT NULL COMMENT "可见范围",
|
||
`content_json` LONGTEXT NULL COMMENT "蓝图正文(结构化模型,非散文)",
|
||
`version_no` INT NOT NULL DEFAULT 0 COMMENT "当前版本",
|
||
`compiler_version_id` BIGINT UNSIGNED NOT NULL COMMENT "编译版本",
|
||
`world_id` BIGINT UNSIGNED NOT NULL COMMENT "编译产物落 world 的溯源ID",
|
||
`created_by` VARCHAR(32) NOT 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_bp_tenant_code` (`tenant_id`, `code`),
|
||
KEY `idx_bp_tenant_state` (`tenant_id`, `quality_state`),
|
||
KEY `idx_bp_tenant_creator` (`tenant_id`, `created_by`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT="PBL 蓝图聚合根(第8章 schema 落库)";
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_blueprint_learning_goal` (
|
||
`tenant_id` VARCHAR(32) NOT NULL NOT NULL COMMENT 租户ID(强制打头),
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键,
|
||
`blueprint_id` BIGINT UNSIGNED NOT NULL COMMENT "所属蓝图",
|
||
`obj_uid` VARCHAR(32) NOT NULL COMMENT "子对象UID",
|
||
`code` VARCHAR(64) NOT NULL COMMENT "目标编码",
|
||
`title` VARCHAR(128) NOT NULL COMMENT "标题",
|
||
`description` TEXT NULL COMMENT "描述",
|
||
`bloom_level` VARCHAR(64) NOT NULL COMMENT "布鲁姆层级",
|
||
`measurable` TINYINT(1) NOT NULL DEFAULT 0 COMMENT "是否可测",
|
||
`order_no` INT NOT NULL DEFAULT 0 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`),
|
||
KEY `idx_blueprint_learning_goal_bp` (`tenant_id`, `blueprint_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT="蓝图子对象 - 学习目标";
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_blueprint_role` (
|
||
`tenant_id` VARCHAR(32) NOT NULL NOT NULL COMMENT 租户ID(强制打头),
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键,
|
||
`blueprint_id` BIGINT UNSIGNED NOT NULL COMMENT "所属蓝图",
|
||
`obj_uid` VARCHAR(32) NOT NULL COMMENT "子对象UID",
|
||
`code` VARCHAR(64) NOT NULL COMMENT "角色编码",
|
||
`title` VARCHAR(128) NOT NULL COMMENT "角色名",
|
||
`persona_txt` TEXT NULL COMMENT "人设",
|
||
`capabilities_json` LONGTEXT NULL COMMENT "能力引用",
|
||
`headcount` INT NOT NULL DEFAULT 0 COMMENT "名额",
|
||
`order_no` INT NOT NULL DEFAULT 0 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`),
|
||
KEY `idx_blueprint_role_bp` (`tenant_id`, `blueprint_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT="蓝图子对象 - PBL 角色";
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_blueprint_mission` (
|
||
`tenant_id` VARCHAR(32) NOT NULL NOT NULL COMMENT 租户ID(强制打头),
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键,
|
||
`blueprint_id` BIGINT UNSIGNED NOT NULL COMMENT "所属蓝图",
|
||
`obj_uid` VARCHAR(32) NOT NULL COMMENT "子对象UID",
|
||
`code` VARCHAR(64) NOT NULL COMMENT "任务域编码",
|
||
`title` VARCHAR(128) NOT NULL COMMENT "驱动问题域",
|
||
`scenario_txt` TEXT NULL COMMENT "情境",
|
||
`unlock_condition_json` LONGTEXT NULL COMMENT "解锁条件",
|
||
`order_no` INT NOT NULL DEFAULT 0 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`),
|
||
KEY `idx_blueprint_mission_bp` (`tenant_id`, `blueprint_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT="蓝图子对象 - 驱动问题/Mission";
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_blueprint_task` (
|
||
`tenant_id` VARCHAR(32) NOT NULL NOT NULL COMMENT 租户ID(强制打头),
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键,
|
||
`blueprint_id` BIGINT UNSIGNED NOT NULL COMMENT "所属蓝图",
|
||
`obj_uid` VARCHAR(32) NOT NULL COMMENT "子对象UID",
|
||
`mission_id` BIGINT UNSIGNED NOT NULL COMMENT "所属Mission",
|
||
`code` VARCHAR(64) NOT NULL COMMENT "编码",
|
||
`title` VARCHAR(128) NOT NULL COMMENT "任务名",
|
||
`steps_json` LONGTEXT NULL COMMENT "步骤",
|
||
`difficulty` VARCHAR(64) NOT NULL COMMENT "难度",
|
||
`order_no` INT NOT NULL DEFAULT 0 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`),
|
||
KEY `idx_blueprint_task_bp` (`tenant_id`, `blueprint_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT="蓝图子对象 - 任务";
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_blueprint_artifact_spec` (
|
||
`tenant_id` VARCHAR(32) NOT NULL NOT NULL COMMENT 租户ID(强制打头),
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键,
|
||
`blueprint_id` BIGINT UNSIGNED NOT NULL COMMENT "所属蓝图",
|
||
`obj_uid` VARCHAR(32) NOT NULL COMMENT "子对象UID",
|
||
`code` VARCHAR(64) NOT NULL COMMENT "编码",
|
||
`title` VARCHAR(128) NOT NULL COMMENT "产出物名",
|
||
`artifact_type` VARCHAR(64) NOT NULL COMMENT "产出类型",
|
||
`required_fields_json` LONGTEXT NULL COMMENT "必填字段",
|
||
`order_no` INT NOT NULL DEFAULT 0 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`),
|
||
KEY `idx_blueprint_artifact_spec_bp` (`tenant_id`, `blueprint_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT="蓝图子对象 - 产出物规格";
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_blueprint_evidence_spec` (
|
||
`tenant_id` VARCHAR(32) NOT NULL NOT NULL COMMENT 租户ID(强制打头),
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键,
|
||
`blueprint_id` BIGINT UNSIGNED NOT NULL COMMENT "所属蓝图",
|
||
`obj_uid` VARCHAR(32) NOT NULL COMMENT "子对象UID",
|
||
`evidence_type` VARCHAR(64) NOT NULL COMMENT "证据类型",
|
||
`source` VARCHAR(64) NOT NULL COMMENT "来源",
|
||
`min_count` INT NOT NULL DEFAULT 0 COMMENT "最少条数",
|
||
`rubric_criterion_uid` VARCHAR(32) NOT NULL COMMENT "对齐的评分准则UID",
|
||
`order_no` INT NOT NULL DEFAULT 0 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`),
|
||
KEY `idx_blueprint_evidence_spec_bp` (`tenant_id`, `blueprint_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT="蓝图子对象 - 证据规格";
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_blueprint_reflection_spec` (
|
||
`tenant_id` VARCHAR(32) NOT NULL NOT NULL COMMENT 租户ID(强制打头),
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键,
|
||
`blueprint_id` BIGINT UNSIGNED NOT NULL COMMENT "所属蓝图",
|
||
`obj_uid` VARCHAR(32) NOT NULL COMMENT "子对象UID",
|
||
`trigger` VARCHAR(64) NOT NULL COMMENT "触发点",
|
||
`prompt_txt` TEXT NULL COMMENT "反思引导语",
|
||
`min_words` INT NOT NULL DEFAULT 0 COMMENT "最少字数",
|
||
`evidence_type` VARCHAR(64) NOT NULL COMMENT "产出证据类型",
|
||
`order_no` INT NOT NULL DEFAULT 0 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`),
|
||
KEY `idx_bp_rs_bp` (`tenant_id`, `blueprint_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT="蓝图子对象 - 反思规格";
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_blueprint_version` (
|
||
`tenant_id` VARCHAR(32) NOT NULL NOT NULL COMMENT 租户ID(强制打头),
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键,
|
||
`blueprint_id` BIGINT UNSIGNED NOT NULL COMMENT "蓝图ID",
|
||
`version_no` INT NOT NULL DEFAULT 0 COMMENT "版本号",
|
||
`snapshot_json` LONGTEXT NULL COMMENT "全量快照",
|
||
`change_delta_json` LONGTEXT NULL COMMENT "结构化增量",
|
||
`quality_state` VARCHAR(64) NOT NULL COMMENT "质量状态",
|
||
`generation_source` VARCHAR(64) NOT NULL COMMENT "生成来源",
|
||
`created_by` VARCHAR(32) NOT 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_bpv` (`tenant_id`, `blueprint_id`, `version_no`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT="蓝图版本(change_delta 证明对话式改模型)";
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_template` (
|
||
`tenant_id` VARCHAR(32) NOT NULL NOT NULL COMMENT 租户ID(强制打头),
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键,
|
||
`code` VARCHAR(64) NOT NULL COMMENT "模板编码",
|
||
`title` VARCHAR(128) NOT NULL COMMENT "标题",
|
||
`subject` VARCHAR(64) NOT NULL COMMENT "学科",
|
||
`grade` VARCHAR(64) NOT NULL COMMENT "年级",
|
||
`skeleton_json` LONGTEXT NULL COMMENT "骨架",
|
||
`fallback_slot_json` LONGTEXT NULL COMMENT "兜底槽位(LLM不可用时填充)",
|
||
`is_builtin` TINYINT(1) NOT NULL DEFAULT 0 COMMENT "内置",
|
||
`use_count` INT NOT NULL DEFAULT 0 COMMENT "实例化次数",
|
||
`quality_state` VARCHAR(64) NOT 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_tpl_tenant_code` (`tenant_id`, `code`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT="PBL 模板(含离线兜底槽位)";
|
||
|
||
-- ===== pbl_validation (M2) =====
|
||
CREATE TABLE IF NOT EXISTS `pbl_validation_rule` (
|
||
`tenant_id` VARCHAR(32) NOT NULL NOT NULL COMMENT 租户ID(强制打头),
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键,
|
||
`code` VARCHAR(64) NOT NULL COMMENT "规则编码",
|
||
`dimension` VARCHAR(64) NOT NULL COMMENT "维度",
|
||
`title` VARCHAR(128) NOT NULL COMMENT "标题",
|
||
`rule_json` LONGTEXT NULL COMMENT "规则体",
|
||
`threshold_json` LONGTEXT NULL COMMENT "阈值(可配,Q-OPEN-8)",
|
||
`severity` VARCHAR(64) NOT NULL COMMENT "严重度",
|
||
`enabled` TINYINT(1) NOT NULL DEFAULT 0 COMMENT "启用",
|
||
`version_no` INT NOT NULL DEFAULT 0 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_vr_code` (`tenant_id`, `code`, `version_no`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT="校验规则(14 维,规则 JSON 形态 script_type=1)";
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_validation_result` (
|
||
`tenant_id` VARCHAR(32) NOT NULL NOT NULL COMMENT 租户ID(强制打头),
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键,
|
||
`blueprint_id` BIGINT UNSIGNED NOT NULL COMMENT "蓝图ID",
|
||
`blueprint_version_no` INT NOT NULL DEFAULT 0 COMMENT "校验时版本",
|
||
`dimension_count` INT NOT NULL DEFAULT 0 COMMENT "维度数(=14)",
|
||
`passed_count` INT NOT NULL DEFAULT 0 COMMENT "通过数",
|
||
`failed_count` INT NOT NULL DEFAULT 0 COMMENT "失败数",
|
||
`score` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT "得分",
|
||
`quality_state` VARCHAR(64) NOT NULL COMMENT "质量状态",
|
||
`findings_json` LONGTEXT NULL COMMENT "逐维结论",
|
||
`rule_set_version` VARCHAR(64) NOT NULL COMMENT "规则集版本",
|
||
`created_by` VARCHAR(32) NOT 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`),
|
||
KEY `idx_vres_bp` (`tenant_id`, `blueprint_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT="校验结果(14 维 + 5 级质量状态)";
|
||
|
||
-- ===== pbl_compiler (M3) =====
|
||
CREATE TABLE IF NOT EXISTS `pbl_compiler_version` (
|
||
`tenant_id` VARCHAR(32) NOT NULL NOT NULL COMMENT 租户ID(强制打头),
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键,
|
||
`code` VARCHAR(64) NOT NULL COMMENT "版本编码",
|
||
`semver` VARCHAR(64) NOT NULL COMMENT "语义化版本",
|
||
`rules_hash` VARCHAR(32) NOT NULL COMMENT "规则集SHA256前缀",
|
||
`entrypoint` VARCHAR(64) NOT NULL COMMENT "入口函数",
|
||
`enabled` TINYINT(1) NOT NULL DEFAULT 0 COMMENT "启用",
|
||
`notes` TEXT 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_cv_code` (`tenant_id`, `code`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT="编译器版本(29.6 确定性)";
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_game_definition` (
|
||
`tenant_id` VARCHAR(32) NOT NULL NOT NULL COMMENT 租户ID(强制打头),
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键,
|
||
`blueprint_id` BIGINT UNSIGNED NOT NULL COMMENT "来源蓝图",
|
||
`blueprint_version_no` INT NOT NULL DEFAULT 0 COMMENT "蓝图版本",
|
||
`compiler_version_id` BIGINT UNSIGNED NOT NULL COMMENT "编译版本",
|
||
`content_fingerprint` VARCHAR(32) NOT NULL COMMENT "SHA-256 指纹",
|
||
`definition_json` LONGTEXT NULL COMMENT "Game Definition 正文",
|
||
`world_id` BIGINT UNSIGNED NOT NULL COMMENT "落库 world",
|
||
`scene_id` BIGINT UNSIGNED NOT NULL COMMENT "落库 scene",
|
||
`entity_count` INT NOT NULL DEFAULT 0 COMMENT "实体数",
|
||
`event_count` INT NOT NULL DEFAULT 0 COMMENT "事件数",
|
||
`quality_state` VARCHAR(64) NOT NULL COMMENT "编译时质量状态",
|
||
`duration_ms` INT NOT NULL DEFAULT 0 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_gd_fp` (`tenant_id`, `content_fingerprint`),
|
||
KEY `idx_gd_bp` (`tenant_id`, `blueprint_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT="Game Definition(第9章 schema + 指纹)";
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_capability_registry` (
|
||
`tenant_id` VARCHAR(32) NOT NULL NOT NULL COMMENT 租户ID(强制打头),
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键,
|
||
`capability_key` VARCHAR(64) NOT NULL COMMENT "能力键",
|
||
`category` VARCHAR(64) NOT NULL COMMENT "分类",
|
||
`args_schema_json` LONGTEXT NULL COMMENT "参数JSON Schema",
|
||
`permission_required` VARCHAR(64) NOT NULL COMMENT "所需权限",
|
||
`is_enabled` TINYINT(1) NOT NULL DEFAULT 0 COMMENT "启用",
|
||
`version_no` INT NOT NULL DEFAULT 0 COMMENT "版本",
|
||
`description` TEXT 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_cap_key` (`tenant_id`, `capability_key`, `version_no`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT="Capability Registry(第11章缺口补齐)";
|
||
|
||
-- ===== pbl_agent_runtime (M4) =====
|
||
CREATE TABLE IF NOT EXISTS `pbl_agent_def` (
|
||
`tenant_id` VARCHAR(32) NOT NULL NOT NULL COMMENT 租户ID(强制打头),
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键,
|
||
`code` VARCHAR(64) NOT NULL COMMENT "Agent编码",
|
||
`agent_type` VARCHAR(64) NOT NULL COMMENT "类型",
|
||
`name` VARCHAR(128) NOT NULL COMMENT "名称",
|
||
`model_route` VARCHAR(64) NOT NULL COMMENT "pipeline-llm 路由",
|
||
`system_prompt_txt` TEXT NULL COMMENT "提示词",
|
||
`tool_whitelist_json` LONGTEXT NULL COMMENT "工具白名单",
|
||
`permission_mode` VARCHAR(64) NOT NULL COMMENT "read/write 模式",
|
||
`is_enabled` TINYINT(1) NOT NULL DEFAULT 0 COMMENT "启用",
|
||
`version_no` INT NOT NULL DEFAULT 0 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_ad_code` (`tenant_id`, `code`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT="Agent 定义(Designer/Critic)";
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_tool_registry` (
|
||
`tenant_id` VARCHAR(32) NOT NULL NOT NULL COMMENT 租户ID(强制打头),
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键,
|
||
`tool_key` VARCHAR(64) NOT NULL COMMENT "工具键",
|
||
`title` VARCHAR(128) NOT NULL COMMENT "标题",
|
||
`agent_scope` VARCHAR(64) NOT NULL COMMENT "作用域",
|
||
`permission_required` VARCHAR(64) NOT NULL COMMENT "所需权限",
|
||
`enabled` TINYINT(1) NOT NULL DEFAULT 0 COMMENT "启用",
|
||
`params_schema_json` LONGTEXT NULL COMMENT "参数白名单Schema",
|
||
`disabled_reason` VARCHAR(64) NOT NULL COMMENT "禁用原因",
|
||
`version_no` INT NOT NULL DEFAULT 0 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_tr_key` (`tenant_id`, `tool_key`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT="工具注册表(13 启用 / 9 禁用含 pbl.publish)";
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_agent_trace` (
|
||
`tenant_id` VARCHAR(32) NOT NULL NOT NULL COMMENT 租户ID(强制打头),
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键,
|
||
`trace_uid` VARCHAR(32) NOT NULL COMMENT "轨迹UID",
|
||
`agent_code` VARCHAR(64) NOT NULL COMMENT "Agent",
|
||
`blueprint_id` BIGINT UNSIGNED NOT NULL COMMENT "目标蓝图",
|
||
`input_ref_json` LONGTEXT NULL COMMENT "要素1 输入引用",
|
||
`thought_txt` TEXT NULL COMMENT "要素2 思考",
|
||
`action_code` VARCHAR(64) NOT NULL COMMENT "要素3 动作",
|
||
`action_params_json` LONGTEXT NULL COMMENT "要素4 动作参数",
|
||
`observation_json` LONGTEXT NULL COMMENT "要素5 观察",
|
||
`result_state` VARCHAR(64) NOT NULL COMMENT "要素6 结果状态",
|
||
`llm_calls` INT NOT NULL DEFAULT 0 COMMENT "要素7 LLM调用数",
|
||
`duration_ms` INT NOT NULL DEFAULT 0 COMMENT "耗时",
|
||
`created_by` VARCHAR(32) NOT 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_at_uid` (`tenant_id`, `trace_uid`),
|
||
KEY `idx_at_tenant` (`tenant_id`, `created_at`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT="Agent 执行轨迹(第28章 7 要素)";
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_agent_tool_call` (
|
||
`tenant_id` VARCHAR(32) NOT NULL NOT NULL COMMENT 租户ID(强制打头),
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键,
|
||
`trace_id` BIGINT UNSIGNED NOT NULL COMMENT "轨迹ID",
|
||
`tool_key` VARCHAR(64) NOT NULL COMMENT "工具键",
|
||
`request_json` LONGTEXT NULL COMMENT "请求",
|
||
`response_json` LONGTEXT NULL COMMENT "响应",
|
||
`ok` TINYINT(1) NOT NULL DEFAULT 0 COMMENT "成功",
|
||
`error_code` VARCHAR(64) NOT NULL COMMENT "错误码",
|
||
`adjudication_code` VARCHAR(64) NOT NULL COMMENT "裁决结论",
|
||
`duration_ms` INT NOT NULL DEFAULT 0 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`),
|
||
KEY `idx_tc_trace` (`tenant_id`, `trace_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT="工具调用明细(服务端裁决留痕)";
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_approval` (
|
||
`tenant_id` VARCHAR(32) NOT NULL NOT NULL COMMENT 租户ID(强制打头),
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键,
|
||
`approval_uid` VARCHAR(32) NOT NULL COMMENT "审批UID",
|
||
`approval_type` VARCHAR(64) NOT NULL COMMENT "类型",
|
||
`target_type` VARCHAR(64) NOT NULL COMMENT "对象类型",
|
||
`target_id` BIGINT UNSIGNED NOT NULL COMMENT "对象ID",
|
||
`payload_json` LONGTEXT NULL COMMENT "变更内容",
|
||
`status` VARCHAR(64) NOT NULL COMMENT "状态",
|
||
`requested_by` VARCHAR(32) NOT NULL COMMENT "发起人",
|
||
`decided_by` VARCHAR(32) NOT NULL COMMENT "决策人",
|
||
`decided_at` DATETIME NULL NULL COMMENT "决策时间",
|
||
`comment_txt` TEXT 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_ap_uid` (`tenant_id`, `approval_uid`),
|
||
KEY `idx_ap_status` (`tenant_id`, `status`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT="人工审批单(14.2 四类,无绕过路径)";
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_llm_call_log` (
|
||
`tenant_id` VARCHAR(32) NOT NULL NOT NULL COMMENT 租户ID(强制打头),
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键,
|
||
`call_uid` VARCHAR(32) NOT NULL COMMENT "调用UID",
|
||
`agent_code` VARCHAR(64) NOT NULL COMMENT "Agent",
|
||
`route` VARCHAR(64) NOT NULL COMMENT "路由",
|
||
`model` VARCHAR(64) NOT NULL COMMENT "实际模型",
|
||
`prompt_hash` VARCHAR(32) NOT NULL COMMENT "提示词哈希",
|
||
`completion_tokens` INT NOT NULL DEFAULT 0 COMMENT "tokens",
|
||
`latency_ms` INT NOT NULL DEFAULT 0 COMMENT "时延",
|
||
`status` VARCHAR(64) NOT NULL COMMENT "状态",
|
||
`error_code` VARCHAR(64) NOT NULL COMMENT "错误码",
|
||
`fallback_used` TINYINT(1) NOT NULL DEFAULT 0 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_lc_uid` (`tenant_id`, `call_uid`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT="LLM 调用日志(超时/重试/限流/兜底留痕)";
|
||
|
||
-- ===== pbl_evidence (M5) =====
|
||
CREATE TABLE IF NOT EXISTS `pbl_artifact` (
|
||
`tenant_id` VARCHAR(32) NOT NULL NOT NULL COMMENT 租户ID(强制打头),
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键,
|
||
`artifact_uid` VARCHAR(32) NOT NULL COMMENT "产出UID",
|
||
`session_id` BIGINT UNSIGNED NOT NULL COMMENT "会话",
|
||
`blueprint_id` BIGINT UNSIGNED NOT NULL COMMENT "蓝图",
|
||
`team_id` BIGINT UNSIGNED NOT NULL COMMENT "团队",
|
||
`creator_id` VARCHAR(32) NOT NULL COMMENT "作者",
|
||
`title` VARCHAR(128) NOT NULL COMMENT "标题",
|
||
`artifact_type` VARCHAR(64) NOT NULL COMMENT "类型",
|
||
`content_json` LONGTEXT NULL COMMENT "内容",
|
||
`version_no` INT NOT NULL DEFAULT 0 COMMENT "版本",
|
||
`status` VARCHAR(64) NOT NULL COMMENT "状态",
|
||
`submitted_at` DATETIME NULL 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_art_uid` (`tenant_id`, `artifact_uid`),
|
||
KEY `idx_art_session` (`tenant_id`, `session_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT="学生产出物(版本内联 version_no)";
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_evidence` (
|
||
`tenant_id` VARCHAR(32) NOT NULL NOT NULL COMMENT 租户ID(强制打头),
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键,
|
||
`artifact_id` BIGINT UNSIGNED NOT NULL COMMENT "产出物",
|
||
`evidence_type` VARCHAR(64) NOT NULL COMMENT "证据类型",
|
||
`source_event_id` VARCHAR(32) NOT NULL COMMENT "来源 runtime_event",
|
||
`session_id` BIGINT UNSIGNED NOT NULL COMMENT "会话",
|
||
`learner_id` VARCHAR(32) NOT NULL COMMENT "学习者",
|
||
`blueprint_id` BIGINT UNSIGNED NOT NULL COMMENT "蓝图",
|
||
`payload_json` LONGTEXT NULL COMMENT "证据体",
|
||
`occurred_at` DATETIME NOT NULL COMMENT "发生时间",
|
||
`dedup_key` VARCHAR(32) NOT 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_ev_dedup` (`tenant_id`, `source_event_id`, `evidence_type`),
|
||
KEY `idx_ev_learner` (`tenant_id`, `learner_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT="学习证据(幂等采集,唯一索引防重)";
|
||
|
||
-- ===== pbl_assessment (M6) =====
|
||
CREATE TABLE IF NOT EXISTS `pbl_rubric` (
|
||
`tenant_id` VARCHAR(32) NOT NULL NOT NULL COMMENT 租户ID(强制打头),
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键,
|
||
`code` VARCHAR(64) NOT NULL COMMENT "编码",
|
||
`title` VARCHAR(128) NOT NULL COMMENT "标题",
|
||
`blueprint_id` BIGINT UNSIGNED NOT NULL COMMENT "蓝图",
|
||
`criteria_json` LONGTEXT NULL COMMENT "准则数组(含 learning_goal_id/weight)",
|
||
`total_weight` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT "权重合计",
|
||
`version_no` INT NOT NULL DEFAULT 0 COMMENT "版本",
|
||
`status` VARCHAR(64) NOT NULL COMMENT "状态",
|
||
`approval_id` BIGINT UNSIGNED NOT 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_ru_code` (`tenant_id`, `code`, `version_no`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT="Rubric(准则内联 criteria_json,权重合计=100%)";
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_assessment_record` (
|
||
`tenant_id` VARCHAR(32) NOT NULL NOT NULL COMMENT 租户ID(强制打头),
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键,
|
||
`record_uid` VARCHAR(32) NOT NULL COMMENT "记录UID",
|
||
`learner_id` VARCHAR(32) NOT NULL COMMENT "学习者",
|
||
`session_id` BIGINT UNSIGNED NOT NULL COMMENT "会话",
|
||
`blueprint_id` BIGINT UNSIGNED NOT NULL COMMENT "蓝图",
|
||
`artifact_id` BIGINT UNSIGNED NOT NULL COMMENT "产出物",
|
||
`evidence_id` BIGINT UNSIGNED NOT NULL COMMENT "主证据",
|
||
`rubric_id` BIGINT UNSIGNED NOT NULL COMMENT "Rubric",
|
||
`scores_json` LONGTEXT NULL COMMENT "逐准则得分",
|
||
`total_score` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT "加权总分",
|
||
`max_score` DECIMAL(18,2) NOT NULL DEFAULT 0 COMMENT "满分",
|
||
`band` VARCHAR(64) NOT NULL COMMENT "等级",
|
||
`alignment_json` LONGTEXT NULL COMMENT "与学习目标对齐",
|
||
`feedback_txt` TEXT NULL COMMENT "反馈",
|
||
`assessor_type` VARCHAR(64) NOT NULL COMMENT "评估者类型",
|
||
`assessor_id` VARCHAR(32) NOT 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_ar_uid` (`tenant_id`, `record_uid`),
|
||
KEY `idx_ar_learner` (`tenant_id`, `learner_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT="评估记录(total_score 派生 + 对齐判定)";
|
||
|
||
-- ===== pbl_kdb_ext (M7) =====
|
||
CREATE TABLE IF NOT EXISTS `pbl_kdb_item` (
|
||
`tenant_id` VARCHAR(32) NOT NULL NOT NULL COMMENT 租户ID(强制打头),
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键,
|
||
`code` VARCHAR(64) NOT NULL COMMENT "条目编码",
|
||
`item_type` VARCHAR(64) NOT NULL COMMENT "类型",
|
||
`title` VARCHAR(128) NOT NULL COMMENT "标题",
|
||
`summary_txt` TEXT NULL COMMENT "摘要",
|
||
`payload_json` LONGTEXT NULL COMMENT "内容(无向量,Q-OPEN-5)",
|
||
`source` VARCHAR(64) NOT NULL COMMENT "来源",
|
||
`is_write_locked` TINYINT(1) NOT NULL DEFAULT 0 COMMENT "写锁(恒1)",
|
||
`status` VARCHAR(64) NOT NULL COMMENT "状态",
|
||
`version_no` INT NOT NULL DEFAULT 0 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_kdb_code` (`tenant_id`, `code`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT="KDB 条目(建表不写入,is_write_locked 恒 1)";
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_kdb_query_log` (
|
||
`tenant_id` VARCHAR(32) NOT NULL NOT NULL COMMENT 租户ID(强制打头),
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键,
|
||
`query_uid` VARCHAR(32) NOT NULL COMMENT "查询UID",
|
||
`caller_type` VARCHAR(64) NOT NULL COMMENT "调用方类型",
|
||
`caller_id` VARCHAR(32) NOT NULL COMMENT "调用方",
|
||
`query_json` LONGTEXT NULL COMMENT "查询条件",
|
||
`hit_count` INT NOT NULL DEFAULT 0 COMMENT "命中数",
|
||
`latency_ms` INT NOT NULL DEFAULT 0 COMMENT "时延",
|
||
`ok` TINYINT(1) NOT NULL DEFAULT 0 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_kql_uid` (`tenant_id`, `query_uid`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT="KDB 检索日志(只读侧留痕)";
|
||
|
||
-- ===== pbl_domain_ext (M8) =====
|
||
CREATE TABLE IF NOT EXISTS `pbl_tenant` (
|
||
`tenant_id` VARCHAR(32) NOT NULL NOT NULL COMMENT 租户ID(强制打头),
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键,
|
||
`tenant_uid` VARCHAR(32) NOT NULL COMMENT "租户UID",
|
||
`name` VARCHAR(128) NOT NULL COMMENT "名称",
|
||
`kind` VARCHAR(64) NOT NULL COMMENT "类型",
|
||
`plan` VARCHAR(64) NOT NULL COMMENT "套餐",
|
||
`seat_limit` INT NOT NULL DEFAULT 0 COMMENT "席位",
|
||
`status` VARCHAR(64) NOT NULL COMMENT "状态",
|
||
`config_json` LONGTEXT 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_ten_uid` (`tenant_id`, `tenant_uid`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT="租户(多租户边界第25章,不改基表)";
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_class` (
|
||
`tenant_id` VARCHAR(32) NOT NULL NOT NULL COMMENT 租户ID(强制打头),
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键,
|
||
`class_uid` VARCHAR(32) NOT NULL COMMENT "班级UID",
|
||
`name` VARCHAR(128) NOT NULL COMMENT "名称",
|
||
`grade` VARCHAR(64) NOT NULL COMMENT "年级",
|
||
`teacher_id` VARCHAR(32) NOT NULL COMMENT "教师",
|
||
`student_count` INT NOT NULL DEFAULT 0 COMMENT "学生数",
|
||
`roster_json` LONGTEXT NULL COMMENT "花名册",
|
||
`status` VARCHAR(64) NOT 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_cls_uid` (`tenant_id`, `class_uid`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT="班级(花名册内联 roster_json)";
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_team` (
|
||
`tenant_id` VARCHAR(32) NOT NULL NOT NULL COMMENT 租户ID(强制打头),
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键,
|
||
`team_uid` VARCHAR(32) NOT NULL COMMENT "团队UID",
|
||
`class_id` BIGINT UNSIGNED NOT NULL COMMENT "班级",
|
||
`name` VARCHAR(128) NOT NULL COMMENT "名称",
|
||
`mission_id` BIGINT UNSIGNED NOT NULL COMMENT "Mission",
|
||
`members_json` LONGTEXT NULL COMMENT "成员",
|
||
`capacity` INT NOT NULL DEFAULT 0 COMMENT "容量",
|
||
`status` VARCHAR(64) NOT NULL COMMENT "状态",
|
||
`session_id` BIGINT UNSIGNED NOT 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_team_uid` (`tenant_id`, `team_uid`),
|
||
KEY `idx_team_class` (`tenant_id`, `class_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT="团队(成员内联 members_json,不改基表)";
|
||
|
||
-- ===== pbl_scense_ext (M9) =====
|
||
CREATE TABLE IF NOT EXISTS `pbl_session_member` (
|
||
`tenant_id` VARCHAR(32) NOT NULL NOT NULL COMMENT 租户ID(强制打头),
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键,
|
||
`session_id` BIGINT UNSIGNED NOT NULL COMMENT "会话",
|
||
`user_id` VARCHAR(32) NOT NULL COMMENT "用户",
|
||
`role_code` VARCHAR(64) NOT NULL COMMENT "角色",
|
||
`team_id` BIGINT UNSIGNED NOT NULL COMMENT "团队",
|
||
`joined_at` DATETIME NULL NULL COMMENT "加入时间",
|
||
`last_seen_at` DATETIME NULL NULL COMMENT "心跳",
|
||
`state_version` BIGINT NOT NULL DEFAULT 0 COMMENT "已见状态版本",
|
||
`status` VARCHAR(64) NOT 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_sm` (`tenant_id`, `session_id`, `user_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT="会话成员(复用 world_session,不污染基表)";
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_playtest_feedback` (
|
||
`tenant_id` VARCHAR(32) NOT NULL NOT NULL COMMENT 租户ID(强制打头),
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键,
|
||
`session_id` BIGINT UNSIGNED NOT NULL COMMENT "会话",
|
||
`user_id` VARCHAR(32) NOT NULL COMMENT "用户",
|
||
`blueprint_id` BIGINT UNSIGNED NOT NULL COMMENT "蓝图",
|
||
`feedback_type` VARCHAR(64) NOT NULL COMMENT "类型",
|
||
`rating` INT NOT NULL DEFAULT 0 COMMENT "评分",
|
||
`content_txt` TEXT NULL COMMENT "内容",
|
||
`context_json` LONGTEXT NULL COMMENT "上下文",
|
||
`handled` TINYINT(1) NOT NULL DEFAULT 0 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`),
|
||
KEY `idx_pf_session` (`tenant_id`, `session_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT="Playtest 反馈/反思(reflection 走证据链外的轻量表)";
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_ui_page_registry` (
|
||
`tenant_id` VARCHAR(32) NOT NULL NOT NULL COMMENT 租户ID(强制打头),
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键,
|
||
`page_key` VARCHAR(64) NOT NULL COMMENT "页面键",
|
||
`title` VARCHAR(128) NOT NULL COMMENT "标题",
|
||
`route` VARCHAR(64) NOT NULL COMMENT "路由",
|
||
`widget_type` VARCHAR(64) NOT NULL COMMENT "渲染组件",
|
||
`requires_role` VARCHAR(64) NOT NULL COMMENT "所需角色",
|
||
`budget_ms` INT NOT NULL DEFAULT 0 COMMENT "渲染预算",
|
||
`enabled` TINYINT(1) NOT NULL DEFAULT 0 COMMENT "启用",
|
||
`meta_json` LONGTEXT 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_upr_key` (`tenant_id`, `page_key`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT="前端覆盖层页面注册(12 页面 + 时延预算)";
|
||
|
||
-- ===== pbl_runtime_ext (M11) =====
|
||
CREATE TABLE IF NOT EXISTS `pbl_runtime_event` (
|
||
`tenant_id` VARCHAR(32) NOT NULL NOT NULL COMMENT 租户ID(强制打头),
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键,
|
||
`event_uid` VARCHAR(32) NOT NULL COMMENT "事件UID",
|
||
`session_id` BIGINT UNSIGNED NOT NULL COMMENT "会话",
|
||
`world_id` BIGINT UNSIGNED NOT NULL COMMENT "世界",
|
||
`actor_id` VARCHAR(32) NOT NULL COMMENT "触发者",
|
||
`event_type` VARCHAR(64) NOT NULL COMMENT "事件类型",
|
||
`payload_json` LONGTEXT NULL COMMENT "事件体",
|
||
`causation_id` VARCHAR(32) NOT NULL COMMENT "因果链",
|
||
`state_version` BIGINT NOT NULL DEFAULT 0 COMMENT "状态版本",
|
||
`seq` BIGINT NOT NULL DEFAULT 0 COMMENT "会话内单调序号",
|
||
`occurred_at` DATETIME NOT 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_re_uid` (`tenant_id`, `event_uid`, `occurred_at`),
|
||
KEY `idx_re_session_seq` (`tenant_id`, `session_id`, `seq`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT="运行时事件(append-only,按月 RANGE 分区)",
|
||
KEY `idx_re_part` (`occurred_at`)
|
||
PARTITION BY RANGE COLUMNS(`occurred_at`) (
|
||
PARTITION p2026 VALUES LESS THAN ('2026-01-01'),
|
||
PARTITION p2027 VALUES LESS THAN ('2027-01-01'),
|
||
PARTITION p2028 VALUES LESS THAN ('2028-01-01'),
|
||
PARTITION p2029 VALUES LESS THAN ('2029-01-01'),
|
||
PARTITION p2030 VALUES LESS THAN ('2030-01-01'),
|
||
PARTITION p2031 VALUES LESS THAN ('2031-01-01')
|
||
PARTITION pmax VALUES LESS THAN (MAXVALUE)
|
||
);
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_entity_state` (
|
||
`tenant_id` VARCHAR(32) NOT NULL NOT NULL COMMENT 租户ID(强制打头),
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键,
|
||
`session_id` BIGINT UNSIGNED NOT NULL COMMENT "会话",
|
||
`entity_id` VARCHAR(32) NOT NULL COMMENT "实体标识",
|
||
`state_json` LONGTEXT NULL COMMENT "状态",
|
||
`state_version` BIGINT NOT NULL DEFAULT 0 COMMENT "单调版本",
|
||
`checksum` VARCHAR(32) NOT NULL COMMENT "状态摘要",
|
||
`updated_by` VARCHAR(32) NOT 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_es` (`tenant_id`, `session_id`, `entity_id`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT="实体状态(服务端权威,state_version 客户端禁写)";
|
||
|
||
CREATE TABLE IF NOT EXISTS `pbl_world_state_snapshot` (
|
||
`tenant_id` VARCHAR(32) NOT NULL NOT NULL COMMENT 租户ID(强制打头),
|
||
`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 主键,
|
||
`session_id` BIGINT UNSIGNED NOT NULL COMMENT "会话",
|
||
`snapshot_uid` VARCHAR(32) NOT NULL COMMENT "快照UID",
|
||
`state_fingerprint` VARCHAR(32) NOT NULL COMMENT "状态指纹",
|
||
`entities_json` LONGTEXT NULL COMMENT "实体集",
|
||
`events_through_seq` BIGINT NOT NULL DEFAULT 0 COMMENT "截至序号",
|
||
`reason` VARCHAR(64) NOT 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_wss_uid` (`tenant_id`, `snapshot_uid`)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT="世界状态快照(掉线补齐/离线兜底)";
|
||
|
||
-- ===== 枚举 6+2 组由 pbl_appcodes.load_pbl_appcodes() 幂等注入 appcodes,本文件不含 INSERT =====
|