选项1
您将使用 3 列存储可用性(假设使用单个 id col 来标识用户)
availability_start, availability_end, user_id
基于日期时间的搜索将类似于
select
user_id
from
availability
where
desired_datetime > availability_start
and
desired_datetime < availability_end
根据您要提供的功能,您可能希望删除过去的日期。显然,您需要根据人们的循环日期定义来决定将日期存储到未来多远。
选项 2
如果它总是像选择一周中的个别日子和这些日子的时间一样简单。您可以将循环日期存储为
user_id, day_of_week, availability_time_start, availability_time_end
开始和结束时间不需要日期组件。根据一周中的一天和时间进行搜索将类似于
select
user_id
from
availability
where
desired_day_of_week = day_of_week
and
desired_time > availability_time_start
and
desired_time < availability_time_end
顺便说一句,有一些库可以帮助创建这种重复的日期模式,在我工作的地方我们使用这个(Java),很可能有适合您的语言的 RFC 2445 实现。
如果您使用类似的东西,那么您将不会存储实际日期,而只是存储重复模式的详细信息,这不会真正帮助您解决问题。我们通过非常简单地从重复定义中获取值并将它们保存到 db 一个字段到一列来存储这些详细信息。
然后,您还可以存储未来某个定义时间量的日期/时间,并根据对重复定义的任何更改重新计算这些日期/时间,这显然会成为一个相当大的操作,具体取决于人们有多少时间表以及未来有多远你想存储数据。