Там очень сложная структура.
В question_states хранятся внутренние состояния вопроса (показан, отвечен, оценен), которые связаны с попытками прохождения вопросов в question_attempts. Попытки ответа на вопрос свзязаны с попытками прохождения теста в quiz_attempts. По задумке авторов предполагалось, что вопросы могут быть использованы не только в тестах, поэтому попытки прохождения вопросов структурно были отделены от попыток прохождения теста, хотя сейчас вопросы из банка вопросов не используются нигде кроме тестов.
Поэтому для очистки question_states и question_attempts нужно удалять попытки прохождения теста. Но попытки прохождения тестов - это история обучения. Удалять попытки тестов, чтобы освобождать место в БД, это почти то же самое, что удалять файлы, присланные студентами в ответах на задания, чтобы освободить место на диске. То есть допустимо, когда это делает преподаватель осмысленно, но автоматически это не должно происходить. Если логи и история изменения оценок, это не критичные данные, которые можно удалять автоматом, то ответы студентов на тест или присланные работы удаляются только человеком, таков дизайн системы. В итоге, чтобы очищать эту таблицу, нужно либо выполнять очистку старых курсов, либо их удаление.
Можно, конечно, написать модуль, который будет выбирать в системе попытки тестирования, которые старше определенного возраста и удалять их. Но нужно понимать, как это согласуется с политикой хранения истории обучения в вашей организации. Если уж делать такой модуль, то стоит подумать и об удалении старых тем форумов, старых ответов на задания, старых попытках прохождения лекций - а в каждом модуле это отдельная задача.
Мне тоже не нравится обилие старых записей, которое связано с тем, что в системе присутствует большое число старых брошенных курсов, либо одни и те же курсы по кругу используются много лет без очистки.
Пока вижу такие глобальные пути решения этой проблемы:
- Запретить повторное использование курсов для следующих курсов. Новый поток студентов пришел - делается новый курс, импорт, а старый курс после окончания регламентированного срока хранения истории обучения студента удаляется.
- Делать очистку перед каждым новым потоком. Каждый год летом делать резервное копирование всей системы в архив, после чего делать очистку всех курсов.