Нам нужна помощь в разработке схемы базы данных для вопросников и ответов с несколькими вариантами ответов.
Первый вариант - создать таблицу вопросов и таблицу ответов, как показано ниже
* Question Table
- question_id auto integer
- question varchar
* Answer Table
- user_id integer
- question_id integer
- answer integer
Однако проблема с этим дизайном заключается в том, что, когда пользователь отправляет ответы на вопросники, необходимо вставить несколько строк и, следовательно, как запись, так и извлечение будут выполняться медленнее. Кроме того, стол будет расти очень большой. Тем не менее, преимущество заключается в том, что его можно расширять и легко добавлять новые вопросы.
Другой подход состоит в том, чтобы все ответы были в одной строке, но в другой колонке, например,
* Answer Table
- user_id integer
- answer_1 integer
- answer_2 integer
...
- answer_n integer
Преимущество состоит в том, что за один раз можно написать или получить только одну строку, и, следовательно, это будет намного быстрее, чем при первом подходе. Однако схема будет жесткой, и если будут добавлены какие-либо новые вопросы, схему db придется изменить, чтобы разместить новый столбец.
У нас более 3 миллионов пользователей и несколько анкет на пользователя. Следовательно, скорость, безусловно, является критерием. Исходя из этого критерия, какой вы предпочитаете? Есть ли другие альтернативы?
Спасибо