実現したいこと
以下の3つのテーブルがあったとします。
- 授業テーブル(courses)
- 学生テーブル(students)
- 授業学生テーブル(中間テーブル course_students)
今まで、その授業を受けられる学生を管理するのに、授業学生テーブルにレコードを作っていました。
<授業テーブル>
id | name |
---|---|
1 | 数学 |
2 | 英語 |
<学生テーブル>
id | name |
---|---|
1 | 太郎 |
2 | 花子 |
<授業学生テーブル>
id | course_id | student_id |
---|---|---|
1 | 2 | 3 |
2 | 3 | 3 |
今回、「この学生は、特定の授業**"以外"**を受けられる」ということをテーブルで管理したいと思っています。
これを実現できるテーブル設計を相談したいです。
発生している問題・分からないこと
以下の2案を考えました。
ただしっくりきておらず、何か他に良い方法があればご教示いただきたいです。
(1) テーブル構造はそのまま
「数学以外」なら、数学以外の授業のレコードをすべて授業学生テーブルにinsertしてしまえばいいかなと思いました。
ただその場合、授業が新規登録されたことをトリガーに授業学生テーブルに新たな授業をinsertするcallbackが必要になるため、ぱっと見謎のcallbackが発生するのは良くないなと感じています。
(2) 中間テーブルに「可能」カラムを設ける
受けられる授業は「可能」カラムをtrueとして、「以外」の場合はfalseを入れます。ただこの場合、受けられる授業のレコードと、以外で設定したい授業のレコードが混在する形です。
テーブルとしてわかりにくくないだろうかと感じています。
id | course_id | student_id | able★ |
---|---|---|---|
1 | 2 | 3 | true |
2 | 3 | 3 | true |
2 | 1 | 4 | false |
該当のソースコード
特になし
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
なにか案がありましたら、お手数ですがご教示のほどよろしくお願いいたします。
補足
特になし

回答3件
あなたの回答
tips
プレビュー