through:オプション以外でアクセスするために外部キーを追加してもよいか
ホテルの予約システムを実装しています。
# 予約テーブル
class Reservation < ActiveRecord::Base
belongs_to :plan, inverse_of: :reservations
delegate :room, to: :plan, allow_nil: true
end
# 予約プランテーブル
class Plan < ActiveRecord::Base
has_many :reservations, inverse_of: :plan
belongs_to :room, inverse_of: :plans
end
# 部屋テーブル
class Room < ActiveRecord::Base
has_many :plans, inverse_of: :room
has_many :reservations, through: :plans
end
このような関連の時、[ある部屋の予約状況を知りたい]時
ReservationsController
では
@reservation = Room.find(params[:id]).reservations
のようにしておくと 中間テーブルの役割を果たすplans
が中でJoinされて
[予約プランが一つでもないと予約状況が参照できない]状態となります。
そのため reservations
にroom_id
を追加して直接参照したいのですが
plans
にもroom_id
があるためDB設計的に冗長なのではと感じてます。
この場合、どのように設計をすれば良いでしょうか。