我正在编写一个应用程序,为我们的商店索引数据,其中一些商店的营业时间较晚(上午8点至凌晨2点)。我们需要能够快速搜索这个数据库 - 基本上,运行一个查询来查找哪个商店在给定的时间点开放(现在,周日凌晨1点,无论如何)。
此外,开放/关闭时间可能每天都有所不同 - 例如,有些商店在星期日关闭。
对我来说,显而易见的解决方案是创建一个表格,其中包含商店ID,日期,营业时间和结束时间。对于星期一,早上8点到凌晨2点这样的事情,实际上是两排,一排是星期一0800 - 2400,一位是星期二0000 - 0200.
我们有很多商店,所以搜索必须表现良好(基本上,数据必须是索引友好的),但我还必须以人类可读的格式显示这些数据。根据我目前的解决方案,看起来像这样:
周一:8:00-午夜 星期二:午夜 - 凌晨2:00;上午8:00 - 午夜我只是想知道在我跳到实现之前是否有其他人有替代解决方案。谢谢!
答案 0 :(得分:3)
当PBS(美国公共广播系统)几年前遇到同样的问题时,他们发明了“30小时工作日”的想法 - 其中00:00是当天午夜的午夜,24: 00是当天午夜,25:00是第二天凌晨1点,30:00是第二天早上6点。那样周一截止时间26:00是周二早上2点。
不是两个记录代表单个商店一天的时间,而是将“存储日”视为对象可能更加面向对象。这样,1记录=一天的1个商店的时间。如果要存储两组打开/关闭时间,只需在记录中使用四个字段而不是两个 - 并适当调整查询。
请记住,您的查询应使用您编写和发布的库/ api。然后,库将处理数据存储及其数据布局。除了你的图书馆之外,没有人应该直接查看数据库。
时区在这类应用中也非常重要。 (希望)在某个时刻,连锁店将扩展到涵盖多个时区。然后,您需要确定查询的本地时间。 - 可能与处理查询的服务器的时区不同。
进一步的想法 -
我现在看到你正在标准化GMT。好。您还可以使用日期时间值(与时间值对比)并标准化到给定的一周。例如,开放时间是1995年1月1日上午10点 - 1995年1月2日星期一凌晨2点(使用1995年1月1日为基础,因为它是一个星期天)。
然后合理化你的“当前时间和日期”以匹配1995年1月1日这一周的同一点。然后查询以查找开放的商店日。
HTH,
拉里