Pracuję nad aplikacją do zarządzania podróżami. Omawiany projekt wygląda następująco:Należy unikać zależności kołowej
Każda osoba w trasie jest wyznaczona jako Podróżniczka. Każdy podróżujący ma paszport. Teraz Podróżnikiem może być Członek Główny lub Podoficer, w zależności od tego, czy jest on głową rodziny. A MainMember decyduje się na takie rzeczy, jak pakiet TourPackage, łączna kwota dla jego rodziny podróżującej itp. Podmorski jest zależny od głównego użytkownika podczas podróży. Tak więc, jeśli MainMember zostanie usunięty, wszystkie jego SubMembers muszą zostać usunięte.
Tak, Podróżny ma paszport. (Relacja jeden do jednego) Podróżny jest albo członkiem zarządu, albo członkiem grupy. (jeden do zera/jeden między Traveler-MainMember i Traveler-SubMember) A MainMember może mieć kilka SubMembers. (jeden-do-wielu) Submember ma tylko jedną MainMembers. (wiele-do-jednego)
Moje obecne ERD jest coś w następujący sposób.
Jak widać, trzy stoliki - podróżników, MainMember i podelementu - utworzyli kołową zależność. Nie jestem pewien, czy to zrani moją aplikację. Jeśli usuwam Traveler, który jest elementem MainMember, wówczas 1. Rekord produktu Traveler został usunięty. 2. Odpowiedni rekord MainMember został usunięty. 3. Rekordy podrzędne zależne od członka głównego są usuwane. 4. Rekordy Traveler dla SubMembers zostaną usunięte.
Chociaż nie wydaje się to być problemem, ponieważ usuwanie Traveler-MainMember zawsze usunie tylko Traveler-SubMember (s). Mimo to mam złe przeczucia.
Czy każdy może mnie poprowadzić do lepszego projektu?
AKTUALIZACJA -
czekając na odpowiedzi, ja przyszedłem z innego projektu, na podstawie @ post Daveo użytkownika. Zasadniczo produkt Traveler zawiera samoodnoszący się klucz obcy. Byłby wykorzystywany przez rekordy Podmorskich do identyfikacji swoich rodziców.
Oto ERD do tego.
Teraz, jak nie było problemem uzależnienia od kołowego w moim poprzednim wzorem, jak wskazano przez @Branko, chciałbym wiedzieć, który projekt jest lepszy?
Ponadto, który projekt lepiej byłoby zaimplementować za pomocą Hibernacji? Myślę, że drugie podejście może doprowadzić do złożoności podczas implementacji przez Hibernate.
Chciałbym również docenić niektóre wskazówki dotyczące wzorów realizacji (dziedziczenie w obiektach hibernacji, itp.) Dla projektu, który wolisz.
używać dziedziczenia dla MainMember i SubMember (rozszerzając Traveler) –
@guido - Rzeczywiście, to jest moja myśl, kiedy wdrażam te podmioty POJO. Ale w jaki sposób rozwiązuje to okrągłą zależność w projekcie bazy danych? Albo źle zrozumiałem twoje oświadczenie. Będę wdzięczny, jeśli rozwiniesz to jako odpowiedź. –
zajrzyj tutaj http://openjpa.apache.org/builds/1.0.0/apache-openjpa-1.0.0/docs/manual/jpa_overview_mapping_inher.html#jpa_overview_mapping_inher_tpc –