Pracuję nad projektem internetowym, który obejmuje treści edytowalne przez użytkownika, i chciałbym móc śledzić wersję rzeczywistej treści, która znajduje się w bazie danych. Zasadniczo chcę wdrożyć historie zmian w stylu wiki.
Przeprowadzając pewne badania w tle, widzę dużo dokumentacji na temat sposobu wersjonowania schematu bazy danych (moja faktycznie jest już kontrolowana), ale wszelkie istniejące strategie dotyczące śledzenia zmian zawartości bazy danych są zagubione przez lawinę elementów wersji schematu, przynajmniej w moich poszukiwaniach.
Mogę wymyślić kilka sposobów na wdrożenie własnego śledzenia zmian, ale wszystkie wydają się dość prymitywne:
- Zapisz cały wiersz przy każdej zmianie, odnieś wiersz z powrotem do identyfikatora źródłowego za pomocą klucza podstawowego (do czego obecnie się skłaniam, jest najprostszy). Wiele drobnych zmian może jednak powodować duże wzdęcia.
- zapisz przed / po / użytkownik / znacznik czasu dla każdej zmiany, z nazwą kolumny, aby odnieść zmianę z powrotem do odpowiedniej kolumny.
- zapisz przed / po / użytkownik / znacznik czasu z tabelą dla każdej kolumny (spowodowałoby to zbyt wiele tabel).
- zapisz diffs / user / timestamp dla każdej zmiany z kolumną (oznaczałoby to, że będziesz musiał przejść całą historię zmian, aby wrócić do określonej daty).
Jakie jest tutaj najlepsze podejście? Wydawanie własnych wydaje się, że prawdopodobnie odkrywam czyjąś (lepszą) bazę kodów.
Punkty bonusowe dla PostgreSQL.