問題-学校向けのグループフォーラムアプリケーションを作成していますが、次の要件に一致するデザインを作成する必要があります。
- グループとグループメンバー間の多対多の関係。
- グループメンバーは、学生またはスタッフのいずれかです。(将来的には他のユーザーロールになる可能性もあります)。
- 私のデータベースにはすでにStudentテーブルとStaffテーブルがあります。
環境-Java、Spring、Hibernate、MySQL
アプローチ-
1.a)DB設計
グループ:| id | 名前| is_active |
group_member:| id | group_id | user_role | student_id | staff_id | is_banned | is_default_user |
1.b)クラス設計(DTOクラス)
グループ:GroupMembergroupMembers[*]など。
GroupMember:UserRole userRole、学生学生、スタッフスタッフなど。
2.a)DB設計
グループ:| id | 名前| is_active |
group_member:| id | group_id | is_banned | is_default_user |
student_member:| id | group_member_id | student_id |
staff_member:| id | group_member_id | staff_id |
2.b)クラスの設計
グループ:GroupMembergroupMembers[*]など。
GroupMember:UserRole userRole、Membermemberなど。
インターフェイスメンバー:getMember():Object
StudentMemberはStudentを拡張しますMember:getMember():Studentを実装します
StaffMemberはStaffを拡張しますMemberを実装します:getMember():Staff
私は2番目のアプローチを好みます。それはより拡張可能であるようです。最初のアプローチでは、常に1つの列がnullになります。それは無駄です。
この種の問題について、言及された環境(冬眠のサポート:私は新しい蜂です)でより良いアプローチはありますか?