Piszę serwis podobny do IMDB lub Filmweb i obecnie próbuję zaprojektować bazę do filmów i kontrybucji. Może przedstawię sposób dodawania takiego filmu.
Najpierw dodany film musi trafić do "poczekalni" i czekać na weryfikację przez administratora
@Entity
@Table(name = "movies_lounge")
@Data
public class MovieLoungeEntity {}
jeśli film przejdzie pomyślnie weryfikację, jest dodawany do głównej tabeli
@Entity
@Table(name = "movies")
@Data
public class MovieEntity {}
Tu jest jeszcze w miarę OK.
Ale w takim serwisie musi być również możliwość edycji danych filmów.
Na przykład chcemy edytować opis, więc tworzę encję tylko z polami id_movie, id_author, description i edycja trafia do poczekalni
@Entity
@Table(name = "movies_descriptions_lounge")
@Data
public class MovieLoungeEntity {}
po weryfikacji również trafia do swojej głównej tabeli edycji opisów
@Entity
@Table(name = "movies_descriptions")
@Data
public class MovieDescriptionLoungeEntity {}
I taki sposób musi być stosowany dla wszystkich edytowanych pól, co daje kilkadziesiąt tabeli i encji. Po prostu masakra. Taki sposób jest stosowany, aby potem można było pobrać np. listę edytowanych opisów itd. W obecnej fazie pomijam punktacje za edycje konkretnych elementów, bo to wgl. system miałby z 200 tabel.
Ma ktoś jakiś pomysł, jak można to zaprojektować optymalniej?
EDIT: Rozkminiłem jak nie tworzyć dwóch tabel dla edycji czyli poczekalni i właściwej, a tylko jedną. Stworzę wartość enum STATUS i będą dostępne trzy statusy 'Czeka, Zaakceptowane, Odrzucone'.