如何在Firestore数据库中设计用户答题历史存储结构?
Firestore用户答题记录存储方案
根据你的需求,这里提供两种贴合现有结构的存储方案,完美关联题ID和答题记录串:
方案一:单题单文档(仅保留最新答题记录)
沿用你书签的设计思路,在用户的USER_DATA下新增QUESTION_HISTORY集合,用题目ID作为文档ID,文档内存储答题记录串及其他辅助字段。
- 路径结构:
/USERS/[用户ID]/USER_DATA/QUESTION_HISTORY/[题ID] - 文档示例:
{ "answerRecord": "WRWRR", "lastAttemptTime": "2024-05-20T14:30:00Z" }
- 优势:
- 题ID与文档ID直接绑定,无需额外关联字段,查询某题记录时直接通过题ID定位文档
- 结构和书签完全统一,维护成本低
- 更新答题记录时直接覆盖文档即可,操作简单
方案二:多记录多文档(保留所有答题历史)
如果需要保存用户同一题的多次尝试记录,可将文档ID设为Firestore自动生成的ID,文档内显式存储questionId和答题记录串。
- 路径结构:
/USERS/[用户ID]/USER_DATA/QUESTION_HISTORY/[自动生成文档ID] - 文档示例:
{ "questionId": "3s3NEa3lb9jbp2PWAthc", "answerRecord": "WRWRR", "attemptTime": "2024-05-20T14:30:00Z" }
- 优势:
- 完整保留用户每一次答题记录,支持回溯历史
- 可通过
questionId过滤查询某题的所有尝试,结合attemptTime排序查看答题趋势 - 扩展灵活,后续可新增
score、duration等字段记录更多答题细节
实现建议
- 如果只需要跟踪用户每道题的最新答题状态,优先选方案一,和现有书签结构对齐,代码逻辑更统一
- 如果需要分析用户答题习惯、记录多次尝试的变化,选方案二,牺牲一点查询效率换更完整的数据维度
内容的提问来源于stack exchange,提问作者Θεοφανης Γιαννακοπουλος
相关产品推荐
相关产品推荐

