我需要数据库设计方面的帮助以及如何管理查询以存储母版的时间表,并找到在母版可用时向客户显示的间隙。我可以使用mysql或postgres。我只是坚持如何做到这一点。小提琴:http://sqlfiddle.com/#!9/071e21
一些描述:
1.大师可以有定期的时间表,如星期一:08:00-18:00,周二:09:00-19:00或奇数/偶数天(例如主人只能在月份的奇数天工作),能够设定周末(无论奇数/偶数日,但星期日是周末没有什么)
2.大师在设置中有interval_between_clients_in_minutes参数。例如,主人在客户之间有60分钟,但有人预定从08:00到09:30访问,这意味着从09:30到10:00没有人可以预订,因为这个interval_between_clients(就像一个插槽,1小时 - 1个插槽,如果您预订1.5小时 - 您预订2个插槽)
3.师父可以增加假期(例如假期,圣诞节)或短暂的工作日
4.当客户端书籍访问主人时,他的总持续时间以分钟为单位,例如60分钟,因此如果主人只有30分钟的可用时段,则表示此插槽不可用且不应包括在内。
我现在有这个表:
主人:
id - 整数
name - varchar
interval_between_clients_in_minutes - 整数
客户端
id - 整数
name - varchar
时间表
id - 整数
master_id - 整数
day_of_week - 整数
open_time - 时间
close_time - 时间
schedule_type(1 - 常规,2 - 奇/偶)
schedule_exceptions
id - 整数
master_id - 整数
exception_date - 日期
exception_open_time - 时间
exception_close_time - 时间
exception_day_of_week - 整数
is_closed - 布尔值
访问次数
master_id - 整数
client_id - 整数
visit_at - datetime
visit_end - datetime
duration_in_minutes - 整数
预期结果:
上述期间每天的主人营业时间EXCLUDE每个日期的访问次数。
示例:master从08:00-18:00开放,但已经从09:00到10:00访问,这意味着我需要排除09:00-10:00期间并显示可用的差距:此特定日期的08:00-09:00,10:00-18:00。如果是来自schedule_exceptions的周末或假日 - 则没有结果。