数据库设计:处理可用性

问题描述 投票:0回答:1

在我的Ruby on Rails应用程序中,自行车租赁公司可以管理其所有自行车(预订,付款等)。

上下文我想为自行车租赁公司(shops)提供在其自己的网站上执行预订表格的选项,以便他们可以让客户预订bike

  • 然后此预订表格将显示bike_categories,其中bikes在给定的arrivaldeparture日期可用。

问题在在线阅读了一些文档之后,我想我应该创建一个单独的表来处理每个bike_category的可用性,然后该表将显示在所选countbikes日期可用的arrivaldeparture

=>示例:在1-1-20201-2-2010之间20 bikes的“ C0”“山地自行车”可用

但是我不确定表的结构应该如何,因为bike_category处于reservation级别,因此属于bike

代码

模型

bike_category
ruby-on-rails database api-design
1个回答
0
投票

我个人不会为此创建另一个表。我会向用户查询他们打算租用自行车的日期。确定开始日期和结束日期后,我会在预订表上查询,以查找这段时间内哪些自行车不可用。

例如

class Shop < ApplicationRecord has_many :bike_categories, dependent: :destroy has_many :bikes, through: :bike_categories has_many :reservations, dependent: :destroy end class Reservation < ApplicationRecord belongs_to :shop belongs_to :bike end class Bike < ApplicationRecord belongs_to :bike_category has_many :reservations, dependent: :destroy end class BikeCategory < ApplicationRecord belongs_to :shop has_many :bikes, dependent: :destroy end

然后,我将使用这些来找出每个类别中有多少]

reserved_bikes = Reservation.distinct.pluck(:bike_id).where(start_time: Time.now..user_end_time, end_time: Time.now..user_start_time)

如果您对它进行查询,也可能有一种对联接进行上述操作的方法。

通常,当已经可以推断数据时,我避免添加更多表。主要原因是,如果更新原始表(在这种情况下为保留),则必须将这些更新级联到“推断的数据”表,这很麻烦。

© www.soinside.com 2019 - 2024. All rights reserved.