Мой сайт позволяет людям создавать викторины. Каждая опрос содержит до 20 вопросов, и каждый вопрос содержит до 5 ответов. У меня есть таблица базы данных для опросов, вопросов и ответов. Это означает, что одна опрос может иметь 121 строку. Есть ли лучший способ справиться с этим, например, отвечать на вопросы в отдельной колонке в таблице вопросов?
Использование механизма InnoDB по умолчанию - одна строка добавляет накладные расходы примерно на 20 байтов. Это около 20 МБ за миллион строк, что не очень хорошо для современного оборудования, если оно организовано и хорошо индексировано. Вы должны быть в порядке, даже если вы используете смартфон в качестве сервера.
Однако вы должны использовать по крайней мере одну таблицу для каждого объекта. Викторины, вопросы и ответы - разные сущности - поэтому у вас должно быть как минимум три таблицы, которые связаны с внешними ключами.
Вот пример нормализованной схемы:
create table quizzes(
quiz_id int unsigned auto_increment primary key,
title varchar(255)
);
create table questions (
question_id int unsigned auto_increment primary key,
quiz_id int unsigned not null
title varchar(255),
foreign key (quiz_id) references quizzes(quiz_id)
);
create table answers (
answer_id int unsigned auto_increment primary key,
question_id int unsigned not null
title varchar(255),
foreign key (question_id) references questions(question_id)
);