За последние 24 часа нас посетили 5522 программиста и 433 робота. Сейчас ищут 225 программистов ...

Как сохранять ответы пользователей на открытые вопросы анкеты (заранее не подготовленные)?

Тема в разделе "PHP и базы данных", создана пользователем Razorfen, 6 авг 2019.

  1. Razorfen

    Razorfen Активный пользователь

    С нами с:
    2 авг 2016
    Сообщения:
    40
    Симпатии:
    0
    Проектирую 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):
    1.   {
    2.     "id": 1,
    3.     "label": "Годовой оборот компании?",
    4.     "placeholder": "Введите число",
    5.     "required": true,
    6.     "input_type": {
    7.       "name": "text"
    8.     },
    9.     "insert_type": {
    10.       "name": "num"
    11.     }
    12.   }
    Фронт смотрит insert_type и может отправить такой объект ответа на вопрос:
    Код (Javascript):
    1.   {
    2.     "user": 1,
    3.     "question": 1,
    4.     "num": 100
    5.   }
    API читает объект и сохраняет в таблице answer (свойство num сохраняется в answer.num)

    Мне не нравится то, что фронту приходится смотреть insert_type. Как принято сохранять ответы пользователей на открытые вопросы анкеты (заранее не подготовленные)?

    [​IMG]
     
    #1 Razorfen, 6 авг 2019
    Последнее редактирование: 6 авг 2019
  2. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    325
    Что значит ответ на вопрос как логический тип? true&false? Просто интересно как можно умудриться это не подготовить?
    Для остальных двух достаточно поля varchar в отдельной таблице. Ну или сделай две доп таблицы если надо разделить числа и строки и есть необходимость работать с этой информацией на уровне БД.
     
  3. Razorfen

    Razorfen Активный пользователь

    С нами с:
    2 авг 2016
    Сообщения:
    40
    Симпатии:
    0
    Да true&false. Это чекбоксы. Не подготовить? Не понял. Если "input_type": "checkbox" и "insert_type": "yn", то ответ будет сохранен в true или false (1 или 0).
    Да, но как поступить с таблицей options? Options - это вариант выбора:
    HTML:
    Сейчас сохранется id варианта ответа в таблице answer_options.
    Имеешь в виду, что можно избежать сохранения id варианта ответа и всегда сохранять строкой? То есть вопрос, например, "Выберите свой возраст из списка" выводит options. Нужно просто сохранять выбранное пользователем значение строкой (а не так, как в моей БД реализовано сейчас - сохраняется id варианта ответа)?
     
  4. Valick

    Valick Активный пользователь

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    325
    @Razorfen, сейчас твой вариант предполагает возможность определения правильного результата, если этого не нужно, то всё вообще можно свести к строке. Ты несколько сумбурно и не совсем полно рассказываешь о задаче, поэтому я много чего могу нафантазировать :)