目前,有一个销售数据库,其中包含销售产品明细列以及一个表中的销售额。
例如: ProductID,ProductName,Jan14 ... Dec14,Jan15 ... Dec15
现在的问题是,由于我们每年不断添加12列以容纳销售额数据,因此目前列数太多。我们尝试将此表分为2个表,一个用于产品信息,另一个用于基于期间的销售额数据。关于如何构建销售额表的任何想法?
我们是每月的收款金额,那么销售金额表的期间标识符应该是多少? 应该是2015年1月的“201501”,还是每个销售月份和年份应该有2个单独的列。
答案 0 :(得分:1)
首先,祝贺您决定规范数据。
这是一个非常简单的问题,答案非常简单。你只需要两张桌子:
产品表(ProductID,ProductName)
ProductSales表(ProductID,SalesPeriod,SalesAmount)
ProductID
和ProductName
并不是什么新鲜事。在SalesPeriod
列中,您可以存储总结销售总额的期间(2014年,2015年等,或者可能是2014Q1,2014Q2等,无论您想要总结的是什么); SalesAmount
列是该期间的总销售额。
对于每个ProductSales
/ Product
组合,您将为SalesPeriod
填充一行。
最后,您向ProductSales
添加一个外键,表示ProductID
引用ProductID
表中的Product
列。
答案 1 :(得分:0)
我认为销售额是计算可以在需要时计算的数据。
但是如果计算需要很长时间而且你经常使用这些数据 可以创建销售额的分隔表
ProductID (INT PRIMARY KEY)
,产品信息表中的FOREIGN KEY
MonthNumber (INT PRIMARY KEY)
,
YearNumber (INT PRIMARY KEY)
Amount (DECIMAL)
产品信息表保持不变,销售期列除外
ProductID (INT PRIMARY KEY)
,
ProductInfo (NVARCHAR)
,
OtherInfo (NVARCHAR)
然后每个月你只需为每个产品添加新行
金额的期间可以用不同的方式表示
根据您的需求:Month
和Year
只是表示销售期所需的值。
它可以很快出价查询数据而无需操纵和利用索引
例如,如果Period将表示为DateTime
那么WHERE MONTH(PeriodDate) = 4
的查询将在不使用索引的情况下执行