预订系统设计

时间:2014-09-25 23:20:13

标签: sql database postgresql database-design database-schema

我正在处理预订系统架构,并且在定义资源可用性方面存在一些问题。我在这里和Google上搜索了类似的问题,但仍然没有明确的理解

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

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))

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

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

然而,维持不可用/预订状态听起来比我想要的复杂一点。

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

1 个答案:

答案 0 :(得分: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()
)