Database design 需要数据库设计建议

Database design 需要数据库设计建议,database-design,data-warehouse,Database Design,Data Warehouse,我需要为药品的日常销售设计一个表格 有数百种类型的产品可用{Name,code} 成千上万的销售人员受雇于销售这些产品{名称,代码} 他们从不同的仓库{名称,代码}收集产品 他们在不同的区域->区域->市场->门店等工作{都有名称和代码} 每种产品都有各种类型的价格{生产价格、贸易价格、业务价格、折扣价格等]。而且,销售人员可以自由选择这些组合来估计销售价格 问题是,日常销售需要大量的数据输入。几年内可能会有千兆字节的数据(如果不是千兆字节的话)。如果我需要显示每日、每周、每月、每季度和每年的销

我需要为药品的日常销售设计一个表格

有数百种类型的产品可用{Name,code}

成千上万的销售人员受雇于销售这些产品{名称,代码}

他们从不同的仓库{名称,代码}收集产品

他们在不同的区域->区域->市场->门店等工作{都有名称和代码}

每种产品都有各种类型的价格{生产价格、贸易价格、业务价格、折扣价格等]。而且,销售人员可以自由选择这些组合来估计销售价格

问题是,日常销售需要大量的数据输入。几年内可能会有千兆字节的数据(如果不是千兆字节的话)。如果我需要显示每日、每周、每月、每季度和每年的销售报告,我将需要各种类型的sql查询

这是我最初的设计:

Product {ID, Code, Name, IsActive}
ProductXYZPriceHistory {ID, ProductID, Date, EffectDate, Price, IsCurrent}
SalesPerson {ID, Code, Name, JoinDate, and so on..., IsActive}
SalesPersonSalesAraeaHistory {ID, SalesPersonID, SalesAreaID, IsCurrent}
Depot {ID, Code, Name, IsActive}
Outlet {ID, Code, Name, AreaID, IsActive}
AreaHierarchy {ID, Code, Name, PrentID, AreaLevel, IsActive}
DailySales {ID, ProductID, SalesPersonID, OutletID, Date, PriceID, SalesPrice, Discount, etc...}
现在,除了索引,我如何规范我的
DailySales
表,使其具有细粒度的设计,在未来几年中我将不需要更改

请根据上述信息,仅向我展示数据输入表的样本设计
DailySales
(所有类型的报告都将从该表中查询)


我不需要详细的设计建议。我只需要一个关于
DailySales
表的建议。有没有办法打破这个特定的表来实现粒度?

为什么不在产品上写上日期和价格,这样您就可以从dailysales表中降低价格,因为您可以通过加入来获得它

除非销售人员可以更改价格,数据库中没有任何理由

在给定的日期,销售人员只能在一个销售点工作吗?如果是这样的话,你就可以放弃学业

您有PriceiD、SalesPrice和折扣。如果我知道折扣、门店id和原价,那么我就可以确定税费,然后计算销售价格,这样你就有可能放弃

但是,这意味着您正在按日期存储税务信息,以跟踪销售发生时的税务信息

我的观点是,您应该查看另一个表中已经存在的内容,然后可以简化daily sales表

例如,您需要按天/月/年将信息从中拉入临时表,以帮助按日期聚合数据,从而更快地生成报告

你的问题中有很多未知数,但希望这会有所帮助

更新:基于评论

我有一个表,其中包含了关于某人何时使用资源的使用信息,该表很快就变大了。因此,我们决定只保存2到3年的数据,其余的数据将被聚合,原始数据转储到一个文件中以供存档

在查看行数时,您需要决定需要保留多少数据,以及如何归档旧数据,以便在绝对需要时使其可用,但是,您可以事先生成需要的报告


通过减少列数,您将对存储空间产生很大影响,如果这是一个问题,因为许多列可能不会为空。

为什么不在产品上输入日期和价格,这样您就可以从dailysales表中降低价格,因为您可以通过加入来获得价格

除非销售人员可以更改价格,数据库中没有任何理由

在给定的日期,销售人员只能在一个销售点工作吗?如果是这样的话,你就可以放弃学业

您有PriceiD、SalesPrice和折扣。如果我知道折扣、门店id和原价,那么我就可以确定税费,然后计算销售价格,这样你就有可能放弃

但是,这意味着您正在按日期存储税务信息,以跟踪销售发生时的税务信息

我的观点是,您应该查看另一个表中已经存在的内容,然后可以简化daily sales表

例如,您需要按天/月/年将信息从中拉入临时表,以帮助按日期聚合数据,从而更快地生成报告

你的问题中有很多未知数,但希望这会有所帮助

更新:基于评论

我有一个表,其中包含了关于某人何时使用资源的使用信息,该表很快就变大了。因此,我们决定只保存2到3年的数据,其余的数据将被聚合,原始数据转储到一个文件中以供存档

在查看行数时,您需要决定需要保留多少数据,以及如何归档旧数据,以便在绝对需要时使其可用,但是,您可以事先生成需要的报告


通过减少列数,对于存储空间会有很大的影响,如果这是一个问题,因为许多列可能不会是空的。

< P>如果要生成大量数据,并且需要基于过去的数据生成报告,则应该考虑使用引擎。通常,这些引擎允许您将历史数据归档到单独的数据存储中(这样您就不会使日常工作数据库变得混乱),同时还可以从归档的数据中获取统计数据和报告。

如果您要生成大量数据,并且需要根据过去的数据生成报告,你应该考虑使用发动机。通常,这些引擎允许您将历史数据归档到单独的数据存储中(这样您就不会使日常工作数据库变得混乱),同时还可以从归档的数据中获取统计数据和报告。

您需要的是数据仓库(DW)。我建议您看看拉尔夫·金博尔(Ralph Kimball)的“数据仓库工具包”——其中有一些零售业数据仓库设计的例子