首页 文章

预订系统设计

提问于
浏览
1

我正在研究预订系统架构,并且在定义资源可用性方面存在一些问题 . 我在这里和谷歌搜索了类似的问题,但仍然没有清楚的理解

我的应用程序是预订出租车 . 每个出租车司机今天要么工作,要么休息一天 . 到目前为止,我已经提出了以下结构

table: Drivers
id INT PRIMARY KEY
name INT

table: Users
id INT PRIMARY KEY
name TEXT

table: Reservations
id INT PRIMARY KEY
start: DATETIME
end: DATETIME
userID: INT (FOREIGN KEY(Users.id))
driverID: INT (FOREIGN KEY(Drivers.id))

如果没有预订条目,我想考虑将每个司机视为可用,然后提出不同类型的预订:

不可用=>司机休息一天预订=>驾驶员在开始/结束时间之间由用户预订取消=>取消预订

但是,保持不可用/预订状态听起来比我想要的复杂一点 .

那么,有什么建议如何改进数据库架构?

1 回答

  • 1

    更简单的方法是避免驱动程序可用性(因为他关闭/出租车正在修复)是在Drivers表中添加一个布尔属性,可以从UI打开或关闭 .

    并且预订应该具有取消的属性,以便在查询可用的驱动程序时取消预订可以被忽略 .

    所以可用的驱动程序是

    select *
    from drivers d
    where d.Available = true
    and not exists (
      select top(1) r.id
      from rerservations r
      where r.driverid = d.id
      and r.cancelled = false
      and r.start < GetDate()
      and r.end > GetDate()
    )
    

相关问题