Ho un sito Web ASP.NET MVC. Nel mio backend ho una tabella chiamata People
con le seguenti colonne:qual è il modo migliore per memorizzare parametri di query filtrati dall'utente in una tabella di database?
- ID
- Nome
- Età
- Località
- ... (un certo numero di altri cols)
Ho una pagina Web generica che utilizza l'associazione modello per interrogare questi dati. Qui è la mia azione di controllo:
public ActionResult GetData(FilterParams filterParams)
{
return View(_dataAccess.Retrieve(filterParams.Name, filterParams.Age, filterParams.location, . . .)
}
che mappa su qualcosa di simile:
http://www.mysite.com/MyController/GetData?Name=Bill .. .
Lo strato dataAccess controlla semplicemente ogni parametro per vedere se popolata da aggiungere alla db dove clausola. Funziona alla grande
Ora desidero essere in grado di memorizzare le query filtrate di un utente e sto cercando di capire il modo migliore per memorizzare un filtro specifico. Poiché alcuni filtri hanno solo un parametro nella queryString mentre altri hanno 10+ campi nel filtro, non riesco a capire il modo più elegante di archiviare questa query "informazioni sui filtri" nel mio database.
Opzioni mi vengono in mente sono:
Avere una replica completa della tabella (con alcune cols in più), ma chiamarlo PeopleFilterQueries e compilare in ogni record un FilterName e mettere il valore del filtro nella ciascuno di campo (Nome, ecc.)
Memorizza una tabella con solo FilterName e una stringa in cui memorizzo l'effettiva querystring Nome = Bill & Location = NewYork. In questo modo non dovrò continuare ad aggiungere nuove colonne se i filtri cambiano o aumentano.
Qual è la migliore pratica per questa situazione?
Qual è lo scopo del filtro * dati *? Non * raccomanderei * di archiviare la "stringa di query effettiva" ma, ** se e solo se si tratta di un tipo di dati opaco ** (sul modello), allora memorizzerei un valore codificato che si associa bene a un oggetto dominio (e supporta serializzazione banale). Se è un tipo opaco - o meno - dipende dalle tue esigenze. –
Hai mai bisogno di interrogare questi dati? La risposta a ciò ti guiderà a utilizzare la serializzazione o creare una tabella di query del filtro + tabella chiave/valore. – dotjoe
Qual è il motivo per archiviarlo nel database? è per la segnalazione? Trending? Ricordando gli ultimi filtri? Con quale frequenza verranno utilizzate queste informazioni sul filtro? – ivowiblo