固定可用性计划的最佳结构是什么?

时间:2018-12-17 08:06:43

标签: mysql database calendar schedule

我正在设置一个日历,用户可以在日历上指出何时可用。日历每天分为3个时段,每周7天(星期一上午,星期一下午,星期一晚上)。

我对将其存储在数据库中的最佳方法有些困惑。我已经考虑过要这样做:

开始日期

结束日期

user_id

时隙

user_id

user_id& mon1 mon2 mon3 ... sun3 创建21列似乎不是最佳选择,但这确实使可用性查询非常容易。

我想在定义时段的时间上保持一些灵活性。第二个似乎是给我的,因为之后我可以定义每天的小时数。

最后,我必须能够查找谁在2019-02-01 13:00:00-2019-02-01 17:15:00可以找到谁。这些日期将与时间段不对应。

1 个答案:

答案 0 :(得分:0)

您可以使用3个字段来存储此信息,

slot_date - to store date of slot like 2018-12-17, 2018-12-18, etc
slot_time - to store time slot like 13:00:00, 15:00:00, etc
user_id - to store user identifier

假设您的2个具有这些字段的用户的示例数据看起来像这样,

slot_date    slot_time    user_id
---------------------------------
2018-12-17    14:00:00      1
2018-12-17    17:00:00      2

您可以轻松获得给定时间段内的用户可用性。例如,您想获取今天下午的时段(考虑下午1点至下午4点是傍晚时段),可以通过以下查询来检索

SELECT slot_date, slot_time, user_id
FROM tbl_slot 
WHERE slot_date = '2018-12-17'
AND slot_time BETWEEN '13:00:00' AND '15:00:00'

类似地,您可以更改查询中的slot_time子句以在早上和晚上的时段工作。

更新

根据OP的要求,如果用户选择日期和时间段,则该日期适用于每月/每年。基于此,您消除了slot_date列,并使用day_of_week来存储1到7的整数值,即(Sun到Sat)

day_of_week    slot_time    user_id
-----------------------------------
    2           14:00:00      1
    2           17:00:00      2

然后,将获取所有下午的可用时间的查询,

SELECT day_of_week, slot_time, user_id
FROM tbl_slot 
WHERE day_of_week = '2'
AND slot_time BETWEEN '13:00:00' AND '15:00:00'