sql >> Database >  >> RDS >> Mysql

json-kolom versus meerdere kolommen

Kort antwoord, meerdere kolommen.

Lang antwoord:

Voor de liefde van alles wat heilig is in de wereld, sla alsjeblieft niet meerdere datasets op in een enkele tekstkolom

Ik neem aan dat je een tafel hebt die ofwel

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

Eerst zal ik zeggen dat beide oplossingen niet de beste oplossing zijn, maar als je een van de twee zou kiezen, is de eerste de beste. Er zijn een paar redenen, vooral hoewel de mogelijkheid om specifiek te wijzigen en op te vragen echt belangrijk is. Denk na over het algoritme om de tweede optie aan te passen.

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

Deze oplossing heeft in totaal 2 zoekopdrachten en een zoek- en vervangalgoritme. Niet goed!

Denk nu aan de eerste oplossing.

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

Dit is duidelijk beter, maar niet het beste

Er is een derde oplossing Stel dat u wilt dat een gebruiker een oneindig aantal telefoonnummers kan invoeren.

Laten we daarvoor een relatietabel gebruiken, dus nu heb je twee tabellen.

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

Nu kunt u alle telefoonnummers van een gebruiker opvragen met zoiets als dit

Nu kunt u de tabel opvragen via een join

SELECTEER gebruikers., telefoon. VAN Telefoon, gebruikers WAAR phone.user_name =? AND Users.U_name =?

Invoegen is net zo eenvoudig en typecontrole is ook eenvoudig.

Onthoud dat dit een eenvoudig voorbeeld is, maar SQL biedt echt heel veel kracht aan uw gegevensstructuur, u moet het gebruiken in plaats van het te vermijden



  1. Hoe gebruik je Regexp in MySQL Vervang commando's?

  2. Willekeurige rijen selecteren in MySQL

  3. Configuratie van MySQL 8

  4. Foutcode:2013. Verbinding met MySQL-server verbroken tijdens zoekopdracht