【发布时间】:2017-06-05 23:32:51
【问题描述】:
这个问题是reddit用户/u/Dasharg95的asked on behalf。
我想建立一个酒店房间预订系统,每个酒店房间都可以在任意时间范围内预订。针对预订数据集的常见查询是试图找出在给定时间范围内有哪些房间可用。预订数据集是否有可以有效执行此类查询的数据结构?
例如,假设我们有五个房间,占用时间如下:
room 1: 9:00 -- 12:00, 15:00 -- 18:00, 19:30 -- 20:00
room 2: 8:00 -- 9:30, 15:30 -- 17:30, 18:00 -- 20:00
room 3: 6:30 -- 7:00, 7:30 -- 8:15
room 4: 12:00 -- 20:00,
room 5: 7:00 -- 14:15, 18:00 -- 21:55
我想要一个占用时间的数据结构,该结构具有合理的空间效率,并允许以合理的性能执行以下查询:
- 给定房间的占用时间
- 在给定时间范围内哪些房间是免费的
【问题讨论】:
-
你不需要一个单纯的数据结构,你需要一个规范化的关系数据库。太宽泛了。
-
@EJP 我不确定关系数据库如何解决这个问题。你能写一个答案,解释我可以在哪些关系上运行哪些查询来解决这个问题?
-
这个问题的答案在很大程度上取决于房间数量、时间范围的粒度以及可用的插槽总数。如果我们在一天内谈论几十个房间,粒度为 15 分钟,那么幼稚的方式就足够了。如果您说的是酒店的数千间客房,您可以提前数年预订多天,那就完全不同了。
-
@JimMischel 我说的是后一种情况。我对理论上的解决方案感兴趣,而不是“在实践中足够好”的解决方案。
-
那么关系数据库就是解决方案。这不仅仅是一个简单的“这里是代码”。这是一个相当复杂的系统。
标签: data-structures language-agnostic