рельсы 3.1, множественный выбор экзамена, как оформить? - PullRequest
1 голос
/ 12 ноября 2011

Я строю экзамен с несколькими вариантами, который лучше хранить для каждого выбора в таблице вариантов и связывать их с вопросом или просто создать объект, который содержит все варианты и текст вопроса, и сохранить его сериализованным в БД. как одна запись ??

Если я выбрал метод сериализованного объекта, я сохраню тысячи записей выбора, принадлежащих вопросам.

class Quiz < ActiveRecord::Base
  has_many :choices
end

class Choice < ActiveRecord::Base
  belongs_to :quiz
end

Итак, какой метод рассмотреть ??

1 Ответ

2 голосов
/ 12 ноября 2011

Используйте отдельные таблицы. Хранение сериализованных данных в реляционной базе данных почти всегда плохая идея; если вы начнете с чистой нормализованной схемы, в будущем изменения будут намного проще (и все программное обеспечение будет меняться со временем, особенно «быстрые хаки»).

В вашем случае вы хотите, чтобы варианты выбора были в отдельной таблице, чтобы вы могли легко ответить на такие вопросы, как "сколько людей выбрали вариант 3 для вопроса 8?" или «какие вопросы имеют только 2 варианта».

Наличие отдельных таблиц также значительно упрощает ссылочную целостность. Например, вы можете настроить taken_quizes, у которого есть множество answers, по одному answer_choices каждый; затем вы можете связать answer_choices обратно с choices, чтобы избежать противоречивых данных. Ссылочная целостность сложна и очень дорога, если вы храните сериализованные структуры данных в базе данных.

Кстати, вы, кажется, забыли свой класс Вопросов: у Викторины есть много Вопросов, и у каждого Вопроса есть много Вариантов.

...