Hej.
Mam następujący problem do rozwiązania w Javie.
Funkcjonalnie to działa tak:
- Użytkownik (wydawca) ma pewien produkt (książkę).
- Książka na autorów (1 lub więcej), licencje (1 lub więcej).
USER
id
user_name
PRODUCT
id
user_id
name
set<licences>
set<authors>
AUTHOR
id
author_name
LICENCE
id
details
Problem do rozwiązania wygląda nasępująco:
Gdy użytkownik (USER) robi edycję produktu, zapisywana jest historia tej zmiany (co i kiedy zostało zmienione). Przy każdej edycji tworzony jest nowy rekord historii.
W przypadku gdy użytkownik zdecyduje się usunąć konto, wtedy przywracana jest oryginalna 'wersja' produktu, czyli przed wszystkimi zmianami zrobionymi przed użytkownika.
**
Wymyśliłem to tak:**
- powstaną nowe tabelki
HISTORY (tu tworzone będą wpisy historii)
id
date
user_id
text (co zostało zmienione)
ORIG_PRODUCT
ORIG_LICENCE
ORIG_AUTHOR
Tabelki ORIG* będą kompiami tabeli PRODUCT, LICENCE, AUTHOR.
Gdy użytkwnik zrobi edycję produktu, porównam czy zmieniły się poszczególne dane w tabelach (np, PRODUCT.name, AUTHOR.author_name, LICENCE.details).
Jeżeli tak:
- w tabelce HISTORY stworzy się rekord że coś zostało zmienione przez USERA<name> z datą (now)
- tabelki ORIG* zostaną wypełnione przez dane z przed zmian.
W przypadku usunięcia konta USERA, tabeli PRODUCT, LICENCE i AUTHOR zostaną wypełnione danymi z tabelek ORIG.
Nie więm co w przypadku gdy zmiana będzie polegała na usunięciu autora (np przed zmianą było dwóch, a po zmianie jeden). To samo tyczy się LICENCES.
Moje pytanie brzmi, czy taki design jest odpowiedni i ma sens.
A może ktoś ma lepszy pomysł na design takiej funkcjonalności i mógłby się podzielić pomysłami?
PS. Nie programuje zawodowo i na pewno mam braki jeżeli chodzi o więdzę z zakresu dostępnych bibliotek, patternów itp. więc dlatego proszę o pomoc na forum.