sql >> Base de Datos >  >> RDS >> Mysql

¿Almacenar datos estructurados en una columna de base de datos?

Hablando muy personalmente, las encuestas son un caso en el que creo que no normalizar nada y almacenar JSON prácticamente tal cual es la mejor opción.

Sin él, terminará con todo tipo de casos de uso extraños que eventualmente querrá administrar en el futuro. Además de ordenar las preguntas de opción múltiple de todo tipo, también deberá administrar esa respuesta "Otra" en ellas, preguntas condicionales, grupos condicionales de preguntas, la lista sigue y sigue. Lo que es más, las encuestas están, como otras formas de datos, sujetas a cambios, y las cosas van de espantosas a nucleares cuando lo hacen.

El mérito de JSON es que, dado que las encuestas son conceptualmente independientes entre sí, tiene poca o ninguna necesidad de integridad referencial de una a la siguiente, por lo que también podría almacenar todo el árbol de preguntas y opciones como un blob JSON, y preocúpate de formatearlo en tu aplicación.

Lo mismo para cada respuesta enviada, para el caso:tome el blob original, marque la respuesta relevante como seleccionada y así sucesivamente dentro de eso, y almacene el JSON resultante tal cual , en lugar de almacenar referencias a las preguntas originales junto con lo que se respondió. Esto le permitirá realizar un seguimiento de lo que los usuarios realmente respondido, a diferencia de lo que dice la versión actual de la encuesta, y hacer independientemente de cuánto haya divergido la encuesta desde que se respondió originalmente.

Si necesita extraer las respuestas más tarde, tenga en cuenta que Postgres permite indexar JSON usando índices GIST en todo el campo e índices BTREE en expresiones.