我想跟踪各个商店的营业时间,但我不知道什么是最好的存储方式。
一个直观的解决方案是设置每一天的开始和结束时间。但这意味着每天有两个属性,这看起来不太好。
另一种方法是为每一天设置一个开始时间和一个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/