Mysql
 sql >> Datenbank >  >> RDS >> Mysql

json-Spalte vs. mehrere Spalten

Kurze Antwort, mehrere Spalten.

Lange Antwort:

Aus Liebe zu allem, was in der Welt heilig ist, speichern Sie bitte nicht mehrere Datensätze in einer einzigen Textspalte

Ich gehe davon aus, dass Sie eine Tabelle haben werden, die entweder

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

Zuerst werde ich sagen, dass diese beiden Lösungen nicht die beste Lösung sind, aber wenn Sie die von den beiden auswählen würden, ist die erste die beste. Dafür gibt es ein paar Gründe, obwohl die Fähigkeit zum Modifizieren und Abfragen wirklich wichtig ist. Denken Sie an den Algorithmus, um die zweite Option zu ändern.

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

Diese Lösung umfasst insgesamt 2 Abfragen und einen Such- und Ersetzungsalgorithmus. Nicht gut!

Denken Sie nun über die erste Lösung nach.

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

Das ist eindeutig besser, aber nicht das Beste

Es gibt noch eine dritte Lösung Angenommen, Sie möchten, dass ein Benutzer eine unbegrenzte Anzahl von Telefonnummern einfügen kann.

Verwenden wir dafür eine Beziehungstabelle, also haben Sie jetzt zwei Tabellen.

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

Jetzt können Sie mit so etwas alle Telefonnummern eines Benutzers abfragen

Jetzt können Sie die Tabelle über einen Join abfragen

WÄHLEN Sie Benutzer., Telefon. FROM Telefon, Benutzer WO phone.user_name =? UND Users.U_name =?

Einfügungen sind genauso einfach und die Typprüfung ist ebenfalls einfach.

Denken Sie daran, dass dies ein einfaches Beispiel ist, aber SQL bietet Ihrer Datenstruktur wirklich eine Menge Leistung. Sie sollten es verwenden, anstatt es zu vermeiden