Unikaj zależności zależnej od obiegu

Opracowuję aplikację do zarządzania podróżami. Projekt jest następujący:

Każda osoba w trasie jest oznaczona jako Podróżnik. Każdy podróżny ma paszport. Teraz Traveller może być członkiem MainMember lub SubMember, w zależności od tego, czy jest on głową rodziny. MainMember decyduje o takich rzeczach, jak TourPackage, łączna kwota dla jego podróżującej rodziny, itp. Sub-Member jest zależny od MainMember podczas podróży. Jeśli więc element MainMember zostanie usunięty, wszystkie jego SubMembers również muszą zostać usunięte.

Podróżnik ma paszport. (Relacja jeden do jednego) Podróżnik jest członkiem MainMember lub SubMember. (jeden do zera / jeden między członkiem Traveler-MainMember i Traveler-SubMember) Członek MainMember może mieć kilka submembers. (jeden do wielu) SubMember ma tylko jednego MainMembers. (wiele do jednego)

Moja obecna ERD wygląda następująco.

Jak widać, trzy tabele - Traveler, MainMember i SubMember - utworzyły okrągłą zależność. Nie jestem jednak pewien, czy to zrani moją aplikację. Jeśli usunę Podróżnika, który jest członkiem MainMember, to 1. Rekord z produktu Traveler zostanie usunięty. 2. Odpowiedni rekord głównego członka jest usuwany. 3. Rekordy SubMember zależne od MainMember są usuwane. 4. Rekordy Traveler z SubMembers są usuwane.

Choć wydaje się, że nie stanowi to problemu, ponieważ usunięcie Traveler-MainMember zawsze usuwa tylko elementy członkowskie Traveler-SubMember. Mimo to mam złe przeczucia.

Czy ktoś może mnie poprowadzić do lepszego projektu?

AKTUALIZACJA -

W oczekiwaniu na odpowiedzi wpadłem na inny projekt oparty na odpowiedzi @ Daveo. Zasadniczo Traveler zawiera samopodtrzymujący się klucz obcy. Byłby używany przez zapisy SubMember do identyfikacji rodziców.

Oto ERD.

Teraz, ponieważ w poprzednim projekcie nie było kwestii zależności kołowej, jak wskazuje @Branko, chciałbym wiedzieć, który projekt jest lepszy?

Ponadto, który projekt byłby lepszy do wdrożenia poprzez Hibernate? Myślę, że drugie podejście może doprowadzić do złożoności podczas implementacji poprzez Hibernate.

Byłbym również wdzięczny za pewne wskazówki dotyczące wzorców implementacji (dziedziczenia w obiektach Hibernate itp.) Dla projektu, który preferujesz.

questionAnswers(2)

yourAnswerToTheQuestion