Evitar Dependência Circular

Estou desenvolvendo um aplicativo de gerenciamento de viagens. O design em questão é algo como seguir:

Cada pessoa em uma excursão é designada como Viajante. Cada viajante tem um passaporte. Agora, um Viajante pode ser um Membro Principal ou um Submembro, dependendo se ele é o chefe da família. Um membro do MainMember decide coisas como o TourPackage, o valor total da sua família em viagem, etc. Um SubMember depende do MainMember durante a viagem. Portanto, se um MainMember for excluído, todos os seus submembros também deverão ser excluídos.

Então, um viajante tem um passaporte. (Um para um relacionamento) Um viajante é um MainMember ou um sub-membro. (um-para-zero / um entre Traveler-MainMember e Traveler-SubMember) Um MainMember pode ter vários sub-membros. (um-para-muitos) Um sub-membro tem apenas um membro principal. (muitos para um)

Meu ERD atual é algo como segue.

Como você pode ver, as três tabelas - Traveler, MainMember e SubMember - formaram uma dependência circular. Eu não tenho certeza se vai prejudicar minha aplicação, no entanto. Se eu excluir um Traveler que seja um MainMember, 1. Um registro do Traveler será excluído. 2. Seu registro MainMember relevante é excluído. 3. Os registros de submenu dependentes de MainMember são excluídos. 4. Os registros de viajante dos submembros são excluídos.

Embora não pareça ser um problema, como uma exclusão de Traveler-MainMember sempre excluirá somente Traveler-SubMember (s). Ainda assim, tenho um mau pressentimento sobre isso.

Alguém pode me guiar para um design melhor?

ATUALIZAÇÃO -

Enquanto esperava pelas respostas, eu criei outro design, baseado na resposta do @ Daveo. Basicamente, Traveler contém chave estrangeira auto-referencial. Ele seria usado pelos registros do Submember para identificar seus pais.

Aqui está o ERD para isso.

Agora, como não havia nenhuma questão de dependência circular em meu design anterior, como apontado por @Branko, gostaria de saber qual projeto é melhor?

Além disso, qual projeto seria melhor para implementar através do Hibernate? Eu acho que a segunda abordagem pode levar a complexidade ao implementar através do Hibernate.

Eu também apreciaria algumas indicações sobre os padrões de implementação (herança em entidades do Hibernate, etc.) para o design que você preferir.

questionAnswers(2)

yourAnswerToTheQuestion