Избегайте круговой зависимости
Я разрабатываю приложение для управления командировками. Рассматриваемый дизайн выглядит примерно так:
Каждый человек в туре обозначается как Путешественник. Каждый путешественник имеет паспорт. Теперь 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 и т. Д.) Для дизайна, который вы предпочитаете.