2011-04-30 63 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

相關問題