使用唯一值存储时间段

时间:2011-04-30 16:40:04

标签: database-design time calendar

我遇到一个问题,我需要根据“期间”的销售目标跟踪实际销售额。期间可以是日,月,季度或年。

最初,我提出了PeriodType的枚举(分别为1-4,Day,Month,Quarter,Year)。鉴于此,我需要3个值来唯一地描述一个Period:1)PeriodType,2)PeriodYear的整数(例如2010,2011等)和3)PeriodNumber的整数。

因此,例如,{1,2011,38}将是2011年2月2日。或者,{3,2,2010}将是2010年第二季度。或者{2,4,2012}将是2012年4月。

拥有一个公开这三个属性的对象不是问题。但就数据库而言,我试图弄清楚如何将实体(如目标或销售)的关系存储到一个时期 - 在每个表中需要一个3列的情况似乎并不优雅期间关系。一种方法是为Period设置一个具有主键和其他3个值的表 - 但是保持Period本身没有意义,因为它是一个可以计算的时间概念。

用一个唯一值表示我对“Period”的定义的最佳方法是什么?或者我对一个时期的定义是误导的,还有一种更简单的方法可以做同样的事情吗?

1 个答案:

答案 0 :(得分:0)

最简单的解决方案是将销售额存储在最低粒度级别,即一天。因此,将这些销售额汇总为追踪销售额较长时期的目标是一件简单的事情。

如果这不符合您的要求,您应该更详细地解释如何收集和使用数据,并特别关注您需要更复杂的数据结构的原因。


时区问题是有问题的,但不是一个停滞不前的问题。重要的是在时间上达成一个单一的真实点,应该是数据库,并保留UTC的所有日期时间。客户端在检索数据时必须将UTC转换为时区,反之亦然。

实际上这很容易取决于你的数据库风格,但几乎每个RDBMS都应该支持这个功能。

相关问题