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

Existuje nějaká výhoda/nevýhoda ukládání hodnoty pole jako pole JSON namísto vytváření nové tabulky a vzájemného vztahu jeden k mnoha?

Podle mých zkušeností to do značné míry závisí na datech, která jsou uložena. Oba způsoby mají výhody i nevýhody. Pokud se jedná o MMORPG webgame a poté řekněte, že máte PC která má pásek. A PC může do opasku vložit lektvary pro rychlý přístup během bitvy. Takže chceme uložit ID lektvarů, které jsou uloženy v opasku postavy.

Nejčastějším požadavkem by bylo „získej všechny lektvary, které má postava X“. A to by v obou případech běželo docela rychle.

Výhody uložení těchto lektvarů jako samostatné tabulky:

  • Můžete vyhledat konkrétní ID lektvaru a je to velmi rychlé. Příklad ve hře:administrátoři odstranili ze hry nějaký lektvar, a proto musíte všem aktualizovat opasky
  • Můžete získat pěkné statistiky. Příklad ve hře:hledejte nejpoužívanější lektvar mezi všemi hráči
  • Databáze zachová integritu dat. Příklad ve hře:nikdy se nesetkáte se situací, kdy byste použili lektvar a hra vám řekla „Jejda, lektvar s tímto ID neexistuje“
  • Je to dobré pro konzistenci. Příklad ve hře:vzali jste lektvar z opasku a vložili ho do batohu. Hra to může implementovat voláním transakce pomocí dvou jednoduchých jasných příkazů SQL.
  • Můžete se připojit. Příklad ve hře:potřebujeme získat seznam lektvarů v opasku spolu s jejich názvy, hmotností a obrázky, které jsou uloženy v samostatné tabulce.
  • Můžete aktualizovat jednu položku, aniž byste museli aktualizovat celý pás. Příklad vynucený ve hře:v opasku máte milion lektvarů a jeden jste vypili.

Výhody ukládání jako json:

  • Pokud se jedná o prohlížečovou hru, která na straně klienta používá javascript, pak objekt Belt json získáte jediným jednoduchým požadavkem namísto provádění Select-query a následného převodu na json
  • Je mnohem jednodušší udržovat pořadí položek, protože pole json jsou již seřazena. S tabulkovým přístupem byste potřebovali další sloupec nazvaný "objednávka" a pokaždé jej aktualizovali a zkontrolovali, zda dvě položky nemají stejnou objednávku atd.
  • Můžete provést řadu změn v pásu na straně klienta, poté klikněte na „Použít“ – bum, jedním dotazem můžete aktualizovat celý pás. Zatímco s tabulkovým přístupem byste k tomu potřebovali alespoň dva dotazy (DELETE + INSERT)
  • kromě toho mají populární DBMS pluginy které podporují funkce json v databázi

Sečteno a podtrženo:ty nejsou hlavní výhody a nikoli kritické problémy. Všechny jsou řešitelné a při správném návrhu aplikace budou obě řešení fungovat dobře. Než se rozhodnete, jak data uložit, zeptejte se sami sebe, jaké jsou nejčastější případy použití těchto dat, a poté si vyberte řešení.



  1. AKTUALIZACE MYSQL pomocí IN a poddotazu

  2. Mysql + počítat všechna slova ve sloupci

  3. Počet sloupců neodpovídá počtu hodnot na řádku 1 JAVA mysql

  4. Změna formátu zobrazení pole data a času v MySQL PHP