Razem ze współpracownikami wdaliśmy się w debatę na temat najlepszego sposobu przechowywania danych historycznych. Obecnie w niektórych systemach używam oddzielnej tabeli do przechowywania danych historycznych i zachowuję oryginalną tabelę dla bieżącego, aktywnego rekordu. Powiedzmy, że mam FOO tabeli. W moim systemie wszystkie aktywne rekordy trafią do FOO, a wszystkie historyczne rekordy do FOO_Hist. Użytkownik może aktualizować wiele różnych pól w FOO, więc chcę mieć dokładne konto wszystkich aktualizowanych. FOO_Hist przechowuje dokładnie te same pola, co FOO, z wyjątkiem automatycznego zwiększania wartości HIST_ID. Za każdym razem FOO jest aktualizowana, ja wykonać instrukcji INSERT INTO FOO_Hist podobny do: insert into FOO_HIST select * from FOO where id = @id
.
Mój współpracownik mówi, że to zły projekt, ponieważ nie powinienem mieć dokładnej kopii tabeli z powodów historycznych i powinienem po prostu wstawić kolejny rekord do aktywnej tabeli z flagą wskazującą, że jest to do celów historycznych.
Czy istnieje standard postępowania z przechowywaniem danych historycznych? Wydaje mi się, że nie chcę zaśmiecać moich aktywnych rekordów wszystkimi moimi historycznymi rekordami w tej samej tabeli, biorąc pod uwagę, że może to być znacznie ponad milion rekordów (myślę długoterminowo).
Jak Ty lub Twoja firma radzicie sobie z tym?
Używam MS SQL Server 2008, ale chciałbym, aby odpowiedź była ogólna i arbitralna dla każdego DBMS.