@cmohammedmedkeveo

Как организовать хранение информации для задач учебных тестов?

У меня тут начальство решило замутить подобие системы тестирования наших сотрудников для закрепления изученного материала. Суть простая. На экране человеку показывается выбор - тестироваться по главам (выборочно) или по темам (выборочно). Т.е. примерная логическая структура в БД такая:

предмет экзамена <- глава <- тема <- вопрос


Исходя из того, что тестироваться может сотрудник по темам или главам и главное выборочно, возник вопрос - а как это упаковать в БД? Варианты полагаю такие:

1. Таблица экзамена с общими сведениями (время, сотрудник, результат и т.д). В ней основные две колонки, которые хранят идентификаторы тех глав или тех тем, которые указал пользователь. Соответственно, когда он начинает тестирование/экзамен, в одну их этих колонок пишем список всех выбранных id глав или тем. Этот список используем для выбора вопросов.

Вроде норм, но как-то не очень приятно видеть колонки забитые идентификаторами в виде массивов. Т.е. если возникнет какой-то шаг влево-вправо в архитектуре, то может получится трындец.

2. Таблица экзамена с общими сведениями (время, сотрудник, результат и т.д). Таблица с выбранными главами и темами с такими колонками:
  • идентификатор экзамена
  • тип/класс (глава или тема)
  • идентификатор главы или темы

В данном случае получится вроде как более организованно, потому как можно дополнять таблицу новыми данными, плюс легко собирать статистику и т.д. Однако, меня смущает тот факт, что на этапе создания экзамена, придётся делать сразу N-запросов создающих записи в этой таблице. Т.е. если пользователь решил выбрать например тему "1. А", "3. Б", "4. В", то в данную таблицу должны записаться сразу три записи. Как-то не очень.

Как считаете, какой вариант лучше или есть другие?
  • Вопрос задан
  • 191 просмотр
Пригласить эксперта
Ответы на вопрос 2
dark_tke
@dark_tke
Помогли? Отметь решением!
Как уже сказали, зачем изобретать велосипед, когда есть наработанные решения. Например меня радует MyTestX (не реклама, просто как одно из реально доступных решений которым я сам пользуюсь). В нем можно все это настраивать без слишком активной головной боли, ну и при необходимости, кто вам мешает результат экзамена в виде запроса потом передать куда хотите. Но это так сказать лирика.

Если вы все таки хотите проектировать подобное решение, варианты которые вы описали, в принципе подходят, но все упирается в то, что вы в итоге будете реализовывать и какую маштабируемость вы закладываете в свою систему.

Например, будут ли у вас поддерживаться формулировки вопросов и ответов. Какие типы вопросов у вас там будут. Как вы хотите реализовывать систему оценки экзаменуемых. Собираетесь ли вы использовать одни и те-же вопросы в разных тестах и т.д. Если именно проектировать структуру базы данных на все это нужны ответы.

Имея лишь минимум информации можно предложить завести следующую структуру:
1. Таблица с описанием экзамена. ( в ней же критерии оценки и т.д.)
2. Таблица с группами темю
2. Таблица с темами к экзамену
3. Таблица с вопросами к экзамену (указываете вопрос, альтернативную форму вопроса, правильный ответ, тип вопроса)
4. Ответы для вопроса типа одиночный выбор
5. Ответы для вопроса типа множественный выбор
6. Ответы на вопросы типа ввод значения
7. Ответы на вопросы типа ..... и т..д.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы