数据库设计具有预先存在的可用性约束的预订系统

时间:2014-04-30 21:47:12

标签: database database-design

我正在使用铁轨预订停车位预订系统。以下是此问题的数据库架构的有趣表格和列。(我没有包含用户表,因为唯一相关的列是id列。)

`ActiveRecord::Schema.define(version: 20140430100754) do

  create_table "bookings", force: true do |t|
    t.integer  "spot_id"
    t.integer  "user_id"
    t.datetime "begins_at"
    t.datetime "ends_at"
  end

  create_table "parkings", force: true do |t|
    t.integer  "owner_id"
    t.string   "address"
  end

  create_table "spots", force: true do |t|
    t.integer  "parking_id"
    t.string   "number"
  end

end` 

一开始预订系统很简单:用户可以预订有开始时间和结束时间的地点,在查询可用地点时,我会考虑现有的预订。

但是,我现在必须在每个位置添加可用性:一个停车位的所有者必须能够在他/她的位置可用时为一周中的每一天设置。我已经对如何将其存储在数据库中做了一些研究,但我没有发现任何接近的事情。 (只有简单的预订系统,比如我以前的系统)

以下是我必须解决的主要问题:

  • 预订系统的粒度必须至少为15分钟
  • 我必须经常查询数据库,以找到在给定时间范围内仍然至少有一个可用地点的所有停车场。

我的第一个问题是关于存储初始可用性信息的方式。

我能想到的唯一解决方案是每15分钟使用一次布尔值来存储它(七天内,这是672列,对我来说似乎不是一个开创性的想法)。那么您对如何存储它有什么建议,以及如何以有效的方式查询它以检查可用性?

我的第二个问题是关于预订表:

我想清理预订表,以免让它增长,(我担心它会减慢查询速度,以检查停车位和停车位的可用性)但是请将其存储在另一张桌子中以跟踪之前的预订(我不会经常查询)。这是一个好方法吗?

备注

我说我在使用Ruby on rails,但我认为这个问题与语言无关,而且更多的是数据库设计问题。

0 个答案:

没有答案