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

7gs2gvoe  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(345)

我正在设置一个日历,用户可以在上面指示他们何时可用。日历分为每天3个时段,每周7天(周一上午、周一下午、周一晚上)。
我有点纠结于最好的办法是把它存储在我的数据库里。我想过要做:
开始日期
结束日期
用户id

时隙
用户id

user\u id&mon1mon2mon3…sun3创建21列似乎不是最佳选择,但它确实使可用性查询变得非常简单。
我想保留一些灵活的时间来定义的插槽。第二个似乎给了我这个,因为我可以定义以后每天的小时数。
最后我必须能够查到谁在2019-02-01 13:00:00-2019-02-01 17:15:00有空。这些日期与时隙不符。

pexxcrt2

pexxcrt21#

您可以使用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

假设两个用户的示例数据中包含这些字段,

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'

相关问题