我正在处理预订系统架构,但在定义资源可用性时遇到了一些问题。我在这里和谷歌上搜索了类似的问题,但仍然没有清楚的理解
我的应用程序用于预订出租车。每个出租车司机今天正在工作或休息一天。到目前为止,我想出了以下结构
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))
我正在考虑在没有预订条目的情况下将每个司机视为可用,然后提出不同类型的预订:
不可用 => 司机请假 已预订 => 司机在开始/结束时间之间被用户预订 已取消 => 已取消预订
但是,维护不可用/已预订状态听起来比我想的要复杂一些。
那么,对于如何改进数据库模式,有什么建议吗?
最佳答案
更简单的方法是避免司机可用(因为他下类/出租车正在修理)是在 Drivers 表中添加一个 bool 属性,可以从 UI 中打开或关闭该属性。
Reservation 应该有一个属性 as cancelled,这样在查询可用的司机时可以忽略已取消的预订。
所以可用的驱动程序是
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()
)
关于sql - 预约系统设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26049667/