作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在构建多项选择题考试,这样更好,可以将每个选项存储到选项表中,并将它们链接到问题,或者只创建一个包含所有选项和问题文本的对象,并将其序列化存储到数据库中作为一个记录??
如果我选择序列化对象方式,我会为自己保存上千条属于问题的选择记录。
class Quiz < ActiveRecord::Base
has_many :choices
end
class Choice < ActiveRecord::Base
belongs_to :quiz
end
那么,应该考虑哪种方法呢??
最佳答案
使用单独的表格。在关系数据库中存储序列化数据几乎总是一个坏主意;如果您从一个干净的规范化架构开始,那么将来更改会容易得多(并且所有软件都会随着时间的推移而变化,尤其是“一次性快速破解”)。
在您的情况下,您希望将选项放在单独的表格中,以便您可以轻松回答“有多少人为问题 8 选择了选项 3?”之类的问题。或“哪些问题只有 2 个选择”。
拥有单独的表也使参照完整性变得更加容易。例如,您可以设置 taken_quizes
,其中有许多 answers
,每个有一个 answer_choices
;然后您可以将 answer_choices
链接回 choices
以避免数据不一致。如果您在数据库中存储序列化数据结构,则参照完整性很难实现且成本非常高。
顺便说一句,您似乎忘记了问题类:测验有很多问题,每个问题都有很多选择。
关于ruby-on-rails - rails 3.1,选择题考试,怎么设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8103103/
我是一名优秀的程序员,十分优秀!