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.