我正在处理预订系统架构,并且在定义资源可用性方面存在一些问题。我在这里和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 =>取消预订
然而,维持不可用/预订状态听起来比我想要的复杂一点。
那么,有没有建议如何改进数据库架构?
答案 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()
)