Mysql
 sql >> Base de données >  >> RDS >> Mysql

colonne json vs plusieurs colonnes

Réponse courte, plusieurs colonnes.

Réponse longue :

Pour l'amour de tout ce qui est sacré dans le monde, veuillez ne pas stocker plusieurs ensembles de données dans une seule colonne de texte

Je suppose que vous aurez une table qui sera soit

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

Tout d'abord, je dirai que ces deux solutions ne sont pas la meilleure solution, mais si vous deviez choisir parmi les deux, la première est la meilleure. Il y a plusieurs raisons, principalement si la capacité de modifier et d'interroger spécifiquement est vraiment importante. Pensez aux algrothim pour modifier la deuxième option.

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

Cette solution totalise 2 requêtes et un algorithme de recherche et remplacement. Pas bon !

Pensez maintenant à la première solution.

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` = ?

C'est clairement mieux mais ce n'est pas mieux

Il existe une troisième solution Supposons que vous souhaitiez qu'un utilisateur puisse insérer un nombre infini de numéros de téléphone.

Utilisons une table de relations pour cela, vous avez donc maintenant deux tables.

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

Vous pouvez maintenant interroger tous les numéros de téléphone d'un utilisateur avec quelque chose comme ça

Vous pouvez maintenant interroger la table via une jointure

SELECT Utilisateurs., téléphone. FROM Téléphone, Utilisateurs WHERE phone.user_name =? ET Utilisateurs.U_name =?

Les insertions sont tout aussi simples et la vérification des types l'est également.

N'oubliez pas qu'il s'agit d'un exemple simple, mais SQL fournit vraiment une tonne de puissance à votre structure de données, vous devriez l'utiliser plutôt que de l'éviter