SQL用于营业时间

时间:2010-04-27 13:22:42

标签: sql database schema

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

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

2 个答案:

答案 0 :(得分:33)

构建另一个表,将其称为schedules,将外键添加到shops表主键,Day of week字段,time_opentime_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

这将为您提供构建任何类型的计划的机会,您可以根据需要使用多少个窗口,以及需要多少个例外。它是普遍的,仅限于它希望所有周都相同的事实。没有考虑过假期,也没有人可能使用的奇数/偶数周时间表。

修改:
有了朱利安的问题,关于夜间工作的工作时间,我注意到以前的解决方案不是最好的。您不能在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

答案 1 :(得分:5)

您使用的是哪种类型的数据库?如果是mysql,请输入“time”类型的字段。然后你可以传递它的时间并对它们进行基本的sql时间操作。这整篇文章假设是mysql。

如果只有一家商店并且您知道商店永远不会增长,那么只需创建一个名为商店开放时间的表格。然后,如果您想查看商店是否已打开,只需根据数据库中的某个范围检查当前时间。

如果有多个商店,请创建一个名为“times”的表和一个名为“stores”的表。在时间表中,列可以是“打开”和“关闭”,其ID为“store_id”。商店表也需要一个id。然后,你可以说:

"SELECT open, close FROM times WHERE store_id=x"

这将为您提供与特定商店相关的所有时间范围。