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

Memorizzazione di dati strutturati in una colonna del database?

Parlando molto personalmente, i sondaggi sono un caso in cui penso di non normalizzare nulla e di archiviare JSON praticamente com'è è l'opzione migliore.

Senza di esso, ti ritroverai con tutti i tipi di casi d'uso bizzarri che alla fine vorrai gestire lungo la strada. Oltre a riordinare domande a scelta multipla di ogni tipo, dovrai anche gestire la risposta "Altro" in esse, domande condizionali, gruppi di domande condizionali, l'elenco potrebbe continuare all'infinito. Inoltre, i sondaggi sono, come altre forme di dati, soggetti a modifiche e quando lo fanno le cose passano da goffi a nucleari.

Il merito di JSON è che, poiché i sondaggi sono concettualmente indipendenti l'uno dall'altro, hai poca o nessuna necessità di integrità referenziale da uno all'altro, quindi potresti anche archiviare l'intero albero di domande e opzioni come un blob JSON, e preoccupati di formattarlo nella tua app.

Lo stesso per ogni risposta inviata, del resto:prendi il blob originale, contrassegna la risposta pertinente come selezionata e così via e archivia il JSON risultante com'è , piuttosto che memorizzare i riferimenti alle domande originali insieme a ciò che è stato risposto. Ciò ti consentirà di tenere prontamente traccia di ciò che gli utenti effettivamente ha risposto, al contrario di qualunque cosa dice la versione attuale del sondaggio, e lo fa indipendentemente da quanto il sondaggio è divergente da quando è stato originariamente risposto.

Se hai bisogno di estrarre le risposte in un secondo momento, nota che Postgres consente di indicizzare JSON utilizzando gli indici GIST sull'intero campo e gli indici BTREE sulle espressioni.