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

¿Qué tipo de columna se debe usar para almacenar datos serializados en una base de datos mysql?

Para responder:parece que el texto está en desuso en muchos DBMS, así que mejor use un blob o un varchar con un límite alto (y con blob no tendrá ningún problema de codificación, lo cual es una gran molestia con varchar y texto) .

También como se indica en este hilo en los foros de MySQL , los discos duros son más baratos que el software, por lo que es mejor que primero diseñe su software y lo haga funcionar, y solo entonces, si el espacio se convierte en un problema, es posible que desee optimizar ese aspecto. Por lo tanto, no intente sobreoptimizar el tamaño de su columna demasiado pronto, mejor configure el tamaño más grande al principio (además, esto evitará problemas de seguridad).

Acerca de los diversos comentarios:Demasiado fanatismo de SQL aquí. A pesar de que soy muy aficionado a SQL y los modelos relacionales, también tienen sus inconvenientes.

El almacenamiento de datos serializados en la base de datos tal cual (como el almacenamiento de datos con formato JSON o XML) tiene algunas ventajas:

  • Puede tener un formato más flexible para sus datos:agregar y eliminar campos sobre la marcha, cambiar la especificación de los campos sobre la marcha, etc...
  • Menor desajuste de impedancia con el modelo de objeto:usted almacena y obtiene los datos tal como están en su programa, en comparación con obtener los datos y luego tener que procesarlos y convertirlos entre las estructuras de los objetos de su programa y las estructuras de su base de datos relacional .

Y hay muchas más otras ventajas, así que por favor, no fanboys:las bases de datos relacionales son una gran herramienta, pero no discutamos las otras herramientas que podemos obtener. Cuantas más herramientas, mejor.

En cuanto a un ejemplo concreto de uso, tiendo a agregar un campo JSON en mi base de datos para almacenar parámetros adicionales de un registro donde las columnas (propiedades) de los datos JSON nunca se SELECCIONARÁN individualmente, sino que solo se usarán cuando el registro correcto ya está seleccionado. En este caso, todavía puedo discriminar mis registros con las columnas relacionales, y cuando se selecciona el registro correcto, puedo usar los parámetros adicionales para cualquier propósito que desee.

Entonces, mi consejo para conservar lo mejor de ambos mundos (velocidad, serialización y flexibilidad estructural), solo use algunas columnas relacionales estándar para que sirvan como claves únicas para discriminar entre sus filas, y luego use una columna blob/varchar donde sus datos serializados ser insertado. Por lo general, solo se requieren dos o tres columnas para una clave única, por lo que esto no será una sobrecarga importante.

Además, es posible que le interese PostgreSQL, que ahora tiene un tipo de datos JSON, y el proyecto PostSQL para procesar directamente campos JSON como columnas relacionales.