# 数据模型 > 文档版本:v1.6 > 最后更新:2026-04-07 16:29:08 当前 migration 共 15 版。 ## 1. 迁移清单 - [0001_init.sql](D:/dev/cmr-mini/backend/migrations/0001_init.sql) - [0002_launch.sql](D:/dev/cmr-mini/backend/migrations/0002_launch.sql) - [0003_home.sql](D:/dev/cmr-mini/backend/migrations/0003_home.sql) - [0004_results.sql](D:/dev/cmr-mini/backend/migrations/0004_results.sql) - [0005_config_pipeline.sql](D:/dev/cmr-mini/backend/migrations/0005_config_pipeline.sql) - [0006_resource_objects.sql](D:/dev/cmr-mini/backend/migrations/0006_resource_objects.sql) - [0007_variant_minimal.sql](D:/dev/cmr-mini/backend/migrations/0007_variant_minimal.sql) - [0008_production_skeleton.sql](D:/dev/cmr-mini/backend/migrations/0008_production_skeleton.sql) - [0009_event_ops_phase2.sql](D:/dev/cmr-mini/backend/migrations/0009_event_ops_phase2.sql) - [0010_event_default_bindings.sql](D:/dev/cmr-mini/backend/migrations/0010_event_default_bindings.sql) - [0011_card_summary.sql](D:/dev/cmr-mini/backend/migrations/0011_card_summary.sql) - [0012_managed_assets.sql](D:/dev/cmr-mini/backend/migrations/0012_managed_assets.sql) - [0013_ops_console.sql](D:/dev/cmr-mini/backend/migrations/0013_ops_console.sql) - [0014_map_experience.sql](D:/dev/cmr-mini/backend/migrations/0014_map_experience.sql) - [0015_guest_identity.sql](D:/dev/cmr-mini/backend/migrations/0015_guest_identity.sql) ## 2. 当前地图体验入口相关字段 - `events.is_default_experience` - `events.show_in_event_list` 当前用途: - 支撑地图列表下的默认体验活动 - 统一活动卡片、地图详情和默认体验入口语义 ## 2. 表分组 ### 2.1 多租户与入口 - `tenants` - `entry_channels` 职责: - 识别品牌壳 - 识别渠道入口 - 承接后续俱乐部 / 政府公众号 / H5 / 二维码入口 ### 2.2 用户与登录 - `users` - `login_identities` - `auth_sms_codes` - `auth_refresh_tokens` 职责: - 平台级用户 - 多身份登录 - 验证码记录 - refresh token 持久化 当前身份示例: - `mobile` - `wechat_mini_openid` - `wechat_unionid` - `guest` ### 2.3 业务对象与配置发布 - `events` - `event_releases` 职责分工: - `events` 管业务对象身份和展示 - `event_releases` 管发布后的运行配置入口 关键字段: - `events.current_release_id` - `event_releases.release_public_id` - `event_releases.config_label` - `event_releases.manifest_url` - `event_releases.manifest_checksum_sha256` - `event_releases.route_code` ### 2.4 首页与入口卡片 - `cards` 职责: - 支撑首页卡片 - 运营入口聚合 - tenant/channel 维度展示控制 - 默认体验活动标记 当前补充字段: - `cards.is_default_experience` 当前说明: - 活动卡片列表第一刀先通过卡片显式字段承接“默认体验活动 / 普通活动”区分 - `timeWindow / ctaText / status` 当前先由 backend 摘要层派生,不再额外新增对象层级 ### 2.5 运行态 - `game_sessions` - `session_results` 职责: - 固化一局游戏 - 固化该局绑定的 release - 固化局后结果摘要 ### 2.6 配置构建与发布资产 - `event_config_sources` - `event_config_builds` - `event_release_assets` 职责: - 保存编辑态 source config - 保存构建后的 manifest 和 asset index - 保存正式 release 关联的资产清单 ### 2.7 共享资源对象 - `maps` - `map_versions` - `playfields` - `playfield_versions` - `resource_packs` - `resource_pack_versions` 职责: - 把地图、KML/赛场、内容资源包做成可复用对象 - 支撑后台第一版按“资源对象 + 版本”管理 - 给后续 event 引用组装和发布流程提供稳定边界 ### 2.8 第一阶段生产骨架 - `places` - `map_assets` - `tile_releases` - `course_sources` - `course_sets` - `course_variants` - `map_runtime_bindings` 职责: - 把地图运行域和活动运行绑定正式落库 - 把 KML 输入源和最终赛道方案拆开 - 在不推翻当前 `events / event_releases / game_sessions` 主链的前提下,增量补生产骨架 ### 2.9 活动运营域第二阶段 - `event_presentations` - `content_bundles` 职责: - 把活动展示定义和内容包从临时 JSON 概念收成正式对象 - 让 `event_releases` 明确绑定: - `presentation_id` - `content_bundle_id` - `runtime_binding_id` - 保持现有 `resolvedRelease / business / variant / runtime` 稳定返回不变 ### 2.10 Event 默认 active 绑定 - `events.current_presentation_id` - `events.current_content_bundle_id` - `events.current_runtime_binding_id` 职责: - 固化 event 当前默认 active: - `presentation` - `content bundle` - `runtime binding` - 支撑 publish 在未显式传入时的默认继承 - 不改变前端当前稳定消费的 release / launch 字段语义 ## 3. 当前最关键的关系 ### `tenant -> entry_channel` 一个 tenant 下可有多个渠道入口。 ### `user -> login_identity` 一个平台用户可绑定多个登录身份。 ### `event -> event_release` 一个 event 可有多个 release。 客户端真正进入游戏时,最终会消费其中一份 release 的 manifest。 ### `event_release -> game_session` 一局 session 必须绑定一份明确的 release。 这是当前系统最关键的配置驱动约束。 ### `game_session -> session_result` 一局结束后可有一条结果摘要。 ### `event_config_source -> event_config_build -> event_release` 这是后续配置生命周期主链: - source 是编辑态 - build 是构建态 - release 是发布态 ### `map -> map_version` 一张地图可有多个版本。 ### `playfield -> playfield_version` 一份赛场/KML 可有多个版本。 ### `resource_pack -> resource_pack_version` 一套内容/音频/主题资源可有多个版本。 ### `place -> map_asset -> tile_release` - `Place` 是地点上层对象 - `MapAsset` 是地点下的一张具体地图资产 - `TileRelease` 是某张地图的具体瓦片发布版本 ### `course_source -> course_variant -> course_set` - `CourseSource` 是原始输入源,例如 KML - `CourseVariant` 是最终可运行赛道方案 - `CourseSet` 是一组方案集合 ### `event_release -> map_runtime_binding` - `event_releases.runtime_binding_id` 已预留给第一阶段生产骨架 - 当前客户端联调仍以 `resolvedRelease` 为主 - 第二阶段会继续把 `placeId / mapId / tileReleaseId / courseVariantId` 收到 `launch` 稳定返回中 ### `event -> event_presentation` - 一个 `event` 可有多条展示定义 - 当前最小用途是给 `event_release` 提供明确绑定目标 ### `event -> content_bundle` - 一个 `event` 可有多条内容包 - 当前最小用途是给 `event_release` 提供内容资源绑定目标 ### `event_release -> presentation / content_bundle / runtime` - 这是当前活动运营域第二阶段的最小闭环 - `release` 现在可以稳定固化: - 展示定义 - 内容包 - 运行绑定 ## 4. 当前已落库但仍应注意的边界 ### 4.1 不要把玩法细节塞回事件主表 当前数据库只记录: - 发布关系 - manifest 入口 - 结果摘要 玩法解释器仍应留在游戏客户端。 ### 4.2 不要让历史局跟随当前 release 漂移 即使 event 后面发布新版本: - 旧 session 仍然指向旧 `event_release_id` - 旧 result 仍然对应旧 release ### 4.3 不要把登录态和运行态混在一起 当前已有两种 token: - `access_token` - `sessionToken` 后面如果加实时网关,也应继续区分。 ## 5. 当前缺口 当前 schema 还没有这些模块: - `competitions` - `registrations` - `page_configs` - `clubs` - `client_devices` - 实时票据 / 网关票据 这些后面要按真正业务需要补 migration,不要先拍脑袋建大而全表。