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

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

Можете ли вы поделиться схемой своей таблицы? Я не уверен, как вы получаете 131 строку за одну викторину, поскольку 20 * 5 - это всего лишь 100, и из вашего сообщения не ясно, как настраивается db.

citrusy 04.04.2018 20:14

«Есть ли лучший способ справиться с этим, например, поместить ответы на вопросы в отдельном столбце в таблице вопросов?» -> Вы не хотите скрывать строки в столбцах, поверьте мне, у вас возникнут проблемы позже.

Raymond Nijland 04.04.2018 20:18

В качестве основного общего правила: если A может иметь более одного B, тогда A и B должны быть отдельными таблицами. Исправленное количество строк указывает на то, что вы обрабатываете его правильно.

Uueerdo 04.04.2018 20:21

@citrusy насчитывает 100 строк ответов + 20 строк вопросов + 1 строку викторины.

Uueerdo 04.04.2018 20:22

У вас должно быть 3 таблицы: quizzes, questions и answers. questions имеет внешний ключ для quizzes, answers имеет внешний ключ для questions.

Barmar 04.04.2018 20:24

Прочтите руководство по нормализации базы данных.

Barmar 04.04.2018 20:25

Спасибо за отзывы ребята. Я задал этот вопрос, поскольку думаю, что, если у меня есть 10000 тестов, внезапно это 1 миллион строк, и я могу столкнуться с проблемами производительности. Пока то, что у меня есть, является наиболее эффективным вариантом, это нормально.

Dppal 04.04.2018 20:29

Нормализация помогает повысить производительность, а также изучить общие передовые методы проектирования баз данных. Я настоятельно рекомендую прислушаться к совету @Barmar.

citrusy 04.04.2018 20:34
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
8
37
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)
);

Другие вопросы по теме