Избегайте круговой зависимости

Я разрабатываю приложение для управления командировками. Рассматриваемый дизайн выглядит примерно так:

Каждый человек в туре обозначается как Путешественник. Каждый путешественник имеет паспорт. Теперь Traveler может быть MainMember или SubMember, в зависимости от того, является ли он главой семьи. MainMember решает такие вещи, как TourPackage, общая сумма для его путешествующей семьи и т. Д. SubMember зависит от MainMember во время путешествия. Таким образом, если MainMember удален, все его SubMember также должны быть удалены.

Итак, у Путешественника есть Паспорт. (Отношение один к одному) Путешественник является либо основным, либо вспомогательным. (один к нулю / один между Traveler-MainMember и Traveler-SubMember) У MainMember может быть несколько SubMember. (один ко многим) У SubMember есть только один MainMembers. (Многие к одному)

Моя текущая ERD выглядит следующим образом.

Как видите, три таблицы - Traveler, MainMember и SubMember - сформировали круговую зависимость. Я не уверен, повредит ли это моему заявлению, все же. Если я удаляю Traveler, который является MainMember, то 1. Запись из Traveler удаляется. 2. Соответствующая запись MainMember удалена. 3. Записи SubMember, зависящие от MainMember, будут удалены. 4. Записи Traveler в SubMembers будут удалены.

Хотя это не кажется проблемой, так как удаление Traveler-MainMember всегда будет удалять только Traveler-SubMember (s). Тем не менее, у меня плохое предчувствие по этому поводу.

Кто-нибудь может направить меня к лучшему дизайну?

ОБНОВИТЬ -

В ожидании ответов я придумал другой дизайн, основанный на ответе @ Daveo. В основном, Traveler содержит собственный ссылочный внешний ключ. Он будет использоваться записями SubMember для идентификации своих родителей.

Вот ERD для этого.

Теперь, поскольку в моем предыдущем дизайне не было проблемы циклической зависимости, на которую указал @Branko, я хотел бы знать, какой дизайн лучше?

Кроме того, какой дизайн лучше реализовать через Hibernate? Я думаю, что второй подход может привести к сложности при реализации через Hibernate.

Я также был бы признателен за некоторые советы относительно шаблонов реализации (наследование в объектах Hibernate и т. Д.) Для дизайна, который вы предпочитаете.

Ответы на вопрос(2)

Ваш ответ на вопрос