なぜあなたが説明したものが欲しいのか完全にはわかりませんが、モデルを次のように見ていきます...
あなたには学生がいます
- 彼らは他のエンティティの複合体ではなく、別個のエンティティです
- 彼らは独自のプロパティを持っています。名前、生年月日など
あなたはクラスを持っています
- これらは学生のグループです
- 学年ごとに同じ「クラス」に異なる学生がいます
- 彼らはまた独自のプロパティを持っています。グレード、サブグレードなど
あなたのモデルには、通常は使用しない追加のプロパティがあります。
クラスに 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)
。
正確な現実世界のモデルと特定のニーズに応じて、ここには非常に多くの柔軟性があります。しかし、うまくいけば、この例はあなたにとって良いスタートです。エンティティをリストするディメンション テーブル、およびこれらのエンティティを関連付けるファクト テーブル (または複数のテーブル)、および/またはエンティティをさらに説明するテーブル。