ホテルの予約システムを実装しています。

  # 予約テーブル
  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されて
[予約プランが一つでもないと予約状況が参照できない]状態となります。

そのため reservationsroom_idを追加して直接参照したいのですが
plansにもroom_idがあるためDB設計的に冗長なのではと感じてます。

この場合、どのように設計をすれば良いでしょうか。