请容忍我,我是个数据库初学者。我正在开发一个会议安排web应用程序,在这个应用程序中,一个人可以共享一天中特定时间段的可用性。
e、 g.一个用户在一天内有3个时间范围,从 09:10 to 10:00
, 13:00 to 14:00
以及 16:30 to 17:15
.
每周可以持续6天,从周一到周六。
我想到的是:
Users:
- uuid
- sername
Days:
- pk
- name (eg. Monday)
- slug
Availability (mapping table):
- user_uuid
- day_id
- timerange
Schedule:
- pk
- schedule_id
- day_id
- user_id
- meeting_id
- time_from
- time_to
- status
但是我不知道如何在时间范围之间进行查询,如果我搜索一个可以从 16:30 to 16:50
我真的不知道怎么做。
我在用postgresql
编辑#1:提供一些数据
Availability:
user_uuid | day_id | timerange
-------------------------------------------
b1b14b30 | 3 | '09:15 - 10:00'
a7f611ea | 1 | '13:05 - 14:05'
a7f611ea | 1 | '16:30 - 16:45'
Scheduled meeting (2 users having a meeting):
schedule_id | user_uuid | day_id | timerange
-------------------------------------------------------------
1 | b1b14b30 | 3 | '09:15 - 10:00'
2 | a7f611ea | 1 | '09:15 - 10:00'
3条答案
按热度按时间py49o6xq1#
对于您的用例,使用范围类型无疑是一个很好的解决方案。但是,您可以考虑以epoch格式(主要是bigint数据类型)存储时间戳(range\u start和range\u end)。postgresql提供了将epoch转换为可读时间戳的方法,反之亦然。
epoch值将使实现(主要围绕可用性检查)保持简单。
https://www.epochconverter.com/
rmbxnbpk2#
可用性表的定义如下:
可用性(Map表):
用户ID
日id
时间范围\开始类型
TIME with time zone
时间范围\停止类型TIME with time zone
然后找到当天可用的所有用户我觉得一个星期不够,所以你应该把完整的日期留着。您需要标记某人已分配到会议,以便从可用性中删除该行或添加状态字段。祝你好运!
jtoj6r0c3#
我建议你首先有一个时间范围表,它将时间范围保持在5分钟的间隔,如下所示。不应将时间范围保留为文本字段。把它们放在箱子里
time
数据类型。计时器
每个间隔表示都应该使用这个时间主表。这样,您就可以轻松地进行所有时间的计算。