首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在数据库中存储营业时间

在数据库中存储营业时间
EN

Stack Overflow用户
提问于 2009-06-24 05:56:40
回答 6查看 43K关注 0票数 93

我目前正在尝试找出在数据库中存储企业运营小时数的最佳方法。

例如:

业务A的运营时间如下

  • 周一上午9点至下午5点
  • 周二上午9点至下午5点
  • 周三上午9点至下午5点
  • 周四上午9点至下午5点关闭H19>周五:上午9点至12点关闭

目前,我有一个类似于下面的数据模型

代码语言:javascript
运行
复制
CREATE TABLE "business_hours" (
    "id" integer NOT NULL PRIMARY KEY,
    "day" varchar(16) NOT NULL,
    "open_time" time,
    "close_time" time
)

其中"day“被限制为在代码中选择一周中的7天(通过ORM)。为了测试某个业务是否在某一天关闭,它会检查open_time和close_time是否为空。它通过中间表与业务相关(多对多关系)。

有没有人对这个数据库方案有什么建议?在我看来有些地方不太对劲。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-06-24 06:01:17

总体而言,我认为这没有什么错。除了..。

  1. 我会将星期几存储为一个整数,使用您的本地编程语言使用的任何编号系统(在其库中)。这将减小数据库的大小,并从代码中删除字符串比较。
  2. 我可能会将业务表的外键放在这个表中。这样你就不需要链接表了。

所以我想我会这么做:

代码语言:javascript
运行
复制
CREATE TABLE "business_hours" (
     "id" integer NOT NULL PRIMARY KEY,
     "business_id" integer NOT NULL FOREIGN KEY REFERENCES "businesses",
     "day" integer NOT NULL,
     "open_time" time,
     "close_time" time
)

在我的业务逻辑中,我会强制要求每个“业务”至少有7个“营业时间”。(至少因为乔恩·斯基特是对的,你可能想要度假时间。)尽管你可能想要放松这个限制,简单地把“营业时间”放在关闭的日子里。

票数 64
EN

Stack Overflow用户

发布于 2012-08-10 19:56:00

此模式未涵盖的一种情况是一天中有几个开场期。例如,当地酒吧的营业时间为12:00-14:30和17:00-23:00。

也许一家剧院的票房可以用来看日场和晚上的演出。

在这一点上,您需要决定是否可以在同一天有多个条目,或者是否需要在同一行中表示不同的小时。

那跨过午夜的营业时间呢?假设酒吧营业时间是19:00-02:00。您不能只将打开和关闭时间与您想要测试的时间进行比较。

票数 31
EN

Stack Overflow用户

发布于 2014-11-21 17:14:50

我了解到,如果你想让google数据标记识别你的数据,你应该遵循以下指导原则:

https://schema.org/openingHours

http://schema.org/OpeningHoursSpecification包含“有效日期”,这对于某些业务非常有用。

https://schema.org/docs/search_results.html#q=hours

没有主键应该没问题,除非您允许企业与连接表共享相同的时间-有趣的是,最终您将有有限数量的组合;我不确定有多少组合:p

在我的一个项目中,我使用了列:

uIntbusiness_id,uTinyIntday,char(11)timeRange

如果你想支持OpeningHoursSpecification,那么你需要添加validFrom和validThrough。

时间范围的格式如下: hh:mm-hh:mm

这是一个解析它的函数,如果你在数据库中将它们作为单独的列保存,你也可以修改这个函数来解析一个单一的open/close。

根据我的经验,我建议您在一天内允许多次,允许一种方法来判断它们是在当天显式关闭,还是24小时或24小时全天候开放。我的建议是,如果数据库中缺少一天,那么业务就会在当天关闭。

代码语言:javascript
运行
复制
/**
 * parseTimeRange
 * parses a time range in the form of
 * '08:55-22:00'
 * @param $timeRange 'hh:mm-hh:mm' '08:55-22:00'
 * @return mixed ['hourStart'=>, 'minuteStart'=>, 'hourEnd'=>, 'minuteEnd'=>]
 */
function parseTimeRange($timeRange)
{
    // no validating just parsing
    preg_match('/(?P<hourStart>\d{1,2}):(?P<minuteStart>\d{2})-(?P<hourEnd>\d{1,2}):(?P<minuteEnd>\d{2})/', $timeRange, $matches);

    return $matches;
}
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1036603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档