rails 3.1,多项选择考试,如何设计?

时间:2011-11-12 07:02:29

标签: ruby-on-rails database ruby-on-rails-3 database-design

我正在构建一个多项选择考试,更好的做法是将每个选项存储到选择表中,并将它们链接到问题,或者只创建一个包含所有选项和问题文本的对象,并将其序列化存储到DB中作为一个记录??

如果我选择序列化对象方法,我将保存自己成千上万的选择记录属于问题。

class Quiz < ActiveRecord::Base
  has_many :choices
end

class Choice < ActiveRecord::Base
  belongs_to :quiz
end

那么,要考虑哪种方法?

1 个答案:

答案 0 :(得分:2)

使用单独的表格。将序列化数据存储在关系数据库中几乎总是一个坏主意;如果你从一个干净的规范化架构开始,未来的更改将会更加容易(并且所有软件都会随着时间的推移而发生变化,特别是“一次快速破解”)。

在您的情况下,您希望在单独的表格中进行选择,以便您可以轻松回答诸如“有多少人为问题8选择选项3?”之类的问题。或“哪些问题只有两个选择”。

具有单独的表也使参考完整性更容易。例如,您可以设置taken_quizes,其中有answersanswer_choices,每个answer_choices;然后,您可以将choices链接回{{1}}以避免数据不一致。如果将序列化数据结构存储在数据库中,则参照完整性很难并且非常昂贵。

顺便说一下,你好像忘记了你的问题课:测验有很多问题,每个问题都有很多选择。