jak zapamiętywac historię w aplikacji

0

Hej

Chciałem się zapytać jaki jest najlepszy sposób na przechowywanie zmian w bazie.
Coś na zasadzie historii zmian.

Chodzi o to że chciałem mieć zapisane wszystkie zmiany zachodzące w systemie żeby później mieć do nich dostęp....(np znać liczbę ile razy użytkownik zmienił hasło)

Mam dwa pomysły:

  1. dla każdej tabeli tworzyć równoważne tabele z końcówką np Hist czyli będziemy mieli dwie tabele user i userHist. W przypadku zmiany na encji stara encja będzie eksportowana do hist a zamiast niej pojawi się nowa ze świerzymi wartościami.
  2. nie tworzyć nowych tabel tylko dodać do wszystkich tabel wartość delete i po prodtu starą ustawiam na true - nową na false.

Może ktoś ma jeszcze inne ciekawsze pomysły..Chętnie posłucham.

Mam jeszcze małe pytanie odnośnie Hibernate i tego co napisałem powyżej.

Mianowicie gdy pobieram objekt z bazy za pomocą Hibernate to jest on zbindowany i każda ingerencja w niego spowoduje automatyczny update tego objektu.
czyli:

  • pobieram objekt z bazy
  • w aplikacji zmieniam pole tego objektu - objekt jest automatycznie zmieniony i zapisany

I tu mi sie pojawia problem bo jak będę próbował zapisac nowy objekt i stworzyć takie wpisy historyczne to przy zapisie nie mam już dostępu do tego starego objektu.
Jak wtedy się zaczowac...
Czy mam przy pobieraniu z bazy tworzyć kopię tego objektu czy może jest jakiś inny sposób..

Pozdrawiam

EDIT:

Logi aplikacji odpadaja

2

Mam dobre wieści. Taki mechanizm już jest i wystarczy go skonfigurować.

http://docs.jboss.org/envers/docs/

@Edit
W sensie mechanizm nr 1. Mechanizm nr 2 jest bez sensu.

1

nie chce mi się wszystkiego czytać, ale zależy jakie dane. wybiórczo np. tylko kilka kolumn z jakieś innej tabelki (np. odnotowywać zmiany środków na koncie) - możesz stworzyć osobną tabelkę. to też może być przydatne gdyby ktoś potem chciał mieć w widoku swoją historię. do rzeczy innych rzeczy możesz poczytać o hibernate envers

1 użytkowników online, w tym zalogowanych: 0, gości: 1