我正在构建一个多项选择考试,更好的做法是将每个选项存储到选择表中,并将它们链接到问题,或者只创建一个包含所有选项和问题文本的对象,并将其序列化存储到DB中作为一个记录??
如果我选择序列化对象方法,我将保存自己成千上万的选择记录属于问题。
class Quiz < ActiveRecord::Base
has_many :choices
end
class Choice < ActiveRecord::Base
belongs_to :quiz
end
那么,要考虑哪种方法?
答案 0 :(得分:2)
使用单独的表格。将序列化数据存储在关系数据库中几乎总是一个坏主意;如果你从一个干净的规范化架构开始,未来的更改将会更加容易(并且所有软件都会随着时间的推移而发生变化,特别是“一次快速破解”)。
在您的情况下,您希望在单独的表格中进行选择,以便您可以轻松回答诸如“有多少人为问题8选择选项3?”之类的问题。或“哪些问题只有两个选择”。
具有单独的表也使参考完整性更容易。例如,您可以设置taken_quizes
,其中有answers
个answer_choices
,每个answer_choices
;然后,您可以将choices
链接回{{1}}以避免数据不一致。如果将序列化数据结构存储在数据库中,则参照完整性很难并且非常昂贵。