我正在开发一个旅行管理应用程序。有问题的设计如下所示:
旅行中的每个人都被指定为旅行者。每个旅行者都有一本护照。现在,Traveler 可以是 MainMember 或 SubMember,这取决于他是否是一家之主。MainMember 决定诸如 TourPackage、他的旅行家庭的总金额等内容。SubMember 在旅行时依赖于 MainMember。因此,如果 MainMember 被删除,它的所有 SubMember 也必须被删除。
所以,旅行者有护照。(一对一关系) Traveler 是 MainMember 或 SubMember。(Traveler-MainMember 和 Traveler-SubMember 之间的一对零/一)一个 MainMember 可能有多个 SubMember。(一对多)一个 SubMember 只有一个 MainMember。(多对一)
我目前的 ERD 如下所示。
如您所见,三个表 - Traveler、MainMember 和 SubMember - 形成了循环依赖关系。不过,我不确定这是否会损害我的申请。如果我删除一个作为 MainMember 的 Traveler,那么 1. Traveler 中的一条记录被删除。2、删除其相关的MainMember记录。3、删除依赖于MainMember的SubMember记录。4. 子会员的旅行者记录被删除。
虽然这似乎不是问题,但作为 Traveler-MainMember 删除将始终只删除 Traveler-SubMember。不过,我对此有不好的预感。
谁能指导我更好的设计?
更新 -
在等待回复的同时,我根据@Daveo 的回复想出了另一个设计。基本上,Traveler 包含自引用外键。SubMember 记录将使用它来识别他们的父母。
这是 ERD。
现在,正如@Branko 所指出的那样,由于我之前的设计中没有循环依赖的问题,我想知道哪种设计更好?
另外,哪种设计更适合通过 Hibernate 实现?我认为第二种方法在通过 Hibernate 实现时可能会导致复杂性。
对于您喜欢的设计,我还将感谢有关实现模式(Hibernate 实体中的继承等)的一些指示。