Mam witrynę ASP.NET MVC. W moim backend Mam tabeli o nazwie People
z następującymi kolumnami:jaki jest najlepszy sposób przechowywania paramerów zapytań filtrowanych przez użytkownika w tabeli bazy danych?
- ID
- Nazwa
- Wiek
- Położenie
- ... (szereg innych przełęcze)
Mam ogólną stronę internetową, która używa wiązania modelu do kwerendy tych danych. Oto moje działania kontrolera:
public ActionResult GetData(FilterParams filterParams)
{
return View(_dataAccess.Retrieve(filterParams.Name, filterParams.Age, filterParams.location, . . .)
}
który odwzorowuje się na coś takiego:
http://www.mysite.com/MyController/GetData?Name=Bill .. .
Warstwa DataAccess prostu sprawdza każdy parametr, aby sprawdzić, czy jego zaludnionych dodać do db gdzie klauzuli. Działa to świetnie.
Chcę teraz móc przechowywać przefiltrowane przez użytkownika zapytania i próbuję znaleźć najlepszy sposób na zapisanie określonego filtru. Ponieważ niektóre filtry mają tylko jeden parametr w queryString, podczas gdy inne mają ponad 10 pól w filtrze, nie mogę wymyślić najbardziej eleganckiego sposobu przechowywania tego zapytania "informacje o filtrze" w mojej bazie danych.
Opcje mogę myśleć to:
mieć pełną kopią tabeli (z pewnymi dodatkowymi przełęcze), ale nazywają go PeopleFilterQueries i wypełnić w każdym rekordzie FILTERNAME i umieścić wartość filtra w każde pole (nazwa, itp.)
Przechowywać tabelę z właśnie FilterName i ciągiem, w którym przechowuję rzeczywistą nazwę zapytania = Bill & Location = NewYork. W ten sposób nie będę musiał dodawać nowych kolumn, jeśli filtry będą się zmieniać lub rozwijać.
Jaka jest najlepsza praktyka w tej sytuacji?
Jaki jest cel filtra * dane *? Nie polecałbym * przechowywania "rzeczywistego ciągu zapytania", ale ** jeśli i tylko wtedy, gdy jest to nieprzejrzysty typ danych ** (w modelu), wówczas zapisałbym zakodowaną wartość ładnie odwzorowującą obiekt domeny (i obsługuje trywialną serializację). Jeśli jest to rodzaj nieprzezroczysty - lub nie - zależy od Twoich wymagań. –
Czy kiedykolwiek potrzebujesz zapytać o te dane? Odpowiedź na to poprowadzi Cię do korzystania z serializacji lub utworzenia tabeli zapytań filtru + tabela klucz/wartość. – dotjoe
Jaki jest powód przechowywania go w bazie danych? jest na raportowanie? Trend? Pamiętasz ostatnie filtry? Jak często będą używane te informacje o filtrze? – ivowiblo