Разбивка на классы - GodPlaysChess/QuestionsProject GitHub Wiki
класс профиль пользователя(Profile). Содержит уникальный идентификатор, Фамилию, имя. Содержит класс роли.
класс Роль(enum) Ученик, Учитель, Администратор. Возможно стоит сделать наследование трех классов от профиля.
класс Курс - идентификатор курса, список номеров вопросов допустимых в данном курсе., количество задаваемых на экзамене вопросов. класс описывающий критерии оценки.
класс описывающий критерии оценки - массив пар значений, набранная сумма-оценка(удвл, хор, отл)
класс Экзамен - идентификатор, Id курса, id сдающего Ученика, список номеров вопросов заданных этому конкретному студенту на этом экзамене, время начала, время окончания, номер текущего вопроса(если экзамен не закончен) Собирается joinом из двух таблиц, отдельно список, отдельно все остальное.
класс вопрос - идентификатор, тип вопроса, текст вопроса, вес вопроса(используется при оценке)
класс ответ - идентификатор, id ученика, id вопроса, id экзамена, Текст ответа или Численное значение(для автоматически проверяемых вопросов), Оценка ответа. Статус ответа. Время начала, Время окончания.
класс Оценка - верно, неверно, не оценен.
класс Статус ответа - enum. автоматически сохранен, отправлен пользователем.