¿Hay una mejor manera de manejar mis tablas de base de datos MySQL?

¿Hay una mejor manera de manejar mis tablas de base de datos MySQL?

Mi sitio web permite a las personas crear cuestionarios. Cada prueba contiene hasta 20 preguntas y cada pregunta contiene hasta 5 respuestas. Tengo una tabla de base de datos para cuestionarios, preguntas y respuestas. Esto significa que un cuestionario puede tener 121 filas. ¿Hay una mejor manera de manejar esto, como tener las respuestas del cuestionario en una columna separada en la tabla de preguntas?

Mostrar la mejor respuesta

¿Puedes compartir tu esquema de tabla? No estoy seguro de cómo obtiene 131 filas por una sola prueba, ya que 20 * 5 es solo 100, y no está claro en su publicación cómo está configurado el db.

"¿Hay una mejor manera de manejar esto, como tener las respuestas del cuestionario en una columna separada en la tabla de preguntas?" -> No desea convertir las filas en columnas, créame, tendrá problemas más adelante.

Como regla general básica: si A puede tener más de una B, entonces A y B deben ser tablas separadas. Su recuento de filas corregido indica que lo está manejando adecuadamente.

@citrusy está contando 100 filas de respuestas + 20 filas de preguntas + 1 fila de prueba.

Debe tener 3 tablas: quizzes, questions y answers. questions tiene una clave externa a quizzes, answers tiene una clave externa a questions.

Lea un tutorial sobre la normalización de bases de datos.

Gracias por los comentarios chicos. Hice esta pregunta porque estoy pensando qué pasa si tengo 10000 cuestionarios, de repente son 1 millón de filas y es posible que tenga problemas de rendimiento. Mientras lo que tengo sea la opción más efectiva, está bien.

La normalización ayuda con el rendimiento, así como con el aprendizaje de buenas prácticas generales de diseño de bases de datos. Recomiendo encarecidamente seguir el consejo de @Barmar.

Utilizando el motor InnoDB predeterminado: una fila agrega una sobrecarga de algo así como 20 bytes. Son alrededor de 20 MB para un millón de filas, que no es prácticamente nada para el hardware moderno, si está bien organizado e indexado. Debería estar bien incluso si usa un teléfono inteligente como servidor.

Sin embargo, debe usar al menos una tabla por entidad. Los cuestionarios, las preguntas y las respuestas son entidades diferentes, por lo que debe tener al menos tres tablas, que están vinculadas por claves foráneas.

Este es un ejemplo de un esquema normalizado:

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)
);