【问题标题】:rails 3.1, multiple choice exam, how to design?rails 3.1,选择题考试,如何设计?
【发布时间】:2011-11-12 07:02:28
【问题描述】:

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

如果我选择了序列化对象方法,我会为自己保存数千条属于问题的选择记录。

class Quiz < ActiveRecord::Base
  has_many :choices
end

class Choice < ActiveRecord::Base
  belongs_to :quiz
end

那么,该考虑哪种方法??

【问题讨论】:

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


    【解决方案1】:

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

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

    拥有单独的表也使参照完整性变得更加容易。例如,您可以设置taken_quizes,其中有多个answers,每个answer_choices;然后您可以将answer_choices 链接回choices 以避免数据不一致。如果您将序列化的数据结构存储在数据库中,参照完整性是困难且非常昂贵的。

    顺便说一句,您似乎忘记了您的问题类:测验有很多问题,每个问题都有很多选择。

    【讨论】:

    • 感谢 mu,您启发了我的方法,能否请您查看我的其他与同一主题相关的问题:stackoverflow.com/questions/8102682/…
    • 你好 mu,您是否建议将关联表合并到问题表中?这样我就有了新的字段,例如:choice1、choice2、choice3、choice4,字符串类型?这会是更好的设计吗?关于速度和性能?
    • @Samir:如果您绝对确定您将只有四个选择,那么四列是一个合理的选择;不过,我可能会使用单独的表,然后您可以轻松地将响应外键返回到选择。基本规则是尽可能规范化所有内容,然后根据需要进行非规范化。在发生之前,您不知道性能问题会出现在哪里;优化干净的规范化代码比清理过早优化的代码更容易。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-18
    • 2011-12-18
    • 2012-06-16
    • 2021-10-14
    • 2011-12-25
    • 1970-01-01
    • 2011-11-30
    相关资源
    最近更新 更多