如何使用活动记录存储多个日期范围
how to store many date range with active record
我正在为酒店开发一个预订系统,owners
可以在其中编辑 Room
个时间表。
为了在 Room
不可用 时存储日期,我的第一直觉是 table Occupancy
:
Occupancy.create from: "01-04-2022", to: "31-05-2022", room: @room
Occupancy.create from: "15-04-2022", to: "15-05-2022", room: @room
我最终会重叠 Occupancies
,但没关系。
但是现在,我希望owner
能够选择在四月的第一个周末Room
空缺。
而且我不知道如何使用此模式执行此操作,除非创建另一个 table,或向 Occupancy
添加一列。
所以,我正在考虑在 Room
table 的列中存储占用日期的数组,可能使用 json
格式。
但我觉得当我需要查询给定时间段内的可用房间时,我可能会遇到困难。
听起来不适合这项工作。
我过去曾开发过一个预订系统,该系统的建模与您当前的方法类似,并且运行良好。我们有一个相当于 Occupancies
的 Bookings
和 InternalHolds
的第二个 table 用于您描述的用例,以及清洁等其他任务或维护。
这在很长一段时间内都运行良好。最终,我们最终提取了可预订日历天数的非规范化 table,但它是从预订和保留中派生的。
在更大的规模和更长的时间范围内,您最终可能会在 Postgres 之外拥有一些专用的搜索基础设施(想想地理搜索、便利设施过滤和 full-text 搜索),这将需要这种反规范化无论如何。
我会犹豫直接跳到 JSON 列方法,因为查询会更加棘手。对于很多查询,您要么被困在写棘手的 non-portable SQL 中;要么或加载所有房间的每次入住情况,以便能够随时回答“从星期二开始有哪些房间可供入住 3 晚”之类的查询。
我正在为酒店开发一个预订系统,owners
可以在其中编辑 Room
个时间表。
为了在 Room
不可用 时存储日期,我的第一直觉是 table Occupancy
:
Occupancy.create from: "01-04-2022", to: "31-05-2022", room: @room
Occupancy.create from: "15-04-2022", to: "15-05-2022", room: @room
我最终会重叠 Occupancies
,但没关系。
但是现在,我希望owner
能够选择在四月的第一个周末Room
空缺。
而且我不知道如何使用此模式执行此操作,除非创建另一个 table,或向 Occupancy
添加一列。
所以,我正在考虑在 Room
table 的列中存储占用日期的数组,可能使用 json
格式。
但我觉得当我需要查询给定时间段内的可用房间时,我可能会遇到困难。
听起来不适合这项工作。
我过去曾开发过一个预订系统,该系统的建模与您当前的方法类似,并且运行良好。我们有一个相当于 Occupancies
的 Bookings
和 InternalHolds
的第二个 table 用于您描述的用例,以及清洁等其他任务或维护。
这在很长一段时间内都运行良好。最终,我们最终提取了可预订日历天数的非规范化 table,但它是从预订和保留中派生的。
在更大的规模和更长的时间范围内,您最终可能会在 Postgres 之外拥有一些专用的搜索基础设施(想想地理搜索、便利设施过滤和 full-text 搜索),这将需要这种反规范化无论如何。
我会犹豫直接跳到 JSON 列方法,因为查询会更加棘手。对于很多查询,您要么被困在写棘手的 non-portable SQL 中;要么或加载所有房间的每次入住情况,以便能够随时回答“从星期二开始有哪些房间可供入住 3 晚”之类的查询。