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

¿Hay alguna ventaja/desventaja de almacenar el valor del campo como una matriz JSON en lugar de crear una nueva tabla y apostar una relación de uno a muchos?

En mi experiencia, eso depende bastante de los datos que se almacenan. Ambas formas tienen ventajas y desventajas. Si es un MMORPG webgame luego diga que tiene una PC que tiene cinturón. Y el PJ puede poner pociones en ese cinturón para un acceso rápido durante una batalla. Así que queremos guardar las identificaciones de las pociones, que están almacenadas en el cinturón del personaje.

La petición más común sería "obtener todas las pociones que tiene el personaje X". Y eso correría bastante rápido en ambos casos.

Los beneficios de almacenar estos identificadores de pociones en una tabla separada:

  • Puedes buscar una identificación de poción específica y es muy rápido. Ejemplo en el juego:los administradores han eliminado algunas pociones del juego y, por lo tanto, debes actualizar los cinturones de todos
  • Puedes obtener buenas estadísticas. Ejemplo en el juego:busca la poción más utilizada entre todos los jugadores
  • La base de datos mantendrá la integridad de los datos. Ejemplo en el juego:nunca encontrarás una situación en la que hayas usado la poción y el juego diga "Vaya, no existe una poción con esa identificación"
  • Es bueno para la consistencia. Ejemplo en el juego:tomaste una poción del cinturón y la pusiste en la mochila. El juego puede implementarlo llamando a una transacción con dos instrucciones SQL simples y claras.
  • Puedes hacer JOIN. Ejemplo en el juego:necesitamos obtener una lista de pociones en el cinturón junto con sus nombres, pesos e imágenes que se almacenan en la tabla separada.
  • Puede actualizar un solo elemento, sin necesidad de actualizar todo el cinturón. Ejemplo forzado en el juego:tienes un millón de pociones en tu cinturón y te bebiste una.

Los beneficios de almacenar como json:

  • Si se trata de un juego de navegador que usa javascript en el lado del cliente, obtienes el objeto Belt json con una simple solicitud en lugar de hacer una consulta de selección y luego convertirlo a json
  • Es mucho más fácil mantener el orden de los elementos, ya que las matrices json ya están ordenadas. Con el enfoque de tabla, necesitaría una columna adicional llamada "orden" y actualizarla cada vez y verificar si dos elementos no tienen el mismo orden, etc.
  • Puedes hacer un montón de reorganización en el cinturón en el lado del cliente, luego hacer clic en "Aplicar" - boom, con una consulta puedes actualizar todo el cinturón. Mientras que con el enfoque de tabla necesitaría al menos dos consultas para eso (ELIMINAR + INSERTAR)
  • además, los DBMS populares tienen complementos que admiten funciones json en la base de datos

En pocas palabras:esos no son principales ventajas y no crítico problemas. Todos ellos son solucionables y con un diseño adecuado de la aplicación, ambas soluciones funcionarán bien. Antes de decidir cómo almacenar los datos, pregúntese cuáles son los casos de uso más comunes para estos datos y elija la solución después.