51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

设计游戏用户系统的数据库表结构,包括账号信息、防沉迷数据、等级体系、成就系统等,考虑数据一致性、扩展性及查询性能(如快速查询用户等级、成就列表)。

9377游戏游戏系统策划难度:中等

答案

1) 【一句话结论】采用“主表(用户表)+关联子表(防沉迷、等级、成就表)”的范式设计,通过外键关联保证数据一致性,为高频查询字段(用户ID、等级、成就ID)建立索引,兼顾查询性能与未来扩展性。

2) 【原理/概念讲解】老师口吻解释核心设计逻辑:

  • 用户表:存储账号基础信息(如用户ID、用户名、密码哈希、注册时间等),作为所有关联表的主表。
  • 防沉迷表:记录每日登录时长、累计游戏时长等数据,通过外键关联用户表,确保数据归属。
  • 等级表:定义经验值阈值与等级对应的属性加成(如攻击力、生命值),采用JSON存储属性加成以支持灵活扩展。
  • 成就表:存储成就名称、描述、达成条件(如“达到等级30”“完成100次任务”),通过用户成就表关联用户与成就。
  • 索引优化:为用户ID、等级、成就ID等高频查询字段建立B树索引,提升查询效率(如快速查询用户等级时,通过用户ID索引直接定位)。

类比:就像“家庭档案”,用户表是“户口本”(核心信息),防沉迷、等级、成就表是“子女成长记录”(关联信息),通过户口本编号(用户ID)关联所有记录,确保信息不丢失且查询快速。

3) 【对比与适用场景】

设计方式定义特性使用场景注意点
合并表将账号、防沉迷、等级、成就字段存入一张表(如用户表包含所有字段)数据冗余,查询简单小型项目,数据量少数据更新复杂,扩展性差
分表(主表+子表)主表(用户表)存储核心信息,子表(防沉迷、等级、成就)存储关联数据数据结构清晰,减少冗余大型游戏,数据量多,高频查询需外键关联,查询时可能需JOIN

4) 【示例】(表结构伪代码):

-- 用户表(主表)
CREATE TABLE user (
    user_id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) UNIQUE NOT NULL,
    password_hash VARCHAR(255) NOT NULL,
    register_time DATETIME NOT NULL,
    last_login_time DATETIME
);

-- 防沉迷表(关联用户表)
CREATE TABLE anti_addiction (
    record_id INT PRIMARY KEY AUTO_INCREMENT,
    user_id INT,
    daily_login_time INT, -- 每日游戏时长(分钟)
    cumulative_play_time INT, -- 累计游戏时长(小时)
    last_update_time DATETIME,
    FOREIGN KEY (user_id) REFERENCES user(user_id)
);

-- 等级表
CREATE TABLE level (
    level_id INT PRIMARY KEY AUTO_INCREMENT,
    level_name VARCHAR(20), -- 如“新手”“青铜”
    experience_threshold INT, -- 升级所需经验值
    level_attr_add JSON -- 等级属性加成(如攻击+10)
);

-- 成就表
CREATE TABLE achievement (
    achievement_id INT PRIMARY KEY AUTO_INCREMENT,
    achievement_name VARCHAR(50),
    description TEXT,
    condition JSON -- 成就达成条件
);

-- 用户成就表(关联用户与成就)
CREATE TABLE user_achievement (
    user_id INT,
    achievement_id INT,
    achieve_time DATETIME,
    is_earned BOOLEAN DEFAULT FALSE,
    PRIMARY KEY (user_id, achievement_id),
    FOREIGN KEY (user_id) REFERENCES user(user_id),
    FOREIGN KEY (achievement_id) REFERENCES achievement(achievement_id)
);

5) 【面试口播版答案】(约90秒):
“面试官您好,针对游戏用户系统,我设计采用主表+关联子表的结构。核心思路是:用户表存储账号基础信息,防沉迷表记录每日/累计游戏时长,等级表定义经验值与属性加成,成就表存储成就条件,通过外键关联保证数据一致性。为高频查询字段(如用户ID、等级、成就ID)建立索引,提升查询性能。比如快速查询用户等级,通过用户ID索引直接获取;成就列表通过用户ID关联成就表,JOIN后返回。这种设计既符合范式,又兼顾扩展性,未来新增功能(如社交系统、道具系统)可以新增表或字段,不影响现有结构。”

6) 【追问清单】及回答要点:

  • 问:如何保证防沉迷数据的实时性?
    答:防沉迷数据通过定时任务(如每日凌晨)同步,或游戏内每分钟更新后存储到缓存,定时同步至数据库,确保数据准确。
  • 问:等级体系如何扩展?
    答:等级表采用JSON存储属性加成,新增等级时只需插入新记录,无需修改现有表结构,支持灵活调整。
  • 问:成就系统如何处理重复达成?
    答:用户成就表通过用户ID+成就ID唯一索引,避免重复记录,同时记录达成时间,支持查看历史达成。
  • 问:数据一致性如何保障?
    答:使用外键约束(如防沉迷表的外键关联用户表),以及事务处理(如更新游戏时长时,先更新防沉迷表,再更新等级表,确保事务原子性)。
  • 问:查询性能优化具体措施?
    答:为用户ID、等级、成就ID等字段建立B树索引,针对常用查询(如用户等级、成就列表)创建复合索引,减少JOIN开销。

7) 【常见坑/雷区】:

  • 坑1:表结构冗余,将防沉迷、等级、成就字段合并到用户表,导致数据更新复杂,扩展性差。
  • 坑2:外键缺失,导致数据不一致(如防沉迷表中的用户ID不存在于用户表)。
  • 坑3:索引不足,高频查询字段未建立索引,导致查询性能下降(如查询用户等级时全表扫描)。
  • 坑4:防沉迷数据实时性处理不当,导致数据延迟或错误(如玩家实际游戏时长与记录不符)。
  • 坑5:等级体系设计僵化,采用固定经验值阈值,无法灵活调整(如新增等级或调整升级条件时需要修改表结构)。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1