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

C'è qualche vantaggio/svantaggio nel memorizzare il valore del campo come un array JSON piuttosto che creare una nuova tabella e una relazione uno-a-molti scommetterli?

Nella mia esperienza, ciò dipende praticamente dai dati che vengono archiviati. Entrambi i modi hanno vantaggi e svantaggi. Se è un MMORPG webgame quindi dì che hai un PC che ha una cintura. E il PG può mettere pozioni in quella cintura per un rapido accesso durante una battaglia. Quindi vogliamo salvare gli ID delle pozioni, che sono immagazzinate nella cintura del personaggio.

La richiesta più comune sarebbe "prendi tutte le pozioni che ha il personaggio X". E questo sarebbe abbastanza veloce in entrambi i casi.

I vantaggi di memorizzare questi ID-pozione come una tabella separata:

  • Puoi cercare un ID pozione specifico ed è molto veloce. Esempio di gioco:gli amministratori hanno rimosso alcune pozioni dal gioco e quindi è necessario aggiornare le cinture di tutti
  • Puoi ottenere delle belle statistiche. Esempio di gioco:cerca la pozione più usata tra tutti i giocatori
  • Il database manterrà l'integrità dei dati. Esempio di gioco:non incontrerai mai una situazione in cui hai usato la pozione e il gioco dice "Oops, una pozione con quell'ID non esiste"
  • Fa bene alla coerenza. Esempio di gioco:hai preso una pozione dalla cintura e l'hai messa nello zaino. Il gioco può implementarlo chiamando una transazione con due semplici istruzioni SQL chiare.
  • Puoi fare JOIN. Esempio di gioco:dobbiamo ottenere un elenco di pozioni nella cintura insieme ai loro nomi, pesi e immagini che sono archiviati in una tabella separata.
  • Puoi aggiornare un singolo articolo, senza dover aggiornare l'intera cintura. Esempio di gioco forzato:hai un milione di pozioni nella cintura e ne hai bevuta una.

I vantaggi dell'archiviazione come json:

  • Se si tratta di un browser game che utilizza javascript sul lato client, ottieni l'oggetto Belt json con una semplice richiesta invece di eseguire Select-query e quindi convertire in json
  • È molto più semplice mantenere l'ordine degli elementi, poiché gli array json sono già ordinati. Con l'approccio alla tabella avresti bisogno di una colonna aggiuntiva chiamata "ordine" e aggiornarla ogni volta e controllare se due articoli non hanno lo stesso ordine ecc.
  • Puoi fare una serie di riorganizzazioni nella cintura sul lato client, quindi fare clic su "Applica" — boom, con una query puoi aggiornare l'intera cintura. Considerando che con l'approccio alla tabella avresti bisogno di almeno due query per quello (DELETE + INSERT)
  • inoltre, i popolari DBMS hanno plugin che supportano le funzioni json nel database

In conclusione:quelli non sono principali vantaggi e non critici i problemi. Sono tutti risolvibili e con un'adeguata progettazione dell'applicazione entrambe le soluzioni funzioneranno bene. Prima di decidere come archiviare i dati, chiediti quali sono i casi d'uso più comuni per questi dati e scegli la soluzione in seguito.