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

Er der nogen fordel/ulempe ved at gemme feltværdi som et JSON-array i stedet for at skabe en ny tabel og en-til-mange-relation ved at satse dem?

Efter min erfaring afhænger det ret meget af de data, der er gemt. Begge måder har fordele og ulemper. Hvis det er en MMORPG webgame, så sig, at du har en pc der har et bælte. Og pc'en kan putte eliksirer i bæltet for hurtig adgang under en kamp. Så vi vil gemme id'erne for de eliksirer, der er gemt i karakterens bælte.

Den mest almindelige anmodning ville være "få alle potions, som karakteren X har". Og det ville køre ret hurtigt i begge tilfælde.

Fordelene ved at gemme disse potion-id'er som en separat tabel:

  • Du er i stand til at søge efter et specifikt potion-id, og det er meget hurtigt. Eksempel i spillet:administratorer har fjernet en potion fra spillet, og derfor skal du opdatere alles bælter
  • Du kan få nogle gode statistikker. Eksempel i spillet:kig efter den mest brugte drik blandt alle spillere
  • Databasen vil bevare dataintegriteten. Eksempel i spillet:du vil aldrig støde på en situation, når du brugte eliksiren, og spillet siger "Ups, en mikstur med det id findes ikke"
  • Det er godt for konsistensen. Eksempel i spillet:du tog en drik fra bæltet og puttede den i rygsækken. Spillet kan implementere det ved at kalde en transaktion med to enkle klare SQL-sætninger.
  • Du kan gøre JOINs. Eksempel i spillet:Vi skal have en liste over eliksirer i bæltet sammen med deres navne, vægte og billeder, som er gemt i den separate tabel.
  • Du kan opdatere et enkelt element uden at skulle opdatere hele bæltet. In-game-forced-eksempel:du har en million potions i dit bælte, og du drak en.

Fordelene ved at gemme som en json:

  • Hvis det er et browserspil, der bruger javascript på klientsiden, får du Belt json-objektet med en simpel anmodning i stedet for at lave Select-query og derefter konvertere til json
  • Det er meget nemmere at vedligeholde rækkefølgen af ​​elementer, da json-arrays allerede er bestilt. Med tabelmetoden skal du bruge en ekstra kolonne kaldet "ordre" og opdatere den hver gang og kontrollere, om to varer ikke har den samme ordre osv.
  • Du kan lave en masse omarrangering i bæltet på klientsiden og derefter klikke på "Anvend" — boom, med én forespørgsel kan du opdatere hele bæltet. Mens du med tabelmetoden ville have brug for mindst to forespørgsler til det (DELETE + INSERT)
  • desuden har populære DBMS plugins der understøtter json-funktioner i databasen

Nederste linje:de er ikke større fordele og ikke kritiske problemer. Alle af dem er løselige og med et korrekt design af applikationen vil begge løsninger fungere ok. Inden du beslutter dig for, hvordan du gemmer dataene, skal du spørge dig selv, hvad der er de mest almindelige anvendelsesmuligheder for disse data, og derefter vælge løsningen.



  1. Brug LIMIT til at paginere resultater i MySQL-forespørgsel

  2. venstre join med betingelse for højre tabel i mysql

  3. Hvordan får jeg tid fra DateTime-format i SQL?

  4. Indeks (nulbaseret) skal være større end eller lig med nul