web-dev-qa-db-ja.com

データベーススキーマとoopクラス図の多対多の関係

学生とグループのエンティティがあります。学生は多くのグループを持つことができ、グループも多くの学生を持つことができます。データベースでは、中流階級が必要で、多対多の関係を1対多および多対1に変更する必要があります。

私の質問は、クラス図をどのように設計するのですか?

中間テーブルに余分なフィールドがない場合(student_idとgroup_idのみ)、中間層は不要であると思いますこれは本当かどうか

3
mohsenJsh

あなたは必要そのためのクラスではありませんが、多分あなたはそれを望んでいます。データベースの設計レベルでは、テーブルのリンクを避け、代わりにそれらのテーブルをファーストクラスのエンティティと考えます。たとえば、studentテーブルとclassテーブルがある場合、多対多の関係を満たすために_student_class_リンクテーブルを作成する代わりに、enrollmentのような名前を付けることができます。

OOPレベルでは、student.addClass(class)class.addStudent(student)のようなものを書く必要があるかどうかを考える必要はありません。代わりにnew Enrollment(student, class)。そして、その関係についてより多くのデータを保存する必要があると判断した場合、余分なフィールドを持つテーブルをリンクすることに起因する厄介な問題に対処する必要はありません(特にORMとEnrollmentはファーストクラスのエンティティであるため、studentclassに加えて、必要な他のプロパティを持つことができます。

学生とグループの関係を独自のエンティティとして概念化できる場合は、そのようにモデル化するのがおそらく最もクリーンです。

4
Hey

それは正しいです。グループに属する学生の列挙可能なコレクションであるグループのプロパティ(学生よりも私には理にかなっていますが、それは意見の問題です)を持っているだけです。

1
mgw854