【问题标题】:Hotel Booking system architecture for room available efficiency客房可用效率的酒店预订系统架构
【发布时间】:2016-12-07 05:12:30
【问题描述】:

在尝试开发酒店预订系统时,我很好奇哪种方法最适合系统架构。目前,当客户在特定日期预订酒店房间时,我拥有酒店房间详细信息、客户详细信息和预订详细信息。

可用房间 = 总房间 - 保留房间

现在我正在使用查询来检索根据客户选择的特定日期预订的房间在给定日期的可用房间。例如,客户从3 August 20166 August 2016 预订房间。然后我将从预订详细信息中检索 8 月 3 日至 8 月 6 日之间的日期。我将每天循环到这个 SQL 语句中。

Select * from bookingDetails where theDate between StartDate and EndDate and RoomType = 'Something'

然后我会用设置的日期来总结预订的房间并得到总房间。 此语句将在客户选择日期时触发

或者我应该再创建一张表作为可用房间并存储 5 年日历和总房间。它会在客户预订房间时进行推断。

【问题讨论】:

    标签: sql-server database architecture


    【解决方案1】:

    我认为您不需要任何其他表格。
    您只需查找所有已预订的房间并将其排除:

    Select * 
    from tbl_Rooms
    WHERE RoomType = 'Something' and 
        Room_ID not in (
            Select Room_ID 
            from bookingDetails 
            where theDate between @StartDate and @EndDate
        );
    

    但是,该查询返回仅在整个期间可用的房间。这是按天(255 天范围内)显示所有可用房间的查询:

    ;WITH Pass0 as (SELECT * FROM (VALUES (1),(1),(1),(1)) as A(C)),
      Pass1 as (select 1 as C from Pass0 as A, Pass0 as B),--16 rows
      Pass2 as (select 1 as C from Pass1 as A, Pass1 as B),--256 rows  
      Dates as (SELECT DATEADD(d,ROW_NUMBER() OVER(ORDER BY (SELECT NULL))-1,@StartDate) as AvailDate FROM Pass2)
    SELECT d.AvailDate, r.* FROM tbl_Rooms as r
    INNER JOIN Dates as d ON AvailDate < @EndDate
    WHERE NOT EXISTS (SELECT 1 FROM bookingDetails as b WHERE b.theDate = d.AvailDate and b.Room_ID = r.Room_ID)
    ORDER BY r.Room_Number, d.AvailDate;
    

    【讨论】:

    • 我所拥有的不是每个房间的详细信息,而是桌子的一般酒店房间信息。例如,酒店房间详细信息的总房间、类型、价格和一般描述。因此,我不能使用 Room_ID 将其过滤掉。
    • 所以,这可能是您问题的答案。你至少需要三个表: tbl_Rooms(ID, Number, Type, Floor, Etc); tbl_Bookings(Room_ID,Client_ID, Date); tbl_Clients(ID,名称等);如果您尝试在 tbl_Bookings 表中使用日期范围,那么您必须重新编写我的第二个查询。
    猜你喜欢
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    • 2011-01-28
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多