sql - 数据库中的营业时间使用什么数据类型

标签 sql oracle time intervals

我想跟踪各个商店的营业时间,但我不知道什么是最好的存储方式。

一个直观的解决方案是设置每一天的开始和结束时间。但这意味着每天有两个属性,这看起来不太好。

另一种方法是为每一天设置一个开始时间和一个day to second 间隔。但是,这仍然意味着两个属性。

最常见和最简单的表示方法是什么?我正在使用甲骨文。

最佳答案

您需要的最低粒度可能是分钟(实际上,可能是 15 分钟的间隔,但称之为分钟)。

可能您还想考虑星期几。

如果您使用如下表格:

create table day_of_week_opening_hours(
  id                            integer primary key,
  day_of_week                   integer not null,
  store_id                      integer not null,
  opening_minutes_past_midnight integer default 0 not null,
  closing_minutes_past_midnight integer default (24*60) not null)

在 store_id 和 day_of_week 上弹出唯一约束,对于给定的商店和星期几,您可以通过以下方式找到营业时间:

the_date + (opening_minutes_past_midnight * interval '1 minute')

或者...

the_date + (opening_minutes_past_midnight / (24*60))

一天 24 小时营业的商店可以用特殊代码而不是营业时间表示,在单独的表格中而不是特殊的营业时间和营业时间,或者您可以将营业时间/营业时间保留为空。

create table day_of_week_24_hour_opening(
  id                            integer primary key,
  day_of_week                   integer not null,
  store_id                      integer not null)

还要考虑在给定日期根本不营业的商店,以及如何表示这一点。

也许您也可以使用基于日期的覆盖来指示特定日期(圣诞节等)的不同(或没有)营业时间。

这是一个非常有趣的问题。

关于sql - 数据库中的营业时间使用什么数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19894829/

相关文章:

iOS - backgroundTimeRemaining 值未显示预期值

sql - 如何只存储时间;不是日期和时间?

sql - 从 bash 创建 postgresql 时出错 - 安装和导入

sql - 创建所有可能组合的列表

sql - 查询优化不适合左外连接

sql - 数据库字段定义

mysql - 查询 "the number of row"

mysql - 按日期时间字段对数据进行分组

Oracle:获取用户的功能列表

c - 如何在c中将秒添加到当前时间?