-- pbl_runtime_ext 表 DDL(自动生成,与 apps/pbls/scripts/ddl/pbls_tables.sql 同源) 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="世界状态快照(掉线补齐/离线兜底)";