Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

coluna json vs várias colunas


Resposta curta, várias colunas.

Resposta longa:

Pelo amor de tudo o que é sagrado no mundo, não armazene vários conjuntos de dados em uma única coluna de texto

Estou assumindo que você terá uma mesa que será
+------------------------------+      +----------------------+
| User |  cell | office | home |  OR  | User | JSON String   |
+------------------------------+      +----------------------+

Primeiro, direi que ambas as soluções não são a melhor solução, mas se você escolher uma das duas, a primeira é a melhor. Existem algumas razões, principalmente, embora a capacidade de modificar e consultar especificamente seja realmente importante. Pense no algrothim para modificar a segunda opção.
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 solução totaliza 2 consultas e um algoritmo de busca e substituição. Nada de bom!

Agora pense na primeira solução.
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` = ?

Isso é claramente melhor, mas não é o melhor

Existe uma terceira solução Digamos que você queira que um usuário possa inserir um número infinito de números de telefone.

Vamos usar uma tabela de relações para isso, então agora você tem duas tabelas.
              +-------------------------------------+
+---------+   |      Phone                          | 
| Users   |   +-------------------------------------+ 
+---------+   | user_name| phone_number | type      |
| U_name  |   +-------------------------------------+
+---------+

Agora você pode consultar todos os números de telefone de um usuário com algo assim

Agora você pode consultar a tabela por meio de uma junção

SELECT usuários., telefone. FROM Phone, Users WHERE phone.user_name =? E Usuários.U_name =?

As inserções são igualmente fáceis e a verificação de tipo também.

Lembre-se de que este é um exemplo simples, mas o SQL realmente fornece muito poder à sua estrutura de dados, você deve usá-lo em vez de evitá-lo