从数据库字段设计的角度,你会怎样规划一个面试刷题平台的表结构?请重点说明各表的关键字段及其设计考虑。
考察说明
考查候选人对业务场景的抽象建模能力,以及数据库字段设计的合理性与扩展性。
回答思路
- 【回答框架 1】核心实体包括用户表、题目表、刷题记录表和评论表。用户表字段至少包含用户ID、用户名、密码哈希、邮箱、角色等,软删除和唯一索引规范。题目表包含题目ID、标题、内容、难度、标签、分类、创建时间等,需要为高频查询维度如难度和标签建立索引。
- 【回答框架 2】刷题记录表是核心业务表,需记录用户ID、题目ID、刷题状态(如未开始、进行中、已完成)、正确次数、提交次数、最近刷题时间等,通过用户ID和题目ID联合唯一索引保证重复刷题记录的唯一性,并考虑按用户和时间分表以应对大数据量。
- 【回答框架 3】评论表存储用户对题目的讨论,字段包括评论ID、题目ID、用户ID、内容、父评论ID、点赞数等。回复通过父评论ID实现树形结构,并考虑冗余路径字段或使用弹性搜索,以平衡查询性能和实现复杂度。
- 【回答框架 4】扩展考虑:用户收藏表、错题本表、题目动态统计表等,用于提升用户体验和查询效率。整体设计遵循第三范式,但可适度冗余统计字段或使用缓存,需权衡数据一致性。
- 【关键点 1】核心表:用户、题目、刷题记录、评论。
- 【关键点 2】刷题记录表采用用户ID和题目ID联合唯一约束,保证一次刷题一条记录。
- 【关键点 3】题目表对难度、标签等高频查询字段建索引,提升筛选性能。
- 【关键点 4】评论表通过父评论ID建立层级关系。
- 【关键点 5】考虑大数据量下按用户或时间分表。
- 【易错点 1】不要过度设计字段,避免大量冗余导致维护困难。
- 【易错点 2】唯一索引设计不当可能导致数据严重错误。
- 【易错点 3】评论回复的递归查询在数据量增大时需优化层级方案。