回答

收藏

存储在数据库中的多个选项-确定方案

技术问答 技术问答 311 人阅读 | 0 人回复 | 2023-09-14

我正试图实施多项选择测试,并将所有问题和答案存储在一起SQLite在数据库中。我会有很多问题,每个问题会显示两个或更多可能的答案。
+ O: a$ U  h( m7 Y/ n) E# ~我的问题是,我应该如何在数据库中存储问题和答案?我对模型有两个想法(主键显示粗体)
9 Z3 A! Y$ B8 \% _0 k5 j" ]! Y- @  W[ol]作为(很多)[/ol]问题( questionID    :int,questionString:String,correctAnswerID:int)
3 d& H& b' T  G# }# T2 l答案( answerID    :int,answerString:String)& G# b6 A8 ^6 Z( F$ @5 `
questions_and_answers( questionID    ,answerID    )
+ L( [" j6 c/ C7 l2。
2 c& f0 \  m- P  d4 I问题( questionID    :int,questionString:String,correctAnswerID:int)) {, ?9 J" I; J# U7 o1 k) u( {3 r
答案( answerID    :int,answerString:String,questionID:int 外键    )
& j9 R2 W6 g1 Y我不确定哪个更好,或者还有其他方法吗?
, L/ r" J% x. [/ V' q7 w" g- s& q可能questions_and_answers它会变得很大,导致更长的检索时间和内存问题?再说一次,我假设question_and_answers索引将建立在主键上。在第二种模式下,answers将被索引为answerID而不是questionID?这意味着搜索时间会增加,因为你必须搜索整个表格?
3 O1 |6 y/ w& m$ \# \$ w7 A大约100000可能会发生-20000个答案。(测试可能在移动设备上运行,需要立即显示问题), e' w) S  |8 P. r- a# q$ X
注:我不希望问题之间的答案有太多的重叠。questions_and_answers对于表所需的额外空间,我不认为重叠的数量意味着数据存储更少
# |. v. c% Q# g" Z: ?                                                                1 \4 T% i2 ?0 I
    解决方案:                                                               
" r0 j$ O( s) U- z, Y/ a0 D                                                                第二种模式是更好的模式,因为它是在实际领域建模的:每个问题都有一组答案。即使您可以通过存储重复的答案来压缩数据,它 也与实际域不匹配    。4 z; A: I0 B- K% w# n& o0 a
在路上,你将编辑答案。对于模式1,这意味着首先搜索答案是否存在。如果确实存在,您将不得不检查是否有任何问题仍然取决于旧答案。如果没有,您仍然必须检查是否有其他问题取决于答案,然后编辑答案或创建当地新答案。0 e! a6 @$ U+ h5 d  p% a3 G0 l# m
模式1使生活变得非常艰难。4 W* w6 Y, m7 l9 n- N% X
你需要回答索引问题questionId添加索引。一旦有了索引,发现问题的答案就可以扩展。
5 w0 F9 G: L5 z; s' ]现在,换句话说,为什么要使用数据库?考虑将其存储为    json 等标准格式简单文档7 z5 d+ y% [0 o' v+ E
。每当你问问题时,你几乎总是需要答案,反之亦然。整个文档可以一步加载,而不是执行多个查询。
( Z$ V+ `, Y5 }- ]; ]如果后来发现需要更高级的存储(查询、冗余等),可以移动到MongoDB或CouchDB文档数据库等。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则