# 瓦拉数据字段百科全书

本文档系统梳理所有已知数据库字段，包含释义、用途和计算口径。

- **更新时间**: 2026-05-07
- **维护人**: 小溪 📊

---

## 目录

1. [PostgreSQL vala_bi 库](#一postgresql-vala_bi-库)
2. [MySQL vala_user 库（源表）](#二mysql-vala_user-库源表)
3. [MySQL vala 库（配置表）](#三mysql-vala-库配置表)
4. [MySQL vala_order 库](#四mysql-vala_order-库)
5. [核心计算口径汇总](#五核心计算口径汇总)
6. [渠道映射表](#六渠道映射表)

---

## 一、PostgreSQL vala_bi 库

> **数据库**: Online PostgreSQL (bj-postgres-16pob4sg)  
> **角色**: 线上环境用户行为与业务 BI 数据  
> **权限**: 只读

---

### 1.1 bi_vala_order（订单表）

| 字段 | 类型 | 可空 | 释义 | 用途 | 计算口径 |
|------|------|------|------|------|----------|
| `id` | bigint | NO | 订单主键 ID | 唯一标识一笔订单 | 去重统计订单数：`COUNT(DISTINCT id)` |
| `account_id` | bigint | YES | 用户账号 ID | 关联用户信息 | 关联 `bi_vala_app_account.id` |
| `out_trade_no` | varchar | YES | 商户订单号 | 外部交易流水号，关联退费表 | 关联 `bi_refund_order.out_trade_no` |
| `trade_no` | varchar | YES | 交易流水号 | 支付平台交易号，关联退费表 | 关联 `bi_refund_order.trade_no` |
| `pay_amount` | varchar | YES | 支付金额(元) | 以元为单位的金额（字符串格式） | ⚠️ 建议统一用 `pay_amount_int` |
| `goods_id` | bigint | YES | 商品 ID | 关联购买的商品 | |
| `order_status` | integer | YES | 订单状态 | 标识订单当前状态 | 状态枚举：1=未支付，2=已支付，3=已完成，**4=已退款**，5=已取消 |
| `order_status_comment` | text | YES | 订单状态备注 | 状态变更说明 | |
| `is_used` | integer | YES | 是否已使用 | 标记订单是否已被使用 | |
| `sale_channel` | integer | YES | 购课渠道编号 | 端内购课渠道（仅 `key_from=app-active-h5-0-0` 时有效） | 见[渠道映射表](#六渠道映射表) |
| `created_at` | timestamptz | YES | 创建时间 | 订单创建时间 | |
| `updated_at` | timestamptz | YES | 更新时间 | 订单最后更新时间 | |
| `deleted_at` | timestamptz | YES | 删除时间 | NULL=未删除 | 统计时过滤 `deleted_at IS NOT NULL` |
| `pay_channel` | integer | YES | 支付渠道 | 支付方式（微信/支付宝等） | |
| `pay_amount_int` | integer | YES | 支付金额(分) | 以分为单位的整数金额 | **GMV/GSV 统计使用此字段**，元 = 分/100 |
| `pay_success_date` | timestamptz | YES | 支付成功时间 | 实际支付成功的时间 | 时间维度统计的基准时间 |
| `quantity` | integer | NO | 数量 | 购买数量 | 默认 1 |
| `goods_name` | text | NO | 商品名称 | 购买的课程/商品名称 | |
| `goods_apply_package_ids` | text | NO | 适用套餐包 ID | 商品关联的套餐包 | |
| `key_from` | text | NO | 销售渠道标识 | 标识订单来源渠道 | 渠道映射见[渠道映射表](#六渠道映射表) |
| `expire_days` | integer | YES | 有效期天数 | 课程有效期 | |

**关联关系**:
- `bi_vala_order.account_id` → `bi_vala_app_account.id`（关联用户）
- `bi_vala_order.trade_no` ↔ `bi_refund_order.trade_no`（关联退费）
- `bi_vala_order.out_trade_no` ↔ `bi_refund_order.out_trade_no`（关联退费）

---

### 1.2 bi_vala_app_account（用户账号表）

| 字段 | 类型 | 可空 | 释义 | 用途 | 计算口径 |
|------|------|------|------|------|----------|
| `id` | bigint | NO | 用户账号主键 | 唯一标识一个用户账号 | 关联 `bi_vala_order.account_id`、`bi_vala_app_character.account_id` |
| `tel` | varchar | YES | 手机号 | 用户注册手机号 | 明文手机号 |
| `tel_encrypt` | varchar | YES | 加密手机号 | 加密后的手机号 | |
| `name` | varchar | YES | 用户姓名 | 用户真实姓名 | |
| `id_card` | varchar | YES | 身份证号 | 用户身份证 | ⚠️ 敏感信息 |
| `status` | smallint | NO | 账号状态 | 标识账号是否正常 | **1=正常用户，2=测试用户**；所有统计必须 `status=1` |
| `pay_status` | integer | YES | 付费状态 | 标识用户是否付费 | |
| `login_times` | integer | YES | 登录次数 | 累计登录次数 | |
| `remark` | text | YES | 备注 | 人工备注信息 | |
| `key_from` | varchar | NO | 注册来源 | 用户注册时的渠道标识 | 同订单表 `key_from` 含义 |
| `created_at` | timestamptz | YES | 注册时间 | 用户注册时间 | 新增用户统计的时间基准 |
| `updated_at` | timestamptz | YES | 更新时间 | 最后更新时间 | |
| `deleted_at` | timestamptz | YES | 删除时间 | NULL=未删除 | 统计时过滤 |
| `download_channel` | text | YES | 下载渠道 | 用户下载 App 的渠道 | **新增用户（免费注册）按此字段分渠道统计** |

**注意事项**:
- 测试账号剔除规则：所有订单类统计必须 `JOIN bi_vala_app_account ON account_id` 并 `WHERE status = 1`
- `download_channel` 为汉字格式，匹配时使用「关键字包含」方式，如 `LIKE '%学而思%'`

---

### 1.3 bi_vala_app_character（用户角色表）

| 字段 | 类型 | 可空 | 释义 | 用途 | 计算口径 |
|------|------|------|------|------|----------|
| `id` | bigint | NO | 角色主键 | 唯一标识一个角色 | 关联学习记录表的 `user_id` |
| `account_id` | bigint | YES | 账号 ID | 关联用户账号 | 关联 `bi_vala_app_account.id` |
| `nickname` | varchar | YES | 角色昵称 | 用户的角色昵称 | |
| `gender` | smallint | YES | 性别 | 角色性别 | 0=girl，1=boy，其他=unknown |
| `birthday` | varchar | YES | 出生日期 | YYYY-MM-DD 格式 | `split_part(birthday,'-',1)` 提取年份 |
| `avatar` | text | YES | 头像 | 角色头像 URL | |
| `spine_name` | varchar | YES | Spine 动画名称 | 角色动画资源 | |
| `latest_login` | timestamptz | YES | 最后登录时间 | 角色最近一次登录 | |
| `reputation` | char | YES | 声望值 | 角色声望等级 | |
| `robots_cnt` | integer | YES | 机器人数量 | 拥有的机器人数量 | |
| `head_image` | varchar | YES | 头像图片 | 头像图片资源 | |
| `status` | smallint | YES | 角色状态 | 角色是否有效 | |
| `purchase_season_package` | text | YES | 赛季包购买状态 | JSON 数组格式 | `'[1]'`=未购买赛季包；`'[1]'` = 未付费角色 |
| `total_sp_point` | integer | YES | 总 SP 积分 | 累计获得的技能点 | |
| `balance_sp_point` | integer | YES | 余额 SP 积分 | 当前可用技能点 | |
| `point` | integer | YES | 积分 | 通用积分 | |
| `pay_status` | smallint | YES | 付费状态 | 角色维度的付费状态 | 0=未付费，1=已付费 |
| `created_at` | timestamptz | YES | 创建时间 | 角色创建时间 | |
| `updated_at` | timestamptz | YES | 更新时间 | 最后更新时间 | |
| `deleted_at` | timestamptz | YES | 删除时间 | NULL=未删除 | |
| `mood` | integer | YES | 心情值 | 角色当前心情 | |
| `mood_start_time` | bigint | YES | 心情起始时间 | 心情值变化的时间戳 | |

---

### 1.4 bi_refund_order（退费订单表）

| 字段 | 类型 | 可空 | 释义 | 用途 | 计算口径 |
|------|------|------|------|------|----------|
| `id` | bigint | NO | 退费订单主键 | 唯一标识一笔退费 | |
| `account_id` | bigint | YES | 账号 ID | 退费用户 | |
| `out_trade_no` | varchar | YES | 商户订单号 | 关联原订单 | 关联 `bi_vala_order.out_trade_no` |
| `trade_no` | varchar | YES | 交易流水号 | 关联原订单 | 关联 `bi_vala_order.trade_no` |
| `refund_amount` | varchar | YES | 退费金额(元) | 字符串格式退费金额 | ⚠️ 建议用 `refund_amount_int` |
| `created_at` | timestamptz | YES | 创建时间 | 退费申请时间 | |
| `updated_at` | timestamptz | YES | 更新时间 | 退费最后更新时间 | **当 status=3 时即退费成功时间** |
| `deleted_at` | timestamptz | YES | 删除时间 | NULL=未删除 | |
| `refund_amount_int` | integer | NO | 退费金额(分) | 整数退费金额 | GSV 计算使用此字段 |
| `reason` | text | NO | 退费原因 | 退费原因说明 | |
| `sale_channel` | integer | NO | 销售渠道 | 退费订单的渠道 | |
| `status` | integer | NO | 退费状态 | 退费处理状态 | **status=3 表示退费成功** |
| `is_admin` | boolean | NO | 是否管理员操作 | 是否管理员手动退费 | |
| `channel_refund_id` | bigint | NO | 渠道退费 ID | 支付渠道退费流水号 | |
| `refund_ticket_ids` | text | YES | 退费券 ID | 关联的退费券 | |
| `refund_type` | integer | NO | 退费类型 | 退费分类 | |
| `refund_method` | integer | NO | 退费方式 | 退款到账方式 | |
| `after_sale_no` | text | YES | 售后单号 | 售后流程单号 | |

**退费订单校验规则（双条件，缺一不可）**:
1. `bi_refund_order.status = 3`（退费成功）
2. `bi_vala_order.order_status = 4`（订单状态为已退款）

---

### 1.5 bi_user_course_detail（用户课程明细表）

| 字段 | 类型 | 可空 | 释义 | 用途 | 计算口径 |
|------|------|------|------|------|----------|
| `id` | integer | NO | 课程明细主键 | | |
| `created_at` | timestamptz | YES | 创建时间 | | |
| `updated_at` | timestamptz | YES | 更新时间 | | |
| `account_id` | integer | YES | 用户 ID | 关联账号 | 关联 `bi_vala_app_account.id` |
| `user_id` | integer | YES | 角色 ID | 关联角色 | 关联 `bi_vala_app_character.id` |
| `course_level` | text | YES | 课程等级 | L1/L2（对应 A1/A2） | |
| `active_time` | timestamptz | YES | 激活时间 | 课程激活时间 | |
| `expire_time` | timestamptz | YES | 过期时间 | 课程过期时间 | **不为空=正式课，为空=体验课** |
| `latest_unit_index` | integer | YES | 最新单元索引 | 最近学习的单元编号 | |
| `latest_lesson_index` | integer | YES | 最新课时索引 | 最近学习的课时编号 | |
| `learn_duration` | integer | YES | 学习时长 | 累计学习时长 | |
| `last_learn_time` | timestamptz | YES | 最后学习时间 | 最近一次学习时间 | |
| `deleted_at` | timestamptz | YES | 删除时间 | 有值=课程已删除，空=未删除 | 统计时过滤 |

---

### 1.6 bi_level_unit_lesson（课程结构映射表）

| 字段 | 类型 | 可空 | 释义 | 用途 | 计算口径 |
|------|------|------|------|------|----------|
| `id` | integer | YES | **chapter_id** | 直接关联播放记录表的 `chapter_id` | 例子：L1 S0 U00 L01 → id=343 |
| `course_level` | varchar | YES | 课程等级 | L1 / L2 | 对应 A1 / A2 |
| `course_season` | varchar | YES | 季度 | S0 / S1 / S2 / S3 / S4 | S0=U0 所在季 |
| `course_unit` | varchar | YES | 单元 | U00 / U01 / U02 ... | 每季 12 个单元 |
| `course_lesson` | varchar | YES | 课时 | L01 / L02 / L03 / L04 / L05 | 每单元 5 节课 |

**使用方式**:
- 查询某课程的学习数据时，先通过此表按 `course_level + course_season + course_unit + course_lesson` 匹配出目标 `id`（即 `chapter_id`），再关联播放记录表查询
- [李承龙确认] 匹配课程统一使用此表

---

### 1.7 bi_user_chapter_play_record_0~7（用户课时播放记录，8 张分表）

| 字段 | 类型 | 可空 | 释义 | 用途 | 计算口径 |
|------|------|------|------|------|----------|
| `id` | bigint | NO | 播放记录主键 | | |
| `user_id` | bigint | YES | 角色 ID | 关联角色 | 关联 `bi_vala_app_character.id` |
| `chapter_id` | bigint | YES | 课时 ID | 关联课程 | 关联 `bi_level_unit_lesson.id` |
| `chapter_unique_id` | varchar | YES | 完课唯一标识 | 关联组件播放记录 | 关联 `bi_user_component_play_record.chapter_unique_id` |
| `play_status` | smallint | YES | 播放状态 | 是否完成课时 | **1=正常完成**，0=未开始，2=中途退出 |
| `story_id` | bigint | YES | 故事 ID | 关联游戏/故事 | |
| `created_at` | timestamptz | YES | 创建时间 | 首次进入/开始时间 | **首次完成时间**：按 `user_id + chapter_id` 分组取 `created_at` 最小值 |
| `updated_at` | timestamptz | YES | 更新时间 | | |
| `deleted_at` | timestamptz | YES | 删除时间 | NULL=未删除 | |
| `map_position` | text | YES | 地图位置 | 课程在地图上的位置 | |
| `dialog_info` | text | YES | 对话信息 | 对话数据 JSON | |
| `level` | varchar | YES | 等级 | 课程等级标识 | |

**分表处理**: 统计时需要用 `UNION ALL` 合并 8 张分表的数据。

---

### 1.8 bi_user_component_play_record_0~7（用户组件播放记录，8 张分表）

| 字段 | 类型 | 可空 | 释义 | 用途 | 计算口径 |
|------|------|------|------|------|----------|
| `id` | bigint | NO | 组件播放主键 | | |
| `user_id` | bigint | YES | 角色 ID | | |
| `chapter_id` | bigint | YES | 课时 ID | | |
| `chapter_unique_id` | varchar | YES | 完课唯一标识 | 关联课时播放记录 | |
| `component_id` | bigint | YES | 组件 ID | 组件编号 | |
| `sub_component_type` | smallint | YES | 组件子类型 | | |
| `component_type` | smallint | YES | 组件类型 | 大类：核心互动/中互动等 | |
| `comp_type` | varchar | YES | 组件类型名 | 字符串类型名 | |
| `play_status` | smallint | YES | 播放状态 | | **1=完成，2=退出**（退出率统计条件：`IN (1,2)`） |
| `pass_time` | integer | YES | 通过时间 | | |
| `interval_time` | integer | YES | 播放耗时(毫秒) | **完课耗时统计核心字段** | 求和 `/60000` = 分钟（保留1位小数） |
| `read_word_count` | integer | YES | 阅读词数 | | |
| `speak_count` | integer | YES | 口语次数 | | |
| `listen_sentence_count` | integer | YES | 听力句数 | | |
| `write_word_count` | integer | YES | 写作词数 | | |
| `created_at` | timestamptz | YES | 创建时间 | | |
| `updated_at` | timestamptz | YES | 更新时间 | | |
| `deleted_at` | timestamptz | YES | 删除时间 | | 统计需过滤 |
| `section_id` | bigint | YES | 小节 ID | | |
| `component_unique_code` | varchar | YES | 组件唯一编码 | 如 `core_reading_order-0101004` | 组件维度统计的核心分组字段 |
| `play_result` | varchar | YES | 练习结果 | | Perfect / Good / **Oops** |
| `finish_question_count` | integer | YES | 完成题目数 | | |
| `skill_points` | integer | YES | 技能点 | 获得的技能点 | |
| `c_type` | varchar | YES | 组件类别 | 组件分类标识 | |
| `c_id` | varchar | YES | 组件类别 ID | | |
| `user_behavior_info` | text | YES | 用户行为信息 | 详细行为 JSON | |
| `behavior_analysis_info` | text | YES | 行为分析信息 | | |
| `session_id` | varchar | YES | 会话 ID | 学习会话标识 | |
| `listen_time` | integer | YES | 听力时间 | | |
| `dialog_list` | text | YES | 对话列表 | | |
| `level` | varchar | YES | 等级 | | |

---

### 1.9 bi_user_unit_review_question_result（课程巩固 Review 源表）

| 字段 | 类型 | 可空 | 释义 | 用途 | 计算口径 |
|------|------|------|------|------|----------|
| `id` | bigint | NO | 主键 | | |
| `user_id` | bigint | YES | 角色 ID | | |
| `story_id` | bigint | YES | 故事 ID | | |
| `score` | integer | YES | 得分 | | |
| `score_text` | varchar | YES | 评分等级 | Perfect/Good/Oops | |
| `question_list` | text | YES | 题目列表 JSON | 包含每题的 isRight/isSkip | 正确率 = `正确数/总题数*10000`（万分比） |
| `sp_value` | integer | YES | SP 值 | | |
| `created_at` | timestamptz | YES | 创建时间 | | |
| `updated_at` | timestamptz | YES | 更新时间 | | |
| `deleted_at` | timestamptz | YES | 删除时间 | | |
| `category` | varchar | YES | 分类 | | |
| `exp` | integer | YES | 经验值 | | |
| `play_time` | bigint | YES | 播放时间(毫秒) | **巩固用时计算来源** | `play_time / 1000` = 秒 |
| `read_word_count` | bigint | YES | 阅读词数 | | |
| `listen_time` | bigint | YES | 听力时间 | | |
| `speak_count` | bigint | YES | 口语次数 | | |
| `level` | varchar | YES | 等级 | | |

---

### 1.10 bi_user_unit_summary_km_result（单元强化 Summary 源表）

| 字段 | 类型 | 可空 | 释义 | 用途 | 计算口径 |
|------|------|------|------|------|----------|
| `id` | bigint | NO | 主键 | | |
| `user_id` | bigint | YES | 角色 ID | | |
| `story_id` | bigint | YES | 故事 ID | | |
| `km_id` | varchar | YES | 知识模块 ID | | |
| `km_type` | varchar | YES | 知识模块类型 | | |
| `score_text` | varchar | YES | 评分等级 | | |
| `sp_value` | integer | YES | SP 值 | | |
| `created_at` | timestamptz | YES | 首次进入时间 | **强化进入时间** | |
| `updated_at` | timestamptz | YES | 更新时间 | | |
| `deleted_at` | timestamptz | YES | 删除时间 | | |
| `play_time` | bigint | YES | 播放时间 | | |
| `sum_explain` | text | YES | 总结说明 | | |
| `level` | varchar | YES | 等级 | | |

---

### 1.11 bi_user_unit_challenge_question_result（单元挑战 Challenge 源表）

| 字段 | 类型 | 可空 | 释义 | 用途 | 计算口径 |
|------|------|------|------|------|----------|
| `id` | bigint | NO | 主键 | | |
| `user_id` | bigint | YES | 角色 ID | | |
| `story_id` | bigint | YES | 故事 ID | | |
| `chapter_id` | bigint | YES | 课时 ID | 注意：挑战是单元级而非课时级，但仍有关联 | |
| `unique_id` | varchar | YES | 唯一标识 | | |
| `score` | integer | YES | 得分 | | |
| `score_text` | varchar | YES | 评分等级 | Perfect / Good / Oops | 四维度评分合计 |
| `question_list` | text | YES | 题目列表 | 包含四维度评分详情 | 解析出 listening/speaking/reading/writing 各自评分 |
| `sp_value` | integer | YES | SP 值 | | |
| `exp` | integer | YES | 经验值 | | |
| `created_at` | timestamptz | YES | 首次进入时间 | **挑战进入时间** | |
| `updated_at` | timestamptz | YES | 更新时间 | | |
| `deleted_at` | timestamptz | YES | 删除时间 | | |
| `play_time` | bigint | YES | 播放时间 | | |
| `level` | varchar | YES | 等级 | | |

---

### 1.12 bi_user_task_log（用户任务日志表）

| 字段 | 类型 | 可空 | 释义 | 用途 |
|------|------|------|------|------|
| `id` | integer | NO | 主键 | |
| `user_id` | integer | NO | 角色 ID | |
| `task_type` | integer | NO | 任务类型 | |
| `task_id` | integer | NO | 任务 ID | |
| `status` | integer | NO | 任务状态 | |
| `start_time` | bigint | NO | 开始时间 | Unix 时间戳 |
| `updated_at` | timestamptz | YES | 更新时间 | |
| `created_at` | timestamptz | YES | 创建时间 | |

---

### 1.13 account_detail_info（账号详情表）

| 字段 | 类型 | 可空 | 释义 | 用途 | 计算口径 |
|------|------|------|------|------|----------|
| `id` | bigint | NO | 主键 | | |
| `account_id` | integer | YES | 账号 ID | 关联用户 | |
| `login_time` | text | YES | 登录时间 | | |
| `device` | text | YES | 设备信息 | | |
| `device_os` | text | YES | 设备操作系统 | iOS/Android | |
| `login_address` | text | YES | 登录地址 | 格式"省份-城市" | `split_part(login_address,'-',2)` 提取城市 |
| `login_times` | integer | YES | 登录次数 | | |
| `created_time` | timestamptz | NO | 创建时间 | | |
| `phone_login_times` | integer | YES | 手机登录次数 | | `=0` 表示从未手机登录 |

---

### 1.14 account_login（账号登录表）

| 字段 | 类型 | 可空 | 释义 | 用途 |
|------|------|------|------|------|
| `id` | bigint | NO | 主键 | |
| `account_id` | integer | YES | 账号 ID | |
| `login_date` | text | NO | 登录日期 | 日期维度分组 |
| `created_time` | timestamptz | NO | 创建时间 | |
| `status` | integer | NO | 状态 | |

---

### 1.15 account_device（设备表）

| 字段 | 类型 | 可空 | 释义 | 用途 |
|------|------|------|------|------|
| `id` | bigint | NO | 主键 | |
| `account_id` | integer | YES | 账号 ID | |
| `device` | text | YES | 设备标识 | |
| `created_time` | timestamptz | NO | 创建时间 | |

---

### 1.16 bi_vala_seasonal_ticket（季度券表，PG 侧同步）

| 字段 | 类型 | 可空 | 释义 | 用途 |
|------|------|------|------|------|
| `id` | bigint | NO | 主键 | |
| `account_id` | bigint | YES | 账号 ID | |
| `out_trade_no` | varchar | YES | 订单号 | |
| `give_time` | bigint | NO | 发放时间戳 | |
| `expire_time` | bigint | NO | 到期时间戳 | |
| `used_time` | bigint | NO | 使用时间戳 | |
| `character_id` | integer | YES | 角色 ID | |
| `ticket_type` | smallint | YES | 券类型 | 1=Season Pass，2=Season Copy |
| `season_package_id` | integer | YES | 赛季包 ID | |
| `season_package_name` | varchar | YES | 赛季包名称 | |
| `status` | integer | YES | 状态 | 0=未使用，1=已使用，-1=禁用 |
| `created_at` | timestamptz | YES | 创建时间 | |
| `updated_at` | timestamptz | YES | 更新时间 | |
| `deleted_at` | timestamptz | YES | 删除时间 | |
| `character_name` | varchar | YES | 角色名 | |
| `redeem_code` | varchar | YES | 兑换码 | |
| `apply_package_ids` | text | YES | 适用套餐包 ID | |
| `ticket_group` | text | NO | 券分组 | |
| `name` | varchar | YES | 名称 | |
| `season_package_level` | varchar | YES | 赛季包等级 | |

---

### 1.17 account_activity_count（账号活动统计表）

| 字段 | 类型 | 可空 | 释义 | 用途 |
|------|------|------|------|------|
| `id` | bigint | NO | 主键 | |
| `time_period` | integer | YES | 时间周期 | |
| `counts` | integer | YES | 计数 | |
| `stat_date` | text | NO | 统计日期 | |
| `created_time` | timestamptz | NO | 创建时间 | |

---

### 1.18 account_paid_activity_count（付费账号活动统计表）

| 字段 | 类型 | 可空 | 释义 | 用途 |
|------|------|------|------|------|
| `id` | integer | NO | 主键 | |
| `time_period` | integer | YES | 时间周期 | |
| `counts` | integer | YES | 计数 | |
| `stat_date` | text | NO | 统计日期 | |
| `created_time` | timestamptz | NO | 创建时间 | |

---

### 1.19 growth_activity_behavior（增长活动行为表）

| 字段 | 类型 | 可空 | 释义 | 用途 |
|------|------|------|------|------|
| `id` | integer | NO | 主键 | |
| `es_id` | varchar | NO | ES 记录 ID | |
| `account_id` | integer | YES | 账号 ID | |
| `account_name` | varchar | YES | 账号名 | |
| `activity` | text | YES | 活动 | |
| `behavior` | varchar | YES | 行为 | |
| `created_at` | timestamptz | YES | 创建时间 | |
| `info` | text | YES | 详细信息 | |
| `source` | varchar | YES | 来源 | |
| `sub_behavior` | varchar | YES | 子行为 | |
| `user_id` | integer | YES | 角色 ID | |
| `user_name` | varchar | YES | 角色名 | |

---

### 1.20 user_behavior_buried_points（埋点数据表）

| 字段 | 类型 | 可空 | 释义 | 用途 |
|------|------|------|------|------|
| `id` | integer | NO | 主键 | |
| `burying_point_id` | integer | YES | 埋点 ID | |
| `burying_point_name` | varchar | YES | 埋点名称 | |
| `burying_point_sub_id` | integer | YES | 子埋点 ID | |
| `burying_point_sub_name` | varchar | YES | 子埋点名称 | |
| `account_id` | integer | YES | 账号 ID | |
| `account_name` | varchar | YES | 账号名 | |
| `character_id` | integer | YES | 角色 ID | |
| `character_name` | varchar | YES | 角色名 | |
| `active_time` | integer | YES | 活跃时间 | |
| `version_id` | varchar | YES | 版本 ID | |
| `step_duration` | integer | YES | 步骤耗时 | |
| `finish_status` | varchar | YES | 完成状态 | |
| `season_package_id` | integer | YES | 赛季包 ID | |
| `season_package_name` | varchar | YES | 赛季包名 | |
| `unit_id` | integer | YES | 单元 ID | |
| `unit_name` | varchar | YES | 单元名 | |
| `lesson_id` | integer | YES | 课时 ID | |
| `lesson_name` | varchar | YES | 课时名 | |
| `component_id` | integer | YES | 组件 ID | |
| `component_name` | varchar | YES | 组件名 | |
| `c_type` | varchar | YES | 组件类别 | |
| `c_id` | varchar | YES | 组件类别 ID | |
| `learning_module_id` | integer | YES | 学习模块 ID | |
| `learning_module_name` | varchar | YES | 学习模块名 | |
| `learning_point_id` | integer | YES | 知识点 ID | |
| `learning_point_name` | varchar | YES | 知识点名 | |
| `card_id` | integer | YES | 卡 ID | |
| `card_name` | varchar | YES | 卡名 | |
| `data_version` | varchar | YES | 数据版本 | |
| `ex2` | text | YES | 扩展字段 2 | |
| `ex3` | text | YES | 扩展字段 3 | |
| `es_id` | varchar | YES | ES 记录 ID | |

---

### 1.21 data_sync_config（数据同步配置表）

| 字段 | 类型 | 可空 | 释义 | 用途 |
|------|------|------|------|------|
| `id` | bigint | NO | 主键 | |
| `job_name` | text | NO | 任务名称 | cron 任务标识 |
| `database_name` | text | YES | 数据库名 | |
| `origin_table` | text | YES | 源表 | |
| `dest_table` | text | YES | 目标表 | |
| `deal_time` | timestamptz | YES | 处理时间 | |
| `full_id` | bigint | NO | 全量 ID | |
| `created_at` | timestamptz | NO | 创建时间 | |
| `updated_at` | timestamptz | YES | 更新时间 | |

---

### 1.22 feishu_table_record（飞书表格记录表）

| 字段 | 类型 | 可空 | 释义 | 用途 |
|------|------|------|------|------|
| `id` | bigint | NO | 主键 | |
| `data_table` | text | NO | 数据表名 | |
| `record_id` | text | YES | 记录 ID | |
| `created_at` | timestamptz | NO | 创建时间 | |

---

### 1.23 user_detail_info（用户详情表）

| 字段 | 类型 | 可空 | 释义 | 用途 |
|------|------|------|------|------|
| `id` | bigint | NO | 主键 | |
| `user_id` | integer | YES | 角色 ID | |
| `latest_login_time` | bigint | YES | 最近登录时间戳 | |
| `latest_active_time` | bigint | YES | 最近活跃时间戳 | |
| `created_time` | timestamptz | NO | 创建时间 | |

### 1.24 user_behavior_0~15（用户行为分表，16 张）

| 字段 | 类型 | 可空 | 释义 | 用途 |
|------|------|------|------|------|
| `id` | bigint | NO | 主键 | |
| `user_id` | integer | YES | 角色 ID | |
| `stat_date` | text | NO | 统计日期 | |
| `learning_time` | integer | YES | 学习时长 | |
| `created_time` | timestamptz | NO | 创建时间 | |

---

## 二、MySQL vala_user 库（源表）

> **数据库**: Online MySQL vala_user (bj-cdb-dh2fkqa0)  
> **角色**: 用户行为源数据  
> **权限**: 只读

### 2.1 vala_user_learn_record（用户学习记录表）

| 字段 | 类型 | 可空 | 释义 | 用途 |
|------|------|------|------|------|
| `id` | bigint | NO | 主键 | |
| `user_id` | bigint | NO | 角色 ID | |
| `game_id` | bigint | YES | 故事 ID | 关联游戏 |
| `chapter_id` | bigint | YES | 关卡/课时 ID | |
| `component_type` | bigint | YES | 组件类型 | |
| `sub_component_type` | bigint | YES | 组件子类型 | |
| `component_id` | bigint | NO | 组件 ID | |
| `card_content` | text | YES | 知识卡详情 JSON | |
| `is_new` | tinyint | NO | 是否新数据 | 0=否，1=是 |
| `created_at` | datetime | YES | 创建时间 | |
| `updated_at` | datetime | YES | 更新时间 | |
| `deleted_at` | datetime | YES | 删除时间 | |

### 2.2 vala_user_chapter_finish_record（课时完成记录表）

| 字段 | 类型 | 可空 | 释义 | 用途 |
|------|------|------|------|------|
| `id` | bigint | NO | 主键 | |
| `user_id` | bigint | NO | 角色 ID | |
| `game_id` | bigint | YES | 游戏 ID | |
| `chapter_id` | bigint | NO | 关卡/课时 ID | |
| `created_at` | datetime | YES | 首次完成时间 | |
| `updated_at` | datetime | YES | 更新时间 | |
| `deleted_at` | datetime | YES | 删除时间 | |

### 2.3 vala_user_interact_log（用户互动日志表）

| 字段 | 类型 | 可空 | 释义 | 用途 |
|------|------|------|------|------|
| `id` | bigint | NO | 主键 | |
| `user_id` | bigint | NO | 角色 ID | |
| `component_type` | tinyint | YES | 互动类型 | 1=knowledge_QA |
| `relation_type` | tinyint | YES | 好友关系类型 | 1=相识 2=熟识 3=友好 4=挚友 5=至交 |
| `npc_id` | bigint | NO | NPC 角色 ID | |
| `session_id` | varchar | NO | 会话 ID | |
| `summary` | text | NO | 对话总结 | |
| `dialog_list` | text | YES | 对话详情 JSON | |
| `dialog_score` | text | YES | 对话得分汇总 | |
| `tencent_soe` | text | YES | 腾讯云语音评测数据 | |
| `chat_review_resp` | text | YES | 回顾学习数据 | |
| `cost_time` | int | NO | 耗时(秒) | |
| `insert_time` | datetime | YES | 日志上报时间 | |
| `created_at` | datetime | YES | 创建时间 | |
| `updated_at` | datetime | YES | 更新时间 | |
| `deleted_at` | datetime | YES | 删除时间 | |
| `favor_value` | int | YES | 好感度值 | 大模型判定的互动好感度 |

### 2.4 vala_user_game_finish_record（游戏完成记录表）

| 字段 | 类型 | 可空 | 释义 | 用途 |
|------|------|------|------|------|
| `id` | int | NO | 主键 | |
| `user_id` | bigint | NO | 角色 ID | |
| `game_id` | bigint | NO | 故事 ID | |
| `chapter_id` | bigint | NO | 关卡 ID | |
| `score` | float | NO | 总得分 | |
| `score_level` | char | YES | 得分等级 | |
| `unique_code` | varchar | YES | 唯一校验码 | 每次学习完的唯一标识 |
| `source_type` | tinyint | YES | 来源类型 | 1=APP，2=小程序 |
| `created_at` | datetime | YES | 创建时间 | |
| `updated_at` | datetime | YES | 更新时间 | |
| `deleted_at` | timestamp | YES | 删除时间 | |

### 2.5 vala_user_long_term_memory（用户长期记忆表）

| 字段 | 类型 | 可空 | 释义 | 用途 |
|------|------|------|------|------|
| `id` | bigint | NO | 主键 | |
| `user_id` | int | YES | 角色 ID | |
| `npc_id` | int | YES | NPC 角色 ID | |
| `robot_id` | int | YES | 机器人 ID | |
| `config_id` | int | YES | 配置 ID | |
| `session_id` | varchar | YES | 会话 ID | |
| `log_id` | int | YES | 日志 ID | |
| `source` | varchar | YES | 来源 | |
| `source_type` | varchar | YES | 来源类型 | |
| `memory_type` | varchar | YES | 记忆类型 | |
| `sub_type` | varchar | YES | 来源子类型 | |
| `user_content` | text | YES | 用户内容 | |
| `system_content` | text | YES | 系统内容 | |
| `created_at` | datetime | YES | 创建时间 | |
| `updated_at` | datetime | YES | 更新时间 | |
| `deleted_at` | datetime | YES | 删除时间 | |

---

## 三、MySQL vala 库（配置表）

> **数据库**: Online MySQL vala (bj-cdb-dh2fkqa0)  
> **角色**: 课程/产品配置数据  
> **权限**: 只读

### 3.1 vala_game_info（游戏信息表/单元）

| 字段 | 类型 | 可空 | 释义 | 用途 |
|------|------|------|------|------|
| `id` | bigint | NO | 游戏/单元 ID | 关联 `game_id` |
| `en_name` | varchar | NO | 英文名称 | |
| `cn_name` | varchar | NO | 中文名称 | |
| `game_code` | varchar | NO | 游戏编码 | |
| `game_category` | tinyint | NO | 游戏类型 | 1=改编，2=原创 |
| `season_package_id` | bigint | YES | 季度包 ID | |
| `level_type` | tinyint | NO | 展开类型 | 1=顺序展开，2=触发式展开 |
| `desc` | text | NO | 简介 | |
| `is_hide` | tinyint | NO | 是否隐藏 | 0=不隐藏，1=隐藏 |
| `is_ready` | tinyint | YES | 是否就绪 | |
| `card_package_id` | text | YES | 卡包 ID | |
| `card_plot_id` | text | YES | 剧情卡 ID | |
| `index` | int | YES | 排序 | UnitIndex = (SeasonOfQuarter-1)*12 + Index |
| `plot_card_config` | text | YES | 剧情卡配置 JSON | |
| `created_at` | datetime | YES | 创建时间 | |
| `updated_at` | datetime | YES | 更新时间 | |
| `deleted_at` | datetime | YES | 删除时间 | |

### 3.2 vala_game_chapter（游戏关卡/课时表）

| 字段 | 类型 | 可空 | 释义 | 用途 |
|------|------|------|------|------|
| `id` | bigint | NO | 课时 ID | 即 `chapter_id` |
| `game_id` | bigint | YES | 所属游戏/单元 ID | 关联 `vala_game_info.id` |
| `season_package_id` | bigint | YES | 季度包 ID | |
| `en_name` | varchar | NO | 英文名称 | |
| `cn_name` | varchar | NO | 中文名称 | |
| `scene_id` | varchar | NO | 关联场景 ID | |
| `lesson_type` | tinyint | YES | 课程类型 | 1=主线，2=支线 |
| `event_id` | int | YES | 事件 ID | 支线课程的事件 ID |
| `desc` | text | NO | 简介 | |
| `index` | smallint | YES | 排序 | 每单元 5 节课：1~5 → L01~L05 |
| `learn_config` | text | YES | 思路学习内容 JSON | |
| `scene_path` | text | YES | 场景信息路径 | |
| `self_knowledge_card_config` | text | YES | 本故事知识卡配置 JSON | |
| `other_knowledge_card_config` | text | YES | 其他故事知识卡配置 JSON | |
| `review_knowledge_card_config` | text | YES | 复习知识卡配置 JSON | |
| `chapter_extension_config` | text | YES | 关卡扩展配置 JSON | |
| `created_at` | datetime | YES | 创建时间 | |
| `updated_at` | datetime | YES | 更新时间 | |
| `deleted_at` | datetime | YES | 删除时间 | |

**课程结构关系**:
- `vala_game_info.id` (unit) → `vala_game_chapter.game_id`
- `vala_game_chapter.id` (chapter_id) → `bi_user_chapter_play_record.chapter_id`
- ChapterIndex = UnitIndex * 5 + Chapter.Index

### 3.3 vala_game_season_package（季度包表）

| 字段 | 类型 | 可空 | 释义 | 用途 |
|------|------|------|------|------|
| `id` | bigint | NO | 季度包 ID | |
| `cn_name` | varchar | YES | 中文名称 | |
| `en_name` | varchar | YES | 英文名称 | |
| `season_of_year` | int | NO | 年份 | |
| `season_of_quarter` | int | NO | 季度 | 1/2/3/4 |
| `season_cn_desc` | text | YES | 中文描述 | |
| `season_en_desc` | text | YES | 英文描述 | |
| `is_hide` | tinyint | YES | 是否隐藏 | 0=不隐藏，1=隐藏 |
| `is_ready` | tinyint | YES | 是否就绪 | |
| `index` | int | YES | 排序 | |
| `level` | char | YES | 难度等级 | L1 / L2 |
| `created_at` | datetime | YES | 创建时间 | |
| `updated_at` | datetime | YES | 更新时间 | |
| `deleted_at` | datetime | YES | 删除时间 | |

**课程结构层级**:
CourseLevel (L1/L2) → SeasonPackage (S0~S4) → GameInfo (Unit, 每季12个) → GameChapter (Lesson, 每单元5个)

### 3.4 unit_challenge_question（单元挑战题目配置表）

| 字段 | 类型 | 可空 | 释义 | 用途 |
|------|------|------|------|------|
| `id` | bigint | NO | 主键 | |
| `category` | varchar | YES | 挑战科目 | listening/speaking/reading/writing |
| `type` | varchar | YES | 题目类型 | |
| `question_set_id` | varchar | YES | 题目集 ID | |
| `question_content` | text | YES | 题目配置 JSON | |
| `notice_content` | text | YES | 飞书通知原始数据 | 配置变更通知 |
| `err_msg` | text | YES | 解析错误信息 | |
| `related_path` | text | YES | 组件关联路径 | |
| `material_list` | text | YES | 材料列表 | |
| `created_at` | datetime | YES | 创建时间 | |
| `updated_at` | datetime | YES | 更新时间 | |
| `deleted_at` | datetime | YES | 删除时间 | |

---

## 四、MySQL vala_order 库

> **数据库**: Online MySQL vala_order (bj-cdb-dh2fkqa0)  
> **权限**: 只读

### 4.1 vala_seasonal_ticket（季度券表 - 源表）

| 字段 | 类型 | 可空 | 释义 | 用途 |
|------|------|------|------|------|
| `id` | bigint | NO | 主键 | |
| `unique_code` | varchar | YES | 季度券唯一码 | |
| `account_id` | bigint | YES | 账户 ID | |
| `account_name` | varchar | YES | 账户名 | 发放给账户名 |
| `tel` | varchar | YES | 手机号 | 账户手机号 |
| `give_time` | int | YES | 发放时间戳 | |
| `expire_time` | int | YES | 到期时间戳 | |
| `expire_type` | tinyint | NO | 有效期类型 | 1=1个月 2=3个月 3=6个月 4=1年 5=3年 |
| `ticket_type` | tinyint | NO | 券类型 | 1=Season Pass，2=Season Copy |
| `used_time` | int | YES | 使用时间戳 | |
| `season_package_id` | bigint | YES | 赛季包 ID | |
| `season_package_name` | varchar | YES | 赛季包名称 | |
| `status` | tinyint | NO | 状态 | 0=未使用，1=已使用，-1=禁用 |
| `created_at` | datetime | YES | 创建时间 | |
| `updated_at` | datetime | YES | 更新时间 | |
| `deleted_at` | datetime | YES | 删除时间 | |

---

## 五、核心计算口径汇总

### 5.1 订单/收入类指标

| 指标 | 计算公式 | 说明 |
|------|----------|------|
| **订单数** | `COUNT(DISTINCT bi_vala_order.id)` | 去重统计（需剔除测试账号） |
| **GMV** | `SUM(bi_vala_order.pay_amount_int) / 100` | 全部营销金额（含退费，单位元） |
| **退费金额** | `SUM(CASE WHEN r.status=3 AND o.order_status=4 THEN o.pay_amount_int ELSE 0 END) / 100` | 双条件校验退费成功 |
| **GSV** | `GMV - 退费金额` | 实际收入 |
| **退费率** | `退费订单数 / 总订单数 * 100%` | 时间段内成交订单中发生退费的比例 |

**前置条件（所有订单统计必须满足）**:
1. `JOIN bi_vala_app_account a ON o.account_id = a.id AND a.status = 1`（剔除测试账号）
2. 退费订单需同时满足：`bi_refund_order.status = 3` AND `bi_vala_order.order_status = 4`

### 5.2 用户增长类指标

| 指标 | 计算口径 | 说明 |
|------|----------|------|
| **新增注册用户** | 按 `bi_vala_app_account.created_at` 日期分组，`WHERE status=1 AND deleted_at IS NULL` | 按 `download_channel` 分渠道统计 |
| **新增付费用户** | 按 `bi_vala_order.pay_success_date` 日期分组 | 端内按 `sale_channel`，端外按 `key_from` 分渠道 |

### 5.3 学习行为类指标

#### 课时维度

| 指标 | 计算公式 | 说明 |
|------|----------|------|
| **课时首次完成时间** | `MIN(created_at)`，按 `user_id + chapter_id` 分组，`play_status=1` | 从 `bi_user_chapter_play_record` 取 |
| **课时总耗时(分钟)** | `SUM(interval_time) / 60000`，聚合 `chapter_unique_id` | 从 `bi_user_component_play_record` 取，保留1位小数 |
| **完成人数** | `COUNT(DISTINCT user_id)` WHERE `play_status=1` | |

#### 课程巩固 (Review)

| 指标 | 计算公式 | 说明 |
|------|----------|------|
| **巩固完成人数** | `COUNT(first_done_review_duration > 0)` | `user_chapter_time` 表 |
| **巩固平均用时(分钟)** | `AVG(first_done_review_duration) / 60` | 原始单位: 秒 |
| **巩固正确率%** | `AVG(first_done_review_right_rate) / 100` | 原始单位: 万分比 |
| **巩固用时(秒)** | `play_time / 1000` | 源表 `bi_user_unit_review_question_result` |
| **巩固正确率(万分比)** | `正确数 / 总题数 * 10000` | |

#### 单元强化 (Summary)

| 指标 | 计算公式 | 说明 |
|------|----------|------|
| **强化进入人数** | `COUNT(summary_in_ts > 0)` | `user_unit_time` 表 |
| **强化完成人数** | `COUNT(summary_done_ts > 0)` | |
| **首次进入强化时间** | `MIN(created_at)` FROM `bi_user_unit_summary_km_result` | |

#### 单元挑战 (Challenge)

| 指标 | 计算公式 | 说明 |
|------|----------|------|
| **挑战参与人数** | `COUNT(challenge_in_ts > 0)` | `user_unit_time` 表 |
| **挑战完成人数** | `COUNT(challenge_done_ts > 0)` | |
| **四维度 Perfect/Good/Oops 率** | `各评级人数 / (P+G+O 总人数) * 100` | 从 `question_list` JSON 解析 |

#### 组件维度

| 指标 | 计算公式 | 说明 |
|------|----------|------|
| **Oops率** | `COUNT(play_result='Oops') / COUNT(*) * 100%` | `play_status=1`，剔除测试账号 |
| **退出率** | `COUNT(play_status=2) / COUNT(play_status IN (1,2)) * 100%` | 有效参与 = 完成 + 退出 |
| **总参与次数** | `COUNT(*)` WHERE `play_status IN (1,2)` | |

### 5.4 课程结构计算

- **UnitIndex** = (SeasonOfQuarter - 1) * 12 + GameInfo.Index
- **ChapterIndex** = UnitIndex * 5 + Chapter.Index

### 5.5 核心版本时间节点

- **2025-10-01**: 核心版本上线时间，部分统计需区分此节点前后

---

## 六、渠道映射表

### 6.1 sale_channel 映射（端内渠道，仅 key_from=app-active-h5-0-0 有效）

| sale_channel 值 | 渠道名称 |
|-----------------|----------|
| 11 | 苹果 |
| 12 | 华为 |
| 13 | 小米 |
| 14 | 荣耀 |
| 15 | 应用宝 |
| 17 | 魅族 |
| 18 | VIVO |
| 19 | OPPO |
| 21 | 学而思 |
| 22 | 讯飞 |
| 23 | 步步高 |
| 24 | 作业帮 |
| 25 | 小度 |
| 26 | 希沃 |
| 27 | 京东方 |
| 41 | 官网 |
| 71 | 小程序 |
| 其他值 | 站外 |

### 6.2 key_from 映射（销售渠道）

| key_from 值 | 渠道名称 | 备注 |
|-------------|----------|------|
| `app-active-h5-0-0` | 端内购买 | 需结合 `sale_channel` 细分 |
| `app-sales-bj-qhm-0` | 端内购买 | 需结合 `sale_channel` 细分 |
| 以上两者之外 | 端外购买 | |
| `sales-adp*` (前缀匹配) | 销售渠道购买 | 端外中的销售渠道 |
| `newmedia-dianpu-xhs-0-0` | 小红书店铺 | |
| `newmedia-daren%` (前缀匹配) | 达人直播 | |
| `newmedia-dianpu-wwxx-0-0` | 万物 | |

### 6.3 download_channel（下载渠道，新增用户统计）

- `download_channel` 为汉字格式
- 匹配方式：关键字包含，如 `LIKE '%学而思%'`
- 支持中文渠道名模糊匹配

---

## 附录：表名索引

| 数据库 | 表名 | 说明 |
|--------|------|------|
| PG vala_bi | `bi_vala_order` | 订单表 |
| PG vala_bi | `bi_vala_app_account` | 用户账号表 |
| PG vala_bi | `bi_vala_app_character` | 角色表 |
| PG vala_bi | `bi_refund_order` | 退费订单表 |
| PG vala_bi | `bi_user_course_detail` | 用户课程明细表 |
| PG vala_bi | `bi_level_unit_lesson` | 课程结构映射表 |
| PG vala_bi | `bi_user_chapter_play_record_0~7` | 课时播放记录（8分表） |
| PG vala_bi | `bi_user_component_play_record_0~7` | 组件播放记录（8分表） |
| PG vala_bi | `bi_user_unit_review_question_result` | 巩固练习源表 |
| PG vala_bi | `bi_user_unit_summary_km_result` | 强化源表 |
| PG vala_bi | `bi_user_unit_challenge_question_result` | 挑战源表 |
| PG vala_bi | `bi_user_task_log` | 任务日志表 |
| PG vala_bi | `bi_vala_seasonal_ticket` | 季度券表（同步） |
| PG vala_bi | `account_detail_info` | 账号详情表 |
| PG vala_bi | `account_login` | 账号登录表 |
| PG vala_bi | `account_device` | 设备表 |
| PG vala_bi | `account_activity_count` | 账号活动统计表 |
| PG vala_bi | `account_paid_activity_count` | 付费账号活动统计表 |
| PG vala_bi | `growth_activity_behavior` | 增长活动行为表 |
| PG vala_bi | `user_behavior_buried_points` | 埋点数据表 |
| PG vala_bi | `user_detail_info` | 用户详情表 |
| PG vala_bi | `data_sync_config` | 数据同步配置表 |
| PG vala_bi | `feishu_table_record` | 飞书表格记录表 |
| PG vala_bi | `chapter_component_index` | 组件索引表 |
| PG vala_bi | `chapter_config_count` | 配置计数表 |
| MySQL vala | `vala_game_info` | 游戏/单元信息表 |
| MySQL vala | `vala_game_chapter` | 游戏关卡/课时表 |
| MySQL vala | `vala_game_season_package` | 赛季包表 |
| MySQL vala | `unit_challenge_question` | 挑战题目配置表 |
| MySQL vala_user | `vala_user_learn_record` | 学习记录表 |
| MySQL vala_user | `vala_user_chapter_finish_record` | 课时完成记录表 |
| MySQL vala_user | `vala_user_interact_log` | 互动日志表 |
| MySQL vala_user | `vala_user_game_finish_record` | 游戏完成记录表 |
| MySQL vala_user | `vala_user_long_term_memory` | 长期记忆表 |
| MySQL vala_order | `vala_seasonal_ticket` | 季度券源表 |