なぜあなたが説明したものが欲しいのか完全にはわかりませんが、モデルを次のように見ていきます...
あなたには学生がいます
- 彼らは他のエンティティの複合体ではなく、別個のエンティティです
- 彼らは独自のプロパティを持っています。名前、生年月日など
あなたはクラスを持っています
- これらは学生のグループです
- 学年ごとに同じ「クラス」に異なる学生がいます
- 彼らはまた独自のプロパティを持っています。グレード、サブグレードなど
あなたのモデルには、通常は使用しない追加のプロパティがあります。
クラスに 20 人の生徒がいる場合、それぞれの生徒は 1 から 20 までのセカンダリ ID で識別されます。
これにより、次のディメンションテーブルが得られます
Student Class Grade SubGrade
----------------------- ------------------------ ----------------- -----------------
id INT PK id INT PK id INT PK id INT PK
first_name VARCHAR(45) name VARCHAR(45) name VARCHAR(45) name VARCHAR(45)
last_name VARCHAR(45) grade_id INT FK desc VARCHAR(45) desc VARCHAR(45)
etc, etc subgrade_id INT FK etc, etc etc, etc
Classテーブルには一意の制約があり、1(grade_id, subgrade_id)つのクラスだけが7b.
次に、ファクト テーブルを使用して学生をクラスに関連付ける必要があります...
Class_Membership
-----------------------
id INT PK
student_id INT FK
class_id INT FK
academic_year INT
学生がどの学年でも 1 つのクラスにのみ所属する必要がある場合は、一意の制約を に設定し(student_id, academic_year)ます。
Classまたは、テーブルに学年を含めることもできます。これは、毎年同じクラスが繰り返されることを意味しますが、一部の年にはクラス7gが存在しない可能性があります(たとえば、その年の生徒数が少ないため)。
同様に、年度途中から転校7bする学生もいます。7cその場合、Class_Membershipテーブルにはフィールドがstart_dateあり、場合によってはフィールドもある可能性がありend_dateます。
ただし、id_classフィールドを直接作成するものはありません(20 人の生徒がいるクラスの場合は 1 ~ 20)。個人的には、そのようなフィールドはありません。テーブルのidフィールドClass_Membershipは、同じ機能のほとんどを提供でき、おそらく追加の機能を提供できます。ただし、必要な場合は、単純にテーブルに追加できますClass_Membership...
Class_Membership
-----------------------
id INT PK
student_id INT FK
class_id INT FK
academic_year INT
class_member_id INT
次に、一意の制約を設定することもできます(academic_year, class_id, class_member_id)。
正確な現実世界のモデルと特定のニーズに応じて、ここには非常に多くの柔軟性があります。しかし、うまくいけば、この例はあなたにとって良いスタートです。エンティティをリストするディメンション テーブル、およびこれらのエンティティを関連付けるファクト テーブル (または複数のテーブル)、および/またはエンティティをさらに説明するテーブル。