2011-04-30 57 views
0

我遇到了一个问题,需要根据“期间”的销售目标跟踪实际销售额。期间可以是一天,一个月,一个季度或一年。使用唯一值存储时间段

起初,我想出了为PeriodType枚举(1-4,日,月,季,年分别)。鉴于此,我需要3个值来唯一地描述一个期间:1)PeriodType,2)PeriodYear的整数(例如2010,2011等),以及3)PeriodNumber的整数。

所以,举例来说,{} 1,2011,38将是2011年的一天2月2日,或者,{} 3,2,2010将在2010年或者{} 2,4,2012第二季度将是四月份,2012年

具有露出这三种属性的对象是没有问题的。但就数据库而言,我试图弄清楚如何将一个实体(如目标或销售)的关系存储到一个时期 - 在每个表中有3列并不高雅,期间关系。一种方法是为Period创建一个表,其中包含主键和其他3个值 - 但将Period保留下来是没有意义的,因为这是一个可以计算的时间概念。

什么是代表我的一个“周期”与一个唯一值的定义的最佳方式?或者我对一个时期的定义是错误的,并且有一种更简单的方法来做同样的事情?

回答

0

最简单的解决方案是将销售额存储为最低粒度级别,即一天。那么,将这些销售汇总为更长时间跟踪销售的目标就很简单了。

如果这不符合您的要求,数据如何收集和使用,并特别关注,为什么你需要一个更复杂的数据结构,你应该多一点详细的解释。


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

这是多么容易在实践中非常依赖于你的数据库的味道,但相当多的RDBMS应该支持此功能。

+0

感谢您的答案APC。是的,该计划的销售期限制为PeriodType of Day。目标期间不会有PeriodType约束。 考虑到这一点,我可以使用一个销售日期时间和一个目标(开始和结束)两个日期时间。但是看起来像逻辑去判断哪个时期类型给出了两个日期时间会很困难(但是解密单个值可能并不困难?)。 – 2011-04-30 17:16:10

+0

另外,在给定不同时区以及时间部分被截断的情况下(即可以输入两个不能解析为受支持时段的日期时间),数据似乎很容易被破坏。但是,也许这只是对更改数据进行严格验证的问题。但事实依然是,这个要求对时区不敏感,但不同的开发环境可能会不经意地强加它们,这会使验证更加复杂。 – 2011-04-30 17:16:17

相关问题