Есть ли лучший способ обрабатывать мои таблицы базы данных MySQL?

0

Мой сайт позволяет людям создавать викторины. Каждая опрос содержит до 20 вопросов, и каждый вопрос содержит до 5 ответов. У меня есть таблица базы данных для опросов, вопросов и ответов. Это означает, что одна опрос может иметь 121 строку. Есть ли лучший способ справиться с этим, например, отвечать на вопросы в отдельной колонке в таблице вопросов?

  • 0
    Можете ли вы поделиться схемой таблицы? Я не уверен, как вы получаете 131 строку за один тест, так как 20 * 5 - это всего 100, и из вашего поста не ясно, как настроена БД.
  • 0
    «Есть ли лучший способ справиться с этим, например, получить ответы на вопросы в отдельной колонке таблицы вопросов?» -> Вы не хотите конвертировать строки в столбцы, поверьте мне, позже у вас возникнут проблемы.
Показать ещё 6 комментариев
Теги:
database

1 ответ

1
Лучший ответ

Использование механизма 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)
);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню