我正在开发一个预订系统模式,在定义资源可用性时遇到了一些问题。我在这里和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))我在想,如果没有预订条目,则将每个驱动程序视为可用,然后提出不同类型的预订:
不可用的=>驱动程序请一天假已预订的=>驱动程序由用户在开始/结束时间之间预订取消=>取消预订
然而,维护不可用/预订状态听起来比我想要的要复杂一些。
那么,有什么建议可以改进数据库模式吗?
发布于 2014-09-26 07:32:04
更简单的方法是避免司机的可用性(因为他正在下班/出租车正在维修)是在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()
)https://stackoverflow.com/questions/26049667
复制相似问题