Как сохранять условия, заданные пользователем, в базу данных?
Возникла сложность с моим рабочим проектом: есть тест с нескольким количеством блоков в нем. Непосредственно по блокам есть разное количество вопросов и ответов на них. Суть в том, что на этапе создания какого-либо теста, нужно определить условие, которое будет регламентировать движение по тесту (сначала один блок, потом второй или третий в зависимости от данных ответов в первом блоке)
Пример: "Тест 1" делится на 3 блока: Блок "А", Блок "Б" и Блок "В". В Блок "А" входит 10 вопросов и в зависимости от результата пройденного Блока "А" система будет решать по заданным условиям, какой надо давать блок: Блок "Б" или Блок "В".
Подскажите, каким образом отобразить это в базе данных? Какую таблицу можно создать, чтобы сохранять туда условия заданные пользователем?
Ответы (1 шт):
в зависимости от результата пройденного Блока "А" система будет решать по заданным условиям, какой надо давать блок: Блок "Б" или Блок "В".
Если результат прохождения блока формализуется в единое значение-результат, по которому принимается решение, то обычная таблица (пройденный блок - пороговый результат - переход к блоку). Например:
CREATE TABLE transition (
id INT PRIMARY KEY,
completed_block INT,
criteria_from INT,
criteria_till INT,
next_block INT
);
INSERT INTO transition VALUES
(1, 1, 0, 80, 2), -- если в блоке 1 набрано от 0 до 80 баллов - перейти к блоку 2
(2, 1, 81, 100, 3), -- если в блоке 1 набрано от 81 до 100 баллов - перейти к блоку 3
(3, 2, 0, 80, -1), -- если в блоке 2 набрано от 0 до 80 баллов - завершить тест
(4, 2, 81, 100, 3), -- если в блоке 2 набрано от 81 до 100 баллов - перейти к блоку 3
(5, 3, 0, 100, -1); -- если в блоке 3 набрано от 0 до 100 баллов - завершить тест
Ну и соответственно
SELECT COALESCE(next_block, -1) -- получить номер блока, к которому перейти
-- если запись не найдена, завершить тест
FROM transition
WHERE completed_block = @completed_block
AND @points_received BETWEEN criteria_from AND criteria_till;
При заполнении необходимо следить за неразрывностью цепочек прохождения тестов и отсутствием петель. Впрочем, тестировать можно и запросом, причём каждый раз, когда выполняется корректировка таблицы.