先生の作った授業を生徒が予約するようなサービスがあるとして、以下のようにテーブル設計しました。
teachers(id,name) lessons(id,name,teacher_id) students(id,name) lesson_reservations(id,lesson_id,student_id)
業務要件として、lesson_reservations
を取得する際には多くの場合でteachers.name
も取得したくなるとします。
その場合、上記のテーブル定義だとlesson_reservations
を取得する際にいちいちlessons
をjoinしてteachers.name
を取得しなくてはなりません。
テーブル定義としては冗長にはなりますが、lesson_reservations
にteacher_id
にすれば取得しやすいです。
もちろん、lessons.teacher_id
が変更になるとlesson_reservations.teacher_id
も変更が必要というデメリットはあります。
しかし、業務要件にこのような変更がないと考えた場合は、あえて冗長なテーブル設計をしてもよいのかなと思っています。
「このような場合は冗長な外部キーを持って良い」みたいに明記された設計パターンやその他情報があれば教えてほしいです。
回答6件
あなたの回答
tips
プレビュー