我正在寻找一种高效,结构化,可比较且可查询的方式,可以在24小时内存储一个到多个可用性插槽。
我需要例如存储一个人可以从8到12和13到17点钟(24小时格式)。
此外,我还需要存储机构的开放时间。
最后,我需要查询机构开放时间内所有人的可用性概况,以及每天每小时有多少人可以使用,例如
到目前为止我想出的是:
为了存储可用性,我在夫妻中选择了int[]
,意思是从 - 到,表示为当天的分钟。
示例:
[480,720,780,1020] // 08:00 - 12:00, 13:00 - 17:00
[480,1020] // 08:00 - 17:00
[600,1200] // 10:00 - 20:00
[495,615,660,810] // 08:15 - 10:15, 11:00 - 13:30
现在存储的粒度必须是15分钟,但可能会更多或更少,甚至可能在将来达到分钟。
底层表结构(PostgreSQL)将是这样的:
create table institution (
id uuid not null primary key,
...
opening_times int[]
)
create table person (
id uuid not null primary key,
...
availability int[]
)
这是一个不错的选择吗?
另一个选择是将所有可用的插槽存储到粒度:
[480,495,510,525] // 08:00 - 09:00, meaning 08:00-08:15, 08:15-08:30, 08:30-08:45, 08:45-09:00
请注意,此处我们不会将数据存储在配对中(从 - 到),但每个值都意味着&#34;插槽从值开始,持续粒度< / em>可用。 8 - 9 o&#39;时钟对应4个粒度槽(15分钟)。
这样做的好处是没有间隙,可能有助于计算和查询,但代价是使用更多数据。
我认为最后一个选项会更好,因为它可能更容易查询。
还是有其他可能性吗?
提前致谢。
编辑:
请注意,我使用Hibernate SQLQuery来获取数据。存储是通过持久化实体来完成的,该实体使用自定义UserType可以很好地处理数组属性。在UI级别,我使用Polymer,因此JavaScript允许轻松操作和显示数据。