Jest to powszechny problem w projektowaniu baz danych:pytanie, czy oddzielić czy „zarchiwizować” rekordy, które nie są już „aktywne”.
Najczęstsze podejścia to:
- Wszystko w jednej tabeli, odpowiednio oznacz zamówienia jako „kompletne”. Plusy:Najprostsze rozwiązanie (zarówno pod względem kodu, jak i struktury), dobra elastyczność (np. łatwe do "wskrzeszenia" zamówień). Minusy:Tabele mogą być dość duże, co jest problemem zarówno dla zapytań, jak i np. kopie zapasowe.
- Zarchiwizuj stare rzeczy do osobnej tabeli. Rozwiązuje problemy z pierwszego podejścia, kosztem większej złożoności.
- Użyj tabeli z partycjonowaniem według wartości. Oznacza to, że logicznie (dla aplikacji) wszystko jest w jednej tabeli, ale za kulisami DBMS umieszcza rzeczy w oddzielnych obszarach w zależności od wartości w jakiejś kolumnie (kolumnach). Do partycjonowania prawdopodobnie użyjesz kolumny „zakończono” lub „data zakończenia zamówienia”.
Ostatnie podejście łączy dobre części dwóch pierwszych, ale wymaga wsparcia w DBMS i jest bardziej złożone w konfiguracji.
Uwaga:
Tabele przechowujące tylko „zarchiwizowane” dane są powszechnie nazywane „tabelami archiwalnymi”. Niektóre DBMS zapewniają nawet specjalne silniki przechowywania dla tych tabel (np. MySQL), które są zoptymalizowane pod kątem szybkiego wyszukiwania i dobrej wydajności przechowywania, kosztem powolnych zmian/wstawek.