首页 > 解决方案 > 每天时间范围内“可用性”的数据库表设计

问题描述

我正在开发一个会议安排网络应用程序,一个人可以在其中分享他们在一天内特定时间范围内的可用性。

例如,一个用户在一天内可以使用 3 个时间范围,从09:10 to 10:0013: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

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'

标签: sqldatabasepostgresqldatabase-design

解决方案


我建议你首先有一个时间范围表,它将时间范围保持在 5 分钟间隔,如下所示。您不应将 time_range 保留为文本字段。将它们保存在time数据类型中。

时间大师

+----------------+------------+
| TimeIntervalId | Timevalue  |
+----------------+------------+
|              1 |    00:00   |
|              2 |    00:05   |
|              . | .          |
|              . | .          |
|            288 |  23:55     |
+----------------+------------+

每个区间表示都应该使用这个时间主表。通过这种方式,您可以轻松地进行所有时间的计算。

Users:
- uuid
- sername

Days:
- pk
- name (eg. Monday)
- slug

Availability (mapping table):
- AvailabilityId, PK
- user_uuid
- day_id
- Start_timeIntervalId
- End_timeIntervalId

Schedule:
- schedule_id, Pk
- day_id
- user_id
- meeting_id
- meetingstart_timeIntervalId
- meetingend_timeIntervalId
- status

推荐阅读