6.7 KiB
6.7 KiB
数据模型
文档版本:v1.3 最后更新:2026-04-03 12:36:15
当前 migration 共 10 版。
1. 迁移清单
- 0001_init.sql
- 0002_launch.sql
- 0003_home.sql
- 0004_results.sql
- 0005_config_pipeline.sql
- 0006_resource_objects.sql
- 0007_variant_minimal.sql
- 0008_production_skeleton.sql
- 0009_event_ops_phase2.sql
- 0010_event_default_bindings.sql
2. 表分组
2.1 多租户与入口
tenantsentry_channels
职责:
- 识别品牌壳
- 识别渠道入口
- 承接后续俱乐部 / 政府公众号 / H5 / 二维码入口
2.2 用户与登录
userslogin_identitiesauth_sms_codesauth_refresh_tokens
职责:
- 平台级用户
- 多身份登录
- 验证码记录
- refresh token 持久化
当前身份示例:
mobilewechat_mini_openidwechat_unionid
2.3 业务对象与配置发布
eventsevent_releases
职责分工:
events管业务对象身份和展示event_releases管发布后的运行配置入口
关键字段:
events.current_release_idevent_releases.release_public_idevent_releases.config_labelevent_releases.manifest_urlevent_releases.manifest_checksum_sha256event_releases.route_code
2.4 首页与入口卡片
cards
职责:
- 支撑首页卡片
- 运营入口聚合
- tenant/channel 维度展示控制
2.5 运行态
game_sessionssession_results
职责:
- 固化一局游戏
- 固化该局绑定的 release
- 固化局后结果摘要
2.6 配置构建与发布资产
event_config_sourcesevent_config_buildsevent_release_assets
职责:
- 保存编辑态 source config
- 保存构建后的 manifest 和 asset index
- 保存正式 release 关联的资产清单
2.7 共享资源对象
mapsmap_versionsplayfieldsplayfield_versionsresource_packsresource_pack_versions
职责:
- 把地图、KML/赛场、内容资源包做成可复用对象
- 支撑后台第一版按“资源对象 + 版本”管理
- 给后续 event 引用组装和发布流程提供稳定边界
2.8 第一阶段生产骨架
placesmap_assetstile_releasescourse_sourcescourse_setscourse_variantsmap_runtime_bindings
职责:
- 把地图运行域和活动运行绑定正式落库
- 把 KML 输入源和最终赛道方案拆开
- 在不推翻当前
events / event_releases / game_sessions主链的前提下,增量补生产骨架
2.9 活动运营域第二阶段
event_presentationscontent_bundles
职责:
- 把活动展示定义和内容包从临时 JSON 概念收成正式对象
- 让
event_releases明确绑定:presentation_idcontent_bundle_idruntime_binding_id
- 保持现有
resolvedRelease / business / variant / runtime稳定返回不变
2.10 Event 默认 active 绑定
events.current_presentation_idevents.current_content_bundle_idevents.current_runtime_binding_id
职责:
- 固化 event 当前默认 active:
presentationcontent bundleruntime 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是原始输入源,例如 KMLCourseVariant是最终可运行赛道方案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_tokensessionToken
后面如果加实时网关,也应继续区分。
5. 当前缺口
当前 schema 还没有这些模块:
competitionsregistrationspage_configsclubsclient_devices- 实时票据 / 网关票据
这些后面要按真正业务需要补 migration,不要先拍脑袋建大而全表。