旅行管理アプリケーションを開発しています。問題のデザインは次のようなものです:
ツアーの各人は旅行者として指定されます。各旅行者はパスポートを持っています。現在、旅行者は、家族の長であるかどうかに応じて、メインメンバーまたはサブメンバーになることができます。MainMemberは、TourPackage、旅行中の家族の合計金額などを決定します。SubMemberは、旅行中はMainMemberに依存します。したがって、MainMemberが削除された場合、そのすべてのSubMemberも削除する必要があります。
つまり、旅行者はパスポートを持っています。(1対1の関係)トラベラーはMainMemberまたはSubMemberのいずれかです。(Traveler-MainMemberとTraveler-SubMemberの間で1対0 / 1)MainMemberには複数のSubMemberが含まれる場合があります。(1対多)サブメンバーには、メインメンバーが1つだけあります。(多対1)
私の現在のERDは次のようなものです。
ご覧のとおり、Traveler、MainMember、SubMemberの3つのテーブルは循環依存関係を形成しています。しかし、それが私のアプリケーションを傷つけるかどうかはわかりません。MainMemberであるTravelerを削除すると、1。Travelerのレコードが削除されます。2.関連するMainMemberレコードが削除されます。3.MainMemberに依存するSubMemberレコードが削除されます。4.サブメンバーのTravelerレコードが削除されます。
問題はないようですが、Traveler-MainMemberの削除では、常にTraveler-SubMemberのみが削除されます。それでも、私はこれについて悪い気持ちを持っています。
誰かが私をより良いデザインに導くことができますか?
アップデート -
返事を待っている間に、@Daveoの返事をもとに別のデザインを思いついた。基本的に、Travelerには自己参照外部キーが含まれています。これは、親を識別するためにSubMemberレコードによって使用されます。
これがそのためのERDです。
さて、@ Brankoが指摘したように、以前のデザインでは循環依存の問題がなかったので、どちらのデザインが優れているか知りたいですか?
また、Hibernateを介して実装するのに適した設計はどれですか?2番目のアプローチは、Hibernateを介して実装する際に複雑になる可能性があると思います。
また、好みの設計の実装パターン(Hibernateエンティティでの継承など)に関するいくつかの指針をいただければ幸いです。