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

columna json vs múltiples columnas

Respuesta corta, varias columnas.

Respuesta larga:

Por amor a todo lo que es sagrado en el mundo, no almacene varios conjuntos de datos en una sola columna de texto

Supongo que tendrá una mesa que será

+------------------------------+      +----------------------+
| User |  cell | office | home |  OR  | User | JSON String   |
+------------------------------+      +----------------------+

Primero diré que estas dos soluciones no son la mejor solución, pero si tuviera que elegir entre las dos, la primera es la mejor. Hay un par de razones principalmente, aunque la capacidad de modificar y consultar específicamente es realmente importante. Piensa en el algoritmo para modificar la segunda opción.

SELECT `JSON` FROM `table` WHERE `User` = ?

Then you have to do a search and replace in either your server side or client side language

Finally you have to reinsert the JSON string

Esta solución totaliza 2 consultas y un algoritmo de búsqueda y reemplazo. ¡No es bueno!

Ahora piensa en la primera solución.

SELECT * FROM `table` WHERE `User` = ?

Then you can do a simple JSON encode to send it down

To modify you only need one Query.

UPDATE `table` SET `cell` = ? WHERE `User` = ?

to update more than one its again a simple single query 

UPDATE `table` SET `cell` = ?, `home` = ? WHERE `User` = ?

Esto es claramente mejor pero no es lo mejor

Hay una tercera solución. Supongamos que desea que un usuario pueda insertar una cantidad infinita de números de teléfono.

Usemos una tabla de relaciones para eso, así que ahora tienes dos tablas.

              +-------------------------------------+
+---------+   |      Phone                          | 
| Users   |   +-------------------------------------+ 
+---------+   | user_name| phone_number | type      |
| U_name  |   +-------------------------------------+
+---------+

Ahora puedes consultar todos los números de teléfono de un usuario con algo como esto

Ahora puede consultar la tabla a través de una combinación

SELECCIONA Usuarios., teléfono. DESDE Teléfono, Usuarios DONDE phone.user_name =? Y Usuarios.U_name =?

Las inserciones son igual de sencillas y la verificación de tipos también lo es.

Recuerde que este es un ejemplo simple, pero SQL realmente proporciona un montón de poder a su estructura de datos, debe usarlo en lugar de evitarlo