sql >> Databáze >  >> RDS >> Mysql

json sloupec vs více sloupců

Krátká odpověď, více sloupců.

Dlouhá odpověď:

Z lásky ke všemu, co je na světě svaté, prosím neukládejte více souborů dat do jednoho textového sloupce

Předpokládám, že budete mít stůl, který bude buď

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

Nejprve řeknu, že obě tato řešení nejsou nejlepším řešením, ale pokud byste si měli vybrat z těchto dvou, první je nejlepší. Existuje několik důvodů, především i když schopnost konkrétně upravovat a dotazovat je opravdu důležitá. Přemýšlejte o algrothimu, abyste upravili druhou možnost.

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

Toto řešení zahrnuje celkem 2 dotazy a algoritmus vyhledávání a nahrazování. Není to dobré!

Nyní přemýšlejte o prvním řešení.

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

To je jednoznačně lepší, ale není to nejlepší

Existuje třetí řešení Řekněme, že chcete, aby uživatel mohl vkládat nekonečné množství telefonních čísel.

Použijme k tomu relační tabulku, takže nyní máte dvě tabulky.

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

Nyní se můžete dotázat na všechna telefonní čísla uživatele pomocí něčeho podobného

Nyní můžete dotazovat tabulku pomocí spojení

SELECT Users., telefon. FROM Phone, Users WHERE phone.user_name =? AND Users.U_name =?

Vložky jsou stejně snadné a kontrola typu je také snadná.

Pamatujte si, že toto je jednoduchý příklad, ale SQL skutečně poskytuje vaší datové struktuře spoustu výkonu, měli byste ho raději používat, než se mu vyhýbat



  1. Náhodný vážený výběr události

  2. DBMS_JOB vs DBMS_SCHEDULER

  3. Správný způsob uložení časového pásma v databázi?

  4. CAST na DECIMAL v MySQL