Mysql
 sql >> Database >  >> RDS >> Mysql

colonna json rispetto a più colonne

Risposta breve, più colonne.

Risposta lunga:

Per l'amore di tutto ciò che è sacro nel mondo, per favore non memorizzare più set di dati in una singola colonna di testo

Presumo che avrai una tabella che sarà o

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

Innanzitutto dirò che entrambe queste soluzioni non sono la soluzione migliore, ma se dovessi scegliere la tra le due la prima è la migliore. Ci sono un paio di ragioni principalmente se la capacità di modificare e interrogare in modo specifico è davvero importante. Pensa all'algrothim per modificare la seconda opzione.

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

Questa soluzione totalizza 2 query e un algoritmo di ricerca e sostituzione. Non va bene!

Ora pensa alla prima soluzione.

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

Questo è chiaramente meglio, ma non è il migliore

C'è una terza soluzione Supponiamo che tu voglia che un utente sia in grado di inserire un numero infinito di numeri di telefono.

Usiamo una tabella delle relazioni per questo, quindi ora hai due tabelle.

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

Ora puoi interrogare tutti i numeri di telefono di un utente con qualcosa del genere

Ora puoi interrogare la tabella tramite un join

SELEZIONA Utenti., telefono. DA Telefono, Utenti DOVE phone.user_name =? AND Utenti.U_name =?

Gli inserti sono altrettanto facili e anche il controllo del tipo è facile.

Ricorda che questo è un semplice esempio, ma SQL fornisce davvero un sacco di potenza alla tua struttura di dati, dovresti usarlo piuttosto che evitarlo