您好,匿名用户
随意问技术百科期待您的加入

关于酒店订房系统的数据库设计

+1 投票

酒店有若干房间,房间有若干类型。
给定房间数和一个时间区间(以天为单位),给定房间类型。查询数据库当前状态,如果满足订房条件则产生订单,否则返回false。如果返回false时能给出合理的订房建议则更佳。

我考虑的方案:
---------------------------------------------------------------

房间表:
room_id
room_type 房间类型
room_status 房间状态[是否空置]
room_order_id order表外键,被那个订单预定
room_order_start 时间区间左标
room_order_end 时间区间右标
...

订单表:
order_id
order_rooms 预定的房间总数
order_room_type 预定的房间类型
order_start 预定区间左标
order_end 预定区间右标
...

下订单的流程
从房间表找未预定的或者预定区间同用户选择区间不重叠的房间,如果符合条件的房间总数小于用户选择的房间数,返回false,否则返回true。

问题与疑惑
-----------------------------------------------------------------
这种设想没有整合房间资源,例如A、B房间均被预定且都在新订单选择的时间区内,都不符合查询条件。但是A、B
综合起来是满足时间区间的,A退房之后原来的B可以使用A房间。
个人感觉这个很类似内存管理的算法,用有限的房间类型和房间数来满足无限多的客人入住。本人才疏学浅,请各位
多指教。

用户头像 提问 2012年 12月1日 @ Renekton 上等兵 (260 威望)
分享到:

1个回答

0 投票

拍拍脑袋想,貌似用sql查询满足不了下单流程的需求。
这个房间订单,是离散的区间集合,而下单所需要的查询是对这些离散区间取反进行查询。关系库搞不定这种查询。
针对这种离散区间的数据结构,房价表中room_order_start,room_order_end两个字段就没必要了,可以干掉。
其实就按照这样的设计,用多条查询也能满足下单需求,只是很不优雅:遍历房间表,一个一个的看房间是否满足下单条件。
如果优雅一点,在内存里给每一个房间做索引,每次下单去内存里进行匹配(匹配过程也是个遍历,只是索引在内存里,而且可以直接定位房间号,效率不是那么低)。
另外:还需要一张房间类型表吧?这样你可以配置房间类型什么的。

用户头像 回复 2012年 12月1日 @ Poppy 上等兵 (395 威望)
提一个问题:

相关问题

0 投票
1 回复 42 阅读
用户头像 提问 2012年 12月1日 @ Leo 上等兵 (255 威望)
0 投票
1 回复 38 阅读
用户头像 提问 2012年 12月1日 @ Sejuani 上等兵 (427 威望)
+2 投票
1 回复 125 阅读
0 投票
1 回复 36 阅读
用户头像 提问 2012年 12月1日 @ Wukong 上等兵 (475 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...