sql - 每天时间范围内“可用性”的数据库表设计
问题描述
我正在开发一个会议安排网络应用程序,一个人可以在其中分享他们在一天内特定时间范围内的可用性。
例如,一个用户在一天内可以使用 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
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'
解决方案
我建议你首先有一个时间范围表,它将时间范围保持在 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
推荐阅读
- php - APCu 定期重置,零正常运行时间
- javascript - 使用最新版本的 d3-path 配置 jest
- javascript - 填充嵌套在模型内的数组内的文档,猫鼬
- r - 创建一个循环来预测数据框中每一列的值
- django-models - 模型元类与模型形式元类有何不同?
- javascript - 您可以在不更改对象构造函数的情况下向对象构造函数添加新的动态参数吗?
- android - Android 开发者控制台:在发布概览中选择发布轨道?
- python - 我们需要为下面的 CNN 模型优化多少模型参数?
- reactjs - 如何在 React js 中使用 web3 连接 mathwallet 和 coin98wallet?
- javascript - 使用 jest 中途停止并行执行