2015-07-21 100 views
0

現在有一個銷售數據庫,其中包含銷售產品明細列以及銷售額在一張表中。標準化銷售額的銷售數據庫

例如: 產品ID,產品名稱,Jan14 ... Dec14,Jan15 ... Dec15

的問題,現在是,有太多的列,現在,因爲我們不斷每年新增12列容納銷售額數據。我們試圖將此表分成兩個表格,一個用於產品信息,另一個用於基於期間的銷售額數據。關於如何構建銷售額表的任何想法?

我們是按月收款金額,那麼銷售金額表的期限標識是什麼? 2015年1月應該是'201501'還是每個銷售月份和年份應該有2個單獨的列。

回答

1

首先,恭喜您決定正常化您的數據。

這是一個非常簡單的問題,其答案非常簡單。你只需要兩個表:

產品表(產品ID,產品名稱)

ProductSales表(產品ID,SalesPeriod,SalesAmount兩個)

ProductIDProductName不是什麼新鮮事。在SalesPeriod列中,您可以存儲您總結銷售總額的時間段(2014年,2015年等,或者2014Q1,2014Q2等),無論您想要總結的時間段);而SalesAmount列是該期間的總銷售額。

您將爲Product/SalesPeriod組合中的每一行填入ProductSales

最後,您將一個外鍵添加到ProductSales,表示ProductID引用Product表中的ProductID列。

+0

你可能要代表SalesPeriod作爲有效的日期時間,例如2014年1月的'01/01/2014'等等。它可以使數據的彙總和查詢更容易。 –

+0

因此,最好是爲產品銷售表提供一個單獨的主鍵? – my779

+0

我們也可能希望將表格迴轉到非標準化版本(jan15..dec15)進行分析,那麼datetime作爲銷售期限最好? – my779

0

我認爲銷售額是可以在需要時計算的計算數據。

但是,如果計算需要很長的時間,你使用這個數據往往
銷售金額分居表可以創建

ProductID (INT PRIMARY KEY),從產品信息表的外鍵
MonthNumber (INT PRIMARY KEY)
​​
Amount (DECIMAL)

產品信息表保持不變,銷售期間的欄目除外

ProductID (INT PRIMARY KEY)ProductInfo (NVARCHAR)
OtherInfo (NVARCHAR)

然後每月你只需添加新行量爲每一個產品的

金額的週期可以代表不同的方式
根據您的需求:MonthYear只是您需要表示一段銷售額的值。 它可以是小出價快不操作查詢數據,並採取指數
例如的優勢,如果週期將被表示爲DateTime 然後用WHERE MONTH(PeriodDate) = 4查詢將被執行,而無需使用索引的