Aplikacja z SQLite i opcja undo

0

Witam

Pytanie dotyczy aplikacji budowanej w oparciu o bazę danych sqlite.
W jaki sposób można rozwiązać kwestie cofania/przywracania wprowadzanych do bazy danych zmian tj opcja wstecz(cofnij)/dalej? Czy baza danych sqlite (ewentualnie inna darmowa) oferuje narzędzia które by to ułatwiały/realizowały? Jeżeli nie, to w jaki sposób takie zagadnienie rozwiązuje się w aplikacjach bazodanowych?

1

takich opcji nie oferuje chyba żadna baza danych "in box". W bazach transakcyjnych masz coś takiego jak transakcje i polega to na tym, że dopóki nie zatwierdzisz transakcji dane nie są zmieniane. Ale nie jest to "undo" w takim sensie jak np. w edytorze tekstu, gdzie możesz cofnąć np. ostatnie 50 zmian. Takie coś musisz już realizować sam - np. pamiętać każdą wersję rekordu.

1

Żadna baza czegoś takiego nie wspiera. Albo ewentualnie w bardzo ograniczony sposób -> oracle ma flashback.
Są za to technologie które symulują takie mechanizmy -> http://www.jboss.org/envers poprzez zapisywanie informacji o wersjach w bazie.

0

Tak podejrzewałem, że nie będzie to proste. Jak więc jest to rozwiązywane w aplikacjach bazodanowych?
Najprostsze co mi przychodzi do głowy, to przechowywanie tylu wersji pliku bazy, ile kroków wstecz chcemy zachować - ale to raczej kiepski pomysl ze względu na szybkośc aplikacji (operowanie na wielu plikach) i objętość tych plików.

0

Trzymaj dane w pamieci zamiast co chwile mazac po bazie.

0

pamiętać każdą wersję rekordu.

Tylko w jaki sposób? Na dzień dzisiejszy wygląda to mniej więcej w tak, że program pracuje na dwóch plikach bazy danych: tymczasowym oraz oryginalnym.
Wszelkie operacje program wykonuje na pliku tymczasowym, w przypadku zapisywania zmian (zapisz plik), plik tymczasowy staje sie plikiem głównym, oryginalny jest usuwany i na podstawie nowego głównego pliku tworzony jest nowy plik tymczasowy.
Wszelkie zmiany w bazie są wprowadzane na bieżąco do pliku tymczasowego.

1

do tabeli bazy dodajesz dodatkowe pole - wersja rekordu i ono wraz z polem id tworzy dopiero unikalny identyfikator rekordu. Każdą nową wersję rekordu zapisujesz przez insert a nie update. Druga wersja to dodatkowa tabela, z takimi samymi polami jak tabela do której piszesz plus pole wersja. Trigger przy robieniu update lub delete na głównej tabeli wstawia jej aktualną kopię do tej tabeli

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