【问题标题】:Checking room availability in SQL [closed]在 SQL 中检查房间可用性 [关闭]
【发布时间】:2015-01-28 20:56:20
【问题描述】:

我为我的酒店预订系统创建的关系数据库架构有 4 个表:

客户表 -

CustomerID (PK) 
title
firstname
surname
address 
town
county 
country 
postcode 
tel
email 
username
password

餐桌

RoomID (PK)
RoomType
Description
PricePerNight

预订

ReservationID (PK)
CustomerID (FK)
RoomID (FK)
ArrivalDate
DepartureDate

Room_Availability

RoomID(PK/FK)
Availability

在前端我有两个 ajax 日历,允许用户选择到达和离开日期,旁边有一个检查可用性按钮。

我不确定如何搜索数据库以检查哪些房间可用,然后以网格视图或其他方式将它们显示在下一页上。

另外,我的数据库架构是否正确,有人可以帮助我吗?

【问题讨论】:

  • 欢迎来到 SO,不幸的是,您的问题需要与您遇到的特定编程问题有关。您正在寻求设计分析和建议,这使您的问题过于宽泛。尝试缩小范围。
  • 1 - 您的数据库架构不支持您的功能。 2 - 这是我的意见。 3 - 没有人说数据必须以这样的方式存储,以便查询应该很容易。 4 - 酒店系统是应该具有规范化和非规范化数据的系统的一个很好的例子。

标签: sql asp.net sql-server vb.net


【解决方案1】:

正如 gitsitgo 所说,您的问题过于宽泛,无法完全回答。但是让我们把它削减一点。首先,我假设一个房间不可用有两个原因:一个是它正在修理或其他什么,二是它已经被预订了。如果是这样,您的架构看起来没问题。

因此,要检查空房情况,您需要获取用户提供的开始日期和结束日期,并找到在用户提供的两个日期之间的任何一天都可用且未预订的所有房间。

这样做的逻辑是选择所有不符合这些条件的房间 ID:

  1. 开始日期介于预订开始日期和预订结束日期之间。
  2. 结束日期介于预订开始日期和预订结束日期之间。
  3. 开始日期小于预订开始日期,结束日期大于预订结束日期。
  4. 房间 ID 在可用性表中被标记为不可用。

要完成此操作,请查找并应用 EXISTS 或 IN。 (您还需要查找 BETWEEN。)忘记在网格中显示它,直到您弄清楚要显示的内容。

【讨论】:

  • 然后添加另一个 WHERE 子句(使用 AND),表示 RoomType 是选定的。
猜你喜欢
  • 2014-07-10
  • 2012-06-03
  • 1970-01-01
  • 1970-01-01
  • 2018-06-23
  • 2016-08-12
  • 2019-07-16
  • 2021-03-18
  • 1970-01-01
相关资源
最近更新 更多