Załóżmy, że tworzę stronę typu portal aukcyjny, takiego klona Allegro. Użytkownicy tak mogą tworzyć aukcję składającą się z:
- ceny
- opisu
Chciałbym móć śledzić zmiany aukcji, tzn. wiedzieć, że ktoś zmienił cenę, opis itd. Jak powinienem to zrobić? Pomyślałem o kilku możliwościach
- Mieć tabelę
offer
:
| id | account_id |
|----|------------|
| 7 | 10 |
| 8 | 11 |
oraz tabelę ze stanami aukcji:
| id | offer_id | price | description | created |
|----|----------|-------|-------------|-------------------------|
| 12 | 7 | 100 | opis 1 | 2021-05-11 16:06:06.149 |
| 13 | 7 | 100 | opis 2 | 2021-05-11 18:06:06.149 |
| 14 | 7 | 120 | opis 3 | 2021-05-11 19:06:06.149 |
| 15 | 8 | 50 | test | 2021-05-12 11:06:06.149 |
| 16 | 8 | 45 | test | 2021-05-12 12:06:06.149 |
Gdy użytkownik dodaje opcję, to tworzę wpis w tabeli offer
, oraz offer_changes
, a gdy modyfikuje aukcję, dodaję kolejny wpis do offer_changes
. Dzięki temu mam informacje o wszystkich zmianach, ale minusem jest to, że mam trochę nadmiarowych danych (gdy zmieni się opis, a nie cena, to i tak zapisuję zarówno nowy opis, jak i cenę.
- Mieć tabelę
offer
:
| id | account_id |
|----|------------|
| 7 | 10 |
| 8 | 11 |
| 9 | 22 |
Oraz tabele price_history
:
| id | offer_id | price | created |
|----|----------|-------|-------------------------|
| 1 | 7 | 100 | 2021-05-11 16:06:06.149 |
| 2 | 7 | 120 | 2021-05-11 19:06:06.149 |
| 3 | 8 | 50 | 2021-05-12 11:06:06.149 |
| 4 | 8 | 45 | 2021-05-12 12:06:06.149 |
oraz analogiczną tabelę: description_history
. Plusem jest to, że każdy wiersz to zmiana (a wcześniej nie zawsze tak było), a minusem jest to, że mam dużo tabel.
- Mieć tabelę
offer
:
| id | account_id | price | description | created |
|----|------------|-------|-------------------------|---------|
| 7 | 10 | 100 | 2021-05-11 16:06:06.149 | |
| 8 | 11 | 50 | 2021-05-12 11:06:06.149 | |
A zmiany logować do pliku. Plusem, jest to, że nie tworzę dodatkowych tabel, a minusem to, że np.ciężko wgrać brakujące dane. To znaczy załóżmy, że była jakaś awaria i przez godzinę nie były przetworzone jakieś zmiany i gdyby je teraz przetworzyć, to nie wiadomo co się zmieniło na co
Macie jakieś propozycje?