在数据库中存储可用时段

时间:2018-03-20 15:08:25

标签: database postgresql data-structures database-design

我正在寻找一种高效,结构化,可比较且可查询的方式,可以在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允许轻松操作和显示数据。

0 个答案:

没有答案