У меня тут начальство решило замутить подобие системы тестирования наших сотрудников для закрепления изученного материала. Суть простая. На экране человеку показывается выбор -
тестироваться по главам (выборочно) или по темам (выборочно). Т.е. примерная логическая структура в БД такая:
предмет экзамена <- глава <- тема <- вопрос
Исходя из того, что тестироваться может сотрудник по темам или главам и главное
выборочно, возник вопрос - а как это упаковать в БД? Варианты полагаю такие:
1. Таблица экзамена с общими сведениями (время, сотрудник, результат и т.д). В ней основные две колонки, которые хранят идентификаторы тех глав или тех тем, которые указал пользователь. Соответственно, когда он начинает тестирование/экзамен, в одну их этих колонок пишем список всех выбранных id глав или тем. Этот список используем для выбора вопросов.
Вроде норм, но как-то не очень приятно видеть колонки забитые идентификаторами в виде массивов. Т.е. если возникнет какой-то шаг влево-вправо в архитектуре, то может получится трындец.
2. Таблица экзамена с общими сведениями (время, сотрудник, результат и т.д). Таблица с выбранными главами и темами с такими колонками:
- идентификатор экзамена
- тип/класс (глава или тема)
- идентификатор главы или темы
В данном случае получится вроде как более организованно, потому как можно дополнять таблицу новыми данными, плюс легко собирать статистику и т.д. Однако, меня смущает тот факт, что на этапе создания экзамена, придётся делать сразу N-запросов создающих записи в этой таблице. Т.е. если пользователь решил выбрать например тему "1. А", "3. Б", "4. В", то в данную таблицу должны записаться сразу три записи. Как-то не очень.
Как считаете, какой вариант лучше или есть другие?