2015-11-06 79 views
0

我對如何設計季度和財政年度有一個自我辯論。季度和財政年度的數據庫設計

的情況:

對於一些公司的季度可以爲不同的年變化,如:區1(Q1):1/1-3/31 Q2:4/1-6/30 Q3:7/1-9/30 Q4:10/1-12/31

但在2012區的開始和結束可以改變: Q1:1/1- 4/15 Q2: 4/16-7/15 Q3:7/16-10/15 Q4:10/16 -12/31

所以我來了兩個不同的解決方案,但我不知道哪個更好。

解決方案1:

FiscalYear(年,沒有fromdate,q1ToDate,q2ToDate,q3ToDate,TODATE,otherColumns)

在此方案中,所有的季度結束將被保存,一切都在同一個表。

解決方案2:

FiscalYear(年,otherColumns)

區(fiscalYearId,FROM日期,TODATE,四分之一)

FiscalYear和四分之一有一個1〜4的關係。

思考:

我可以比較的是,解決方案1 ​​是好事,因爲我們知道,將有4個季度的所有年份。所以設計實際上是標準化的。

但是,解決方案2看起來更容易擴展。但是在檢索數據時你必須做一些連接。

你們認爲哪個更好?你的理由是什麼?

------編輯------

環境:

數據庫:MySQL的

回答

1

關閉我的頭頂,我喜歡解決方案2,因爲我覺得整體上我可以想象發生的各種查詢將會更容易。您可能會遇到一些交叉表變得重要的情況,但這些情況非常罕見。

現在您還沒有提及哪個數據庫,並且這些可能會提供其他選項。在PostgreSQL例如你在安排類型,這樣可以讓你做兩件事情:

  1. 確保沒有兩個季度重疊使用排除約束和
  2. 加入包含日期,使用範圍運營,包括季度一行。

現在,如果你的數據庫沒有這樣的功能,那麼你的第一個模型的一個優點是它確保沒有重疊。您可以通過假設所有宿舍都是連續的,並且可以免除開始日期(並根據上一行,可能使用窗口函數來查看)來仿真第二個宿舍。

+0

我將使用mysql作爲數據庫。感謝您的建議。 –

2

幾年前,當我們不得不處理這個問題時,我們提出了一個對我們非常有用的解決方案。我們建了一張桌子,我們稱之爲年曆,每個日期有一行。日期以日期表示,是此表的主要關鍵。

它具有各個相關時間段的列,例如會計年度,財政季度,甚至財政月份,這些年份各不相同。它也有列表示工作日,週末,公司假期等。簡而言之,公司日曆的所有功能。

然後,我們編寫了一個程序,用大約十年的數據填充此表。公司日曆的所有奇怪的邏輯都建立在這個程序中。

後來,當我們想要對其他事件進行分類時,例如銷售或工作班次的結果,我們只需要在該日期加入此表並選擇相關列。非常非常容易。

對報表數據庫非常方便。您可以在幾分鐘內在財政季度或財政年度推出相同的報告。