预订数据库中的可用性
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;
【讨论】:
以上是关于预订数据库中的可用性的主要内容,如果未能解决你的问题,请参考以下文章