我正在尝试实现多项选择测验,并希望将我所有的问题和答案存储在 SQLite 数据库中。我会有很多问题,每个问题都会显示 2 个或更多可能的答案。
我的问题是,我应该如何将问题和答案存储在数据库中?我有两个关于模式的想法(粗体的主键)
- 作为(多对多)
问题(questionID:int , questionString:String, correctAnswerID:int)
答案(answerID:int , answerString:String)
questions_and_answers(questionID,answerID)
2.
问题(questionID:int, questionString:String, correctAnswerID:int)
answers (answerID:int, answerString:String, questionID:int 外键)
我不确定哪个更好,或者是否有其他方法?
也许 questions_and_answers
会变得非常大并导致检索时间长和内存问题?再一次,我假设 question_and_answers
将在主键上建立索引。在第二个模式中,answers
将在 answerID
而不是 questionID
上建立索引?这意味着搜索时间会增加,因为必须搜索整个表?
可能有大约 10,000 - 20,000 个答案。 (测验可能在移动设备上运行,问题需要“即时”显示)
注意:我不希望问题之间的答案有太多重叠。考虑到 questions_and_answers
表
最佳答案
第二个模式更好,因为它模拟了实际领域:每个问题都有一组答案。即使您可以通过存储重复答案一次来“压缩”数据,它也不匹配实际域。
以后您会想要编辑答案。对于模式 1,这意味着首先搜索该答案是否已经存在。如果它确实存在,那么您将不得不检查是否有任何问题仍然依赖于旧答案。如果它不存在,您仍然需要检查是否有任何其他问题依赖于该答案,然后就地编辑该答案或创建一个新答案。
模式 1 只会让生活变得非常艰难。
要回答您的索引问题,您需要在 questionId 上添加索引。拥有该索引后,查找问题的答案应该可以扩展。
现在,换一种说法,为什么要为此使用数据库? 考虑将它们存储为像 json 这样的标准格式的简单文档。任何时候你问一个问题,你几乎总是想要答案,反之亦然。您可以一步加载整个文档,而不是执行多个查询。
如果您随后发现需要更高级的存储(查询、冗余等),您可以转向 MongoDB 或 CouchDB 等文档数据库。
关于sql - 在数据库中存储多项选择测验 - 决定模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10082751/