预订数据库中的可用性

Posted

技术标签:

【中文标题】预订数据库中的可用性【英文标题】:Availability in a reservation database 【发布时间】:2016-05-05 16:26:27 【问题描述】:

我有一个带有表格的酒店预订数据库:room, customer, reservation (id, id_room、id_customer_ 到达日期出发日期、...)。

当我在我的应用中选择一个房间时,如果当天房间很忙,我需要查看带有红色日期的日历小部件。

我需要一种方法来检索房间、月、年组合的繁忙日列表。

我的想法是从以前的列中创建一个新表:date,day,month,year,room,is_busy 然后查询一下。

SELECT day FROM new_table WHERE month=m AND year=y AND room=r AND is_busy=1

问题是每次都更新新表。

有简单的方法吗?

【问题讨论】:

您可以设置一个触发器,以便在将新记录放入现有表时更新新表。 Here's an example 上一个关于 SO 的问题,有人希望在插入时从新行中抓取几个字段并将它们放入新表中。 【参考方案1】:

你可以试试这个脚本。从现在开始,它将返回每个房间接下来 255 天的繁忙日期。

SELECT * INTO reservation
FROM (VALUES (1, 1, '2016-07-03','2016-07-06'),(2, 2, '2016-07-10','2016-07-15')) 
a(CustomerID, RoomID, arrive_date, departure_date);
GO
;WITH Pass0 as (select 1 as C union all select 1),
  Pass1 as (select 1 as C from Pass0 as A, Pass0 as B),
  Pass2 as (select 1 as C from Pass1 as A, Pass1 as B),
  Pass3 as (select 1 as C from Pass2 as A, Pass2 as B),
  FutureDates(FutureDates) as (SELECT DATEADD(DAY,ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) - 1, CAST(GETDATE() AS DATE)) FROM Pass3)
SELECT r.RoomID, f.FutureDates as BusyDate
FROM reservation as r
INNER JOIN FutureDates as f
ON f.FutureDates >= r.arrive_date and f.FutureDates < r.departure_date;

【讨论】:

以上是关于预订数据库中的可用性的主要内容,如果未能解决你的问题,请参考以下文章

数据库设计:处理可用性

设计一个高性能的酒店房间预订系统

用于预订、嵌套或引用的 MongoDB 模式?

用于预订、嵌套或引用的 MongoDB 模式?

用于检查房间可用性的 SQL 查询

Project: 项目经理新建资源预订