Witam.
Mam problem z logicznym podziałem historii edycji pojedyńczej strony. Tworzę system bazy filmowej. Strona filmu poza informacjami przechowywanymi w samym filmie posiada relacje do aktorów oraz innych danych. Gdy ktokolwiek np. doda aktora lub zmieni opis, zmiana będzie pojawiać się w panelu edytorskim i po akceptacji strona z danym filmem będzie aktualizowana. Chciałbym aby administrator miał zawsze możliwośc przywrócenia poprzedniej rewizji. Poszukuje najbardziej optymalnego rozwiązania, sprawę utrudnia to, że poza edycjami samego filmu następują edycje relacji np aktorów. Póki co myślę nad przetrzymywaniem całego modelu przed i po edycji oraz jego relacji lub nad przetrzymywaniem tylko zmienionych/wprowadzonych pól. Poniżej jedna z przykładowych koncepcji mam nadzieje, że jest zrozumiała:
movie_actor, movie, movie_title etc. trzymaja najnowsza wersje
- revision_history trzyma rewizje
- revision_history_item trzyma zmiany w danej rewizji
revision_history
- id
- movie_id
- verified_by
revision_history_item
- edit_table: movie, movie_title, movie_actor
- edit_entity_id (id w tabeli movie albo movie_title etc.)
- edit_action: DELETE, INSERT, EDIT (EDIT tylko jestli editt_able=movie)
- edit_field
- edit_previous_value: (tylko jesli edit_action=EDIT)
- edit_new_value
To rozwiązanie średnio mi się podoba ze względu na trudne cofanie się do danej rewizji, gdyż w przypadku wielu edycji trzeba iść od 1 zmiany do tej do której chcemy się cofnąć. Oraz to że gdy np zmienimy 5 pól w danym modelu to również potrzeba 5 wierszy by to zapisać w bazie. Może ktoś posiada jakieś doświadczenia z pisaniem podobnych systemów.