我目前正在尝试找出在数据库中存储企业运营小时数的最佳方法。
例如:
业务A的运营时间如下
H19>周五:上午9点至12点关闭目前,我有一个类似于下面的数据模型
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是否为空。它通过中间表与业务相关(多对多关系)。
有没有人对这个数据库方案有什么建议?在我看来有些地方不太对劲。
发布于 2009-06-24 06:01:17
总体而言,我认为这没有什么错。除了..。
所以我想我会这么做:
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个“营业时间”。(至少因为乔恩·斯基特是对的,你可能想要度假时间。)尽管你可能想要放松这个限制,简单地把“营业时间”放在关闭的日子里。
发布于 2012-08-10 19:56:00
此模式未涵盖的一种情况是一天中有几个开场期。例如,当地酒吧的营业时间为12:00-14:30和17:00-23:00。
也许一家剧院的票房可以用来看日场和晚上的演出。
在这一点上,您需要决定是否可以在同一天有多个条目,或者是否需要在同一行中表示不同的小时。
那跨过午夜的营业时间呢?假设酒吧营业时间是19:00-02:00。您不能只将打开和关闭时间与您想要测试的时间进行比较。
发布于 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小时全天候开放。我的建议是,如果数据库中缺少一天,那么业务就会在当天关闭。
/**
* 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;
}https://stackoverflow.com/questions/1036603
复制相似问题