OK, zaczynam,
Zakładam, że budujesz swoją aplikację za pomocą Spring Boot, Hibernate jako ORM i prawdopodobnie jakiejś relacyjnej bazy danych (MySQL).
Odnośnie projektowania baz danych:
Tak, obiekt Patreon jest tutaj właścicielem encji z relacją OneToMany do encji Item (ponieważ jeden Patreon może mieć N obiektów). Twoja encja Patreon może wykonać następujące przerysowanie:
1) Staraj się używać typów nieprymitywnych, zwłaszcza dla kluczy tabeli (long id -> Long id).
2) Utracić tablicę checkOutItems oraz listę itemHistory. Przede wszystkim relacje powinny być modelowane za pomocą kolekcji, a nie tablic. Po drugie, nie potrzebujesz tych dwóch. Nigdy nie będziesz przechowywać checkOutItems ani itemHistory w ten sposób. Zamiast tego utwórz List<Item> items
który będzie przechowywać elementy Patreon podczas opisywania relacji (oto kilka przykładów:http:/ /www.baeldung.com/hibernate-jeden-do-wielu
)
3) Ponownie z encją Item musisz stracić tablicę historii. Jedyne, czego potrzebujesz, to odniesienie do encji będącej właścicielem (w tym przypadku Patreon), uzupełniając w ten sposób stronę ManyToOne relacji.
4) Zwróć uwagę, że pola daty powinny mieć adnotację @Temporal
podając również poprawny typ (możesz przeczytać więcej).
5) Ogólnie rzecz biorąc, klasa przedmiotu powinna wystarczyć do przeprojektowania.
5) Po wykonaniu wszystkich powyższych czynności i zakładając, że używasz Springa, możesz utworzyć repozytorium, za pomocą którego możesz wysłać zapytanie do obiektu Patreon, pobierając w ten sposób obiekt wraz z powiązanymi z nim encjami (elementami).
Jeśli chodzi o Twoje pytania:
P1:Tak, widzę. Więcej informacji znajdziesz powyżej.
P1.2:Żadne tablice nie są. Listy lub jeszcze lepiej Zestawy są bardziej odpowiednie.
P1.3:Tak, jest. Pierwsza z nich to adnotacja JPA używana w relacyjnych bazach danych, a druga to adnotacja specyficzna dla Spring Data używana przez bazy danych i frameworki, które nie są tego typu (relacyjne) lub nie mają zdefiniowanego standardowego API trwałości (jak JPA). Ponieważ wartości NonNull i NotNull są mniej więcej takie same, a pierwszy faktycznie zastępuje drugi (coś, co jest robione często). Jedyna różnica, jaką widzę, to cel. Możesz przeczytać więcej tutaj:https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/lang/NonNull.html https://docs.oracle.com/javaee /7/api/javax/walidacja/ograniczenia/NotNull.html
P2:Tak, jest. Zobacz powyżej.
P3:Przy odrobinie sprytnego projektu nie widzę potrzeby więcej, ale jeśli czujesz, że to ci pomoże, czemu nie. Tylko nie przesadzaj z projektowaniem i jego złożonością