MySQL - Como organizar mi tabla

 
Vista:
Imágen de perfil de Manuel
Val: 6
Ha aumentado su posición en 3 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

Como organizar mi tabla

Publicado por Manuel (3 intervenciones) el 12/03/2020 18:19:18
Hola quiero crear un sistema de preguntas pero tengo una duda pues no se si crear 3 tablas en quedarían así:
- Categoría de la pregunta
- Pregunta
- Respuestas

La idea es que se cree un tipo de pregunta y esta se asocia a la pregunta y así mismo las respuestas se asocien con un id a la pregunta correspondiente pero no se si sea funcional pues al momento de hacer la búsqueda creo que se irán muchos recursos mientras el sistema busca la pregunta y después las respuestas de la pregunta?

o la otra forma era tener:
- Categoría de la pregunta
- pregunta

En este simplemente crearía una columna llamada respuestas y en esta columna guardaría un array de las 4 respuestas y otra columna llamada valor_respuestas en donde también guardaría otro array y al leer ambos les daría de acuerdo al lugar de ambos array el valor a la respuesta,

también estaba pensando en la misma estructura de la segunda opción:
- Categoría de la pregunta
- pregunta

Pero en esta ocasión crearía las 4 columnas donde en cada columna iría cada pregunta pero me tocaría también crear 4 columnas para el valor de las respuestas pues creo es mas trabajoso para trabajarlo de esta manera al tener tantas columnas en un solo campo, igual gracias a quien me pueda ayudar.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Como organizar mi tabla

Publicado por anonymous (59 intervenciones) el 13/03/2020 01:28:52
Pues lo ideal es que se respete la normalización y las estructuras queden diseñadas acorde a ello, debe haber una estructura de categorías y por supuesto la estructura de preguntas se roba ese Categoria_Id como foránea, mientras que las respuestas se roban a su vez la foránea de la Pregunta_Id.

Ahora bien, la otra alternativa que planteas de manejar todo en una misma estructura, también es "válido" hasta cierto punto, en ciertos escenarios muy particulares, donde el volumen de las tablas a relacionar en un join es muy alto, y por ende el join se vuelve muy costoso en términos de rendimiento, entonces se toma la decisión de replicar ciertas columnas de otra tabla, para evitar estar yendo a la otra tabla, a traer información que siempre se requiere ver, evitando con ello ralentizar los sistemas, pero reitero eso se hace en escenarios muy particulares que amerite hacerlo así, porque igual no deja de ser una muy mala práctica, que desde luego viola las reglas de normalización, en las bases de datos.

Recomiendo hacer pruebas con cronómetro en mano, y comparar si los join que haya que ejecutar, para ir a buscar las respuestas, tardan tanto como para decidir hacerlo todo en una sola estructura.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Manuel
Val: 6
Ha aumentado su posición en 3 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

Como organizar mi tabla

Publicado por Manuel (3 intervenciones) el 13/03/2020 17:39:28
Gracias por tu comentario.

Estuve ensayando y en este caso es mejor dejar la segunda opción donde guardo el array en la BD pues como mencionas se trabajaran muchas preguntas y creo que el sistema se saturara pues de las casi 100 (o más) preguntas que hay en la BD a cada usuario le saldrán en "aleatorio" 10 diferentes para así evitar el plagio de los usuarios aunque siempre se sabe que van a hacer de las suyas para poder hacer plagio xD, igual mirando y analizando bien se opto por como te comento por el array por la facilidad de manipularlo en la misma consulta al traer todo lo relacionado de la pregunta, gracias de nuevo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar