设计表为多对多的关系

时间:2017-01-05 15:35:12

标签: ruby-on-rails ruby database-design

我正在构建一个预订应用程序,我想就如何设计模型提出建议。 我有预订模型,目前设计如下:

class Table < ApplicationRecord
  belongs_to :restaurant
  has_many :reservations
end
class Reservation < ApplicationRecord
  belongs_to :table
  belongs_to :restaurant
end

然而,餐厅通常需要为几张桌子预订1次 - 对于一组10人,2张桌子连在一起,并且两个桌子都不应该在给定时间可用。在这种情况下,我有两个选项:

  • 为2个表创建2个相同的预订(简单但似乎没必要,因为可能有需要10个表的事件)
  • 创建新模型 ReservationTable 并将模型更改为:
class Table < ApplicationRecord
  belongs_to :restaurant
  has_many :reservation_tables
  has_many :reservations, through: :reservation_tables
end

class Reservation < ApplicationRecord
  belongs_to :restaurant
  has_many :reservation_tables
  has_many :tables, through: :reservation_tables
end

class ReservationTable < ApplicationRecord
  belongs_to :reservation
  belongs_to :table
end

从长远来看,您认为哪种选择更好(如果是第二种,那么设计是否准确?)?

非常感谢您的任何建议!

1 个答案:

答案 0 :(得分:1)

ReservationTable方法看起来不错。

逻辑上,如果它们也通过ReservationTable和Table关联,则直接将预订与餐厅相关联是多余的,但我可以看到,在预订的生命周期中可能存在可能没有分配表的状态。我不会改变它。