sql - 预约系统设计

标签 sql database postgresql database-design database-schema

我正在处理预订系统架构,但在定义资源可用性时遇到了一些问题。我在这里和谷歌上搜索了类似的问题,但仍然没有清楚的理解

我的应用程序用于预订出租车。每个出租车司机今天正在工作或休息一天。到目前为止,我想出了以下结构

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/

相关文章:

sql-server - SQL 服务器统计信息

sql - Postgres 生成一系列列

mysql - 案例、子查询和连接

c# - 表值参数插入性能不佳

mysql - 如何使 GROUP BY SUBSTRING 查询更快?

java - PostgreSQL 多个 'WHERE' 条件(1000+)请求

django - 在 django python 中向现有数据库表添加新字段

postgresql - 我如何在 PL/pgSQL 中使用 PostgreSQL INFORMATION_SCHEMA 的结果?

php - 在 php 中构建 "multilingual"脚本的最佳方法是什么?

sql - 如何在 PostgreSQL 中获取字符串中正则表达式匹配的位置?