Проектирую MySQL базу данных для хранения анкет и ответов пользователей на вопросы этих анкет. На основе данных из базы формируется JSON. Разрабатываем REST API. Пользователь заполняет данные (name, email, position, tel...) и таким образом получает user.id. Затем отвечает на вопросы (таблица question) анкет (таблица survey). В результате ответы пользователя сохраняются в таблице answer. Ответ пользователя может быть заранее подготовлен в таблице options (вариант выбора, например тэг select). А может быть не подготовлен. Поэтому кроме таблицы answer_options, которая содержит выбранные пользователем варианты ответов (многие-к-многим) таблица answer содержит поля: text (ответ на вопрос как текст), num (ответ на вопрос как число), yn (ответ на вопрос как логический тип). Таблица input_types содержит тип элемента формы (например, <input type="text"/>. Таблица insert_types содержит имя поля в таблице answer (yn, text, num или options). API выводит вопрос в таком виде: Код (Javascript): { "id": 1, "label": "Годовой оборот компании?", "placeholder": "Введите число", "required": true, "input_type": { "name": "text" }, "insert_type": { "name": "num" } } Фронт смотрит insert_type и может отправить такой объект ответа на вопрос: Код (Javascript): { "user": 1, "question": 1, "num": 100 } API читает объект и сохраняет в таблице answer (свойство num сохраняется в answer.num) Мне не нравится то, что фронту приходится смотреть insert_type. Как принято сохранять ответы пользователей на открытые вопросы анкеты (заранее не подготовленные)?
Что значит ответ на вопрос как логический тип? true&false? Просто интересно как можно умудриться это не подготовить? Для остальных двух достаточно поля varchar в отдельной таблице. Ну или сделай две доп таблицы если надо разделить числа и строки и есть необходимость работать с этой информацией на уровне БД.
Да true&false. Это чекбоксы. Не подготовить? Не понял. Если "input_type": "checkbox" и "insert_type": "yn", то ответ будет сохранен в true или false (1 или 0). Да, но как поступить с таблицей options? Options - это вариант выбора: HTML: <select><option>1</option></select> Сейчас сохранется id варианта ответа в таблице answer_options. Имеешь в виду, что можно избежать сохранения id варианта ответа и всегда сохранять строкой? То есть вопрос, например, "Выберите свой возраст из списка" выводит options. Нужно просто сохранять выбранное пользователем значение строкой (а не так, как в моей БД реализовано сейчас - сохраняется id варианта ответа)?
@Razorfen, сейчас твой вариант предполагает возможность определения правильного результата, если этого не нужно, то всё вообще можно свести к строке. Ты несколько сумбурно и не совсем полно рассказываешь о задаче, поэтому я много чего могу нафантазировать