营业时间 SQL

标签 sql database schema

在我的商店数据库中,我需要有营业时间。你知道我如何在我的 dB 中实现它吗?

开放时间为周一至周日,每天可有2个开放窗口(ex 09:00-12:00, 16:00-19:00)

最佳答案

再建一张表,命名为schedules,在shops表主键中添加一个外键,一个Day of week字段,time_open, time_closed。 数据应如下所示:

shop_id     day_of_week      time_open        time_closed
1           1                09:00            12:00
1           1                16:00            19:00
1           2                09:00            12:00
1           2                16:00            19:00
1           3                09:00            12:00
1           3                16:00            19:00
1           6                10:00            14:00
2           1                09:00            12:00
2           1                13:00            18:00

这将使您有机会构建任何类型的时间表,窗口数量随心所欲,异常(exception)情况数量随心所欲。它是通用的,仅限于它期望所有星期都相同的事实。没有考虑假期,也没有考虑某人可能使用的奇数/偶数周时间表。

编辑:
关于 Julien 的问题,关于夜间营业的工作时间,我注意到以前的解决方案并不是最好的。您不能让柱线在 20:00 开盘,在 06:00 收盘,然后比较当前时间 (02:45) 是否在此间隔内,因为它不会。这就是为什么最方便的不是登记下类时间,而是登记总工作时间,以方便的计量单位(例如分钟)。

shop_id     day_of_week      time_open        working_time
1           1                09:00            180
1           1                16:00            180
1           2                09:00            180
1           2                16:00            180
1           3                09:00            180
1           3                16:00            180
1           6                10:00            240
2           1                09:00            180
2           1                13:00            300

关于营业时间 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2721533/

相关文章:

php - Cakephp 查询更新失败

php - 如何提取所有在laravel中重复的行?

mysql - 有没有比为每个排列创建索引更好的索引多列的方法?

database - 使用条目更改数据库模式

html - Schema.org - 隐藏元素的数据

node.js - 如何通过 Joi.validate 验证数据库中的唯一性?

sql - 如果联接表缺少该日期的记录,则在 SQL 中返回 NULL

sql - 在 MySQL 中插入默认值作为当前日期 + 30 天

sql - 在实时数据库中迁移数据的查询?

database - 具有 2 个字段但一次只能使用一个字段的表