← 返回文章列表

传奇盒子的数据库设计一览图

原文档标题:玛法盒子(cqBox)— 后端数据库结构(草案)。正文由 article_origin_data/后端数据库结构.md 转换,便于在线阅读与检索。

本文档根据当前 Web 启动器(web/WinUI 登录页(微信扫码) 中的界面与假数据归纳,供后端建表参考。实际表名、字段类型可按所用数据库(PostgreSQL / MySQL / SQL Server 等)调整。


一、当前程序功能概览

模块功能要点
账号桌面端微信扫码登录(需绑定平台用户)
个人资料昵称、展示 ID、等级、VIP、钱包(传奇币/礼包/背包类计数)
游戏目录996 / Gee 频道、分类与特色筛选、推荐标记、排序(人气/下载量)
游戏详情标题、标语、海报、人气、下载量、点赞数(可冗余)、品类、特色标签、可选:体积、上架/推荐时间、作者
激活 / 购买未购游戏走激活页;会员 / 激活码等模式(演示)
已购 / 收藏用户维度的游戏列表
互动收藏、点赞(可按游戏聚合统计)
下载由客户端根据 games.package_download_url 拉取;进度与队列仅存本机,不落库
本地资源是否已下载、安装路径等由客户端本地维护,后端不建表
首页新游时间轴、主推 Banner、热门横滑、右侧促销卡片、公告列表
游戏管理(演示)启停服、工具入口、存档与 GM 等均为界面演示,后端不建表

二、建议数据表与字段

1. users(用户主表)

字段类型建议说明
idBIGINT / UUID PK用户主键
wechat_openidVARCHAR(64) UNIQUE NULL微信 OpenID(若仅扫码可再扩展 unionid)
wechat_unionidVARCHAR(64) UNIQUE NULL可选
phoneVARCHAR(20) NULL可选绑定
statusTINYINT正常/冻结等
created_at / updated_atDATETIME

2. user_profiles(展示与成长,可与 users 合并为单表以减少联表)

字段类型建议说明
user_idPK,FK → users.id与账号 一对一;删除用户时建议 ON DELETE CASCADE 或业务层一并删除
nicknameVARCHAR(64)展示名
avatar_urlVARCHAR(512) NULL头像
subtitleVARCHAR(128) NULL个性签名/副标题
display_uidVARCHAR(32) UNIQUE对外唯一展示 ID(如 1132309)
levelINT等级
vip_levelINTVIP 等级
coinBIGINT传奇币等
gift_countINT礼包类计数
bag_countINT背包类计数
created_atDATETIME
updated_atDATETIME

3. game_categories(类别字典 / 后台可维护)

与前端 categoryOptions(如:全部、单职业、三职业、多职业)对应;游戏表用 category_id 关联本表。类别为全站共用字典频道(996 / Gee)仅在 games.source_channel,列表筛选典型写法:WHERE source_channel = ? AND category_id = ?(及特色等多对多条件)。

字段类型建议说明
idINT PK类别 ID,接口筛选传此 ID
codeVARCHAR(32) UNIQUE NULL稳定业务键,如 single_class(可选,利于多语言或迁移)
nameVARCHAR(32)展示名称,如 单职业
sort_orderINT DEFAULT 0列表/筛选项排序
statusTINYINT启用/停用;停用后不在筛选器展示
created_at / updated_atDATETIME

用 ID 关联相对直接存 category 字符串的好处:索引更小、等值查询稳定;改名只改字典表一行;后台增删类别不需批量改 games;与「特色标签」同样采用字典 + 关联,模型一致。


4. games(游戏主数据 / 上架目录)

字段类型建议说明
idBIGINT PK
slugVARCHAR(64) UNIQUE NULLURL、分享、后台检索用稳定键(如 zhong-shen-zhi-zhan
titleVARCHAR(128)名称
taglineVARCHAR(256) NULL短描述
source_channelVARCHAR(16)996 / gee,库内统一小写,与接口常量一致;与 category_id 组合筛列表
category_idINT FK → game_categories.id NULL职业/玩法类别;常与 source_channel 联查
poster_urlVARCHAR(512) NULL海报图 URL(前端现用渐变可改为 URL)
popularityBIGINT DEFAULT 0人气(建议异步汇总写入,见 §四)
download_countBIGINT DEFAULT 0下载量(展示/统计,建议异步汇总)
like_countBIGINT DEFAULT 0点赞总数,与 user_game_likes 双写:写入点赞明细时同步 +1/-1 或定时校准
is_newBOOL是否新游;可与 listed_at 规则并用
listed_atDATETIME NULL上架时间;可做「新游 N 天内」自动规则
is_recommendedBOOL DEFAULT false是否推荐(强推、精选等)
recommend_untilDATETIME NULL推荐截止时间;到期后任务或查询层与 is_recommended 一并处理
file_size_bytesBIGINT NULL客户端大小
package_download_urlVARCHAR(2048) NULL游戏包下载地址(HTTPS 直链、对象存储预签名 URL 或下载网关路径;客户端据此拉取)
updated_atDATETIME NULL版本更新时间
authorVARCHAR(64) NULL作者/发行方
statusTINYINT上架/下架(勿物理删除有订单/激活关联的游戏,优先配合 deleted_at
created_atDATETIME
deleted_atDATETIME NULL软删除;非空表示下线且保留历史关联

若同一游戏需 多包(分卷、Windows/Mac、增量补丁等),可另建子表 game_packagesgame_id、平台、序号、download_urlfile_size_byteschecksum 等),主表 package_download_url 可表示默认包或留空仅走子表。

游戏特色标签(多对多)

5. game_features(标签字典,可选)

字段类型建议说明
idINT PK
codeVARCHAR(32) UNIQUE稳定英文/拼音键,如 has_botmicro_change(勿用中文作 code)
labelVARCHAR(32)中文展示名,如「有假人」「微变」
sort_orderINT DEFAULT 0筛选项/后台列表排序
statusTINYINT启用/停用
created_at / updated_atDATETIME

6. game_feature_rel(游戏 ↔ 标签)

字段类型建议说明
game_idFK删除游戏前需处理关联或禁止物理删除(见 §四)
feature_idFK建议单列索引 feature_id,便于按标签反查游戏
created_atDATETIME打标时间,便于审计
PK(game_id, feature_id)

7. user_game_purchases(已购 / 授权)

字段类型建议说明
idBIGINT PK
user_idFK
game_idFK
acquired_atDATETIME获得时间
sourceVARCHAR(32) NULLpurchase / gift / activation_code
order_idBIGINT NULL关联订单
UNIQUE(user_id, game_id)同一游戏一条授权

8. user_game_favorites(收藏)

字段类型建议说明
user_idFK
game_idFK
created_atDATETIME
PK(user_id, game_id)

9. user_game_likes(点赞,若需防重复)

字段类型建议说明
user_idFK
game_idFK
created_atDATETIME
PK(user_id, game_id)

点赞列表以 user_game_likes 为准;列表页展示games.like_count(双写或定时对齐)。


10. activation_codes(激活码,可选)

生产环境不明文存完整码:仅存哈希 + 盐;核销时对用户输入做相同哈希比对。max_uses / used_count 更新需事务或行锁防并发超卖。

字段类型建议说明
idBIGINT PK
batch_noVARCHAR(64) NULL运营批次/备注,便于后台筛选
code_hashCHAR(64) NOT NULL激活码 SHA-256(或同等)十六进制,与 salt 共同校验
saltVARCHAR(32) NOT NULL每码独立盐;校验:hash(规范化输入 + salt)code_hash 比对
game_idFK NULL绑定单游戏或 NULL 表示通用
max_usesINT总可核销次数
used_countINT已核销次数
expires_atDATETIME NULL
statusTINYINT
created_atDATETIME

核销流程:用户提交明文码 → 规范化 → 对候选或全表匹配 code_hash(若业务允许可先按 batch_no 缩小范围);匹配成功后递增 used_count 并写 activation_redemptions

11. activation_redemptions(激活记录)

字段类型建议说明
idBIGINT PK
user_idFK
code_idFK
game_idFK
redeemed_atDATETIME
UNIQUE(code_id, user_id)防同一用户重复核销同一码(按需;若一码多用户可去掉)

12. orders(订单,若存在付费购买)

字段类型建议说明
idBIGINT PK
order_noVARCHAR(64) UNIQUE商户侧订单号,对外展示与对账
user_idFK
amountDECIMAL(12,2)
currencyVARCHAR(8)
statusVARCHAR(16)
payment_channelVARCHAR(32) NULLwechat_payalipay
third_party_trade_noVARCHAR(64) NULL微信/支付宝交易号等,建议索引
notify_payloadTEXT NULL支付回调原文,便于对账与排错
game_idFK NULL单笔单游戏时可填;多商品以 order_items 为准,此字段可空
created_at / paid_atDATETIME

13. order_items(订单明细,多商品时必填)

字段类型建议说明
idBIGINT PK
order_idFK → orders.id
game_idFK
quantityINT DEFAULT 1
unit_priceDECIMAL(12,2)行单价
created_atDATETIME

单笔单游戏可仅填 orders.game_id 或只写一行 order_items,由产品约定。


14. announcements(公告)

字段类型建议说明
idBIGINT PK
titleVARCHAR(256)或纯文本一行
contentTEXT NULL
link_urlVARCHAR(512) NULL点击跳转
link_targetVARCHAR(16) NULL_blank / _self
source_channelVARCHAR(16) NULL996 / geeNULL 表示全站
published_atDATE / DATETIME
sort_orderINT
statusTINYINT

15. home_banners / home_recommend_slots(首页 Banner / 新游推荐,可拆分)

games.is_recommended / home_banners.game_id 并存时,运营需约定:强推以 Banner 配置为准还是以游戏字段为准,避免重复位冲突。

字段类型建议说明
idBIGINT PK
slot_typeVARCHAR(32)hero / timeline / popular_row
game_idFK NULL关联游戏或纯图
image_urlVARCHAR(512) NULL
title / subtitle / tagVARCHAR展示文案
gradient_cssVARCHAR(256) NULL过渡期可存前端样式
source_channelVARCHAR(16) NULLNULL=全站;否则仅该频道展示
start_at / end_atDATETIME NULL投放时间
sort_orderINT
statusTINYINT启用/停用

16. promo_cards(右侧促销位,可选)

home_banners 职责接近;长期可演进为统一「运营位」表,当前保持分表并 字段对齐(状态、有效期、频道)。

字段类型建议说明
idBIGINT PK
titleVARCHAR(64)
descriptionVARCHAR(128)
toneVARCHAR(16)前端配色 key
link_urlVARCHAR(512) NULL
source_channelVARCHAR(16) NULLNULL=全站
start_at / end_atDATETIME NULL与 Banner 一致
sort_orderINT
statusTINYINT启用/停用

三、与前端假数据对应关系(便于联调)


四、说明(索引、删除策略、同步与运维)


五、残留与演进(未强制改表结构)

以下仍为产品/工程选型,未再拆新表:

项目说明
usersuser_profiles可合并为单表;当前保留拆分并已补 created_at、一对一 PK、display_uid UNIQUE。
home_bannerspromo_cards仍分两表,字段已对齐;后续可合并为统一「运营位」表 + position
支付审计已用 orders.notify_payload 存回调原文;若量大可再拆 payment_notify_logs

文档版本:与仓库 web/ + Pages/LoginPage 功能同步归纳,随产品迭代更新。


六、管理端(MineAdmin / cq_server)说明