0

我目前正在尝试重新设计一个销售点数据库以使其更加规范化,这将极大地帮助管理数据等。根据我必须处理的数据,我有点不确定最佳设计实践和。首先,基本上有两组措施,它们共享共同的密钥。有库存数据、单位和美元,然后是销售点数据、单位和美元。其中每一个都是客户、商店、项目和日期级别。

我所做的(此时主要是理论上的)是为

Item level information 
  Item_ID, 
  Customer_ID
  itemnumber 
  (and a few other item specific information).  

Stores 
  Store_ID, 
  Customer_ID, 
  Store Number,
  (and essentially address information)

Customer 
  Customer_ID, 
  Customer Number 
  (other customer specific information like name).  

所以除了那些“支持”表之外,我还有

Main Inventory Data 
  Store_ID 
  Item_ID 

我也有 POS 数据表,具有完全相同的 ID。

基本上我的问题是:

  • 我是否应该在 Pos Data 和 Inventory Data 表中包含 Customer ID,即使它们是 stores 和 items 表的一部分?
  • 我的第二个问题是,如果我确实添加了客户 ID,如果我将所有这些表连接在一起,

    1. 我会将所有表(Pos 数据、商店和项目或库存数据、商店和项目)中的客户 ID 加入到客户表中还是
    2. 从 Pos Data 表中加入就足够了。

让我提供一些关于数据的额外细节。例如,我们有两个客户,客户 A 和客户 B。CustomerA 有几家店铺,店铺编号分别为 1000、1025、1036 和 1037。 CustomerB 也有几家店铺,店铺编号分别为 1025、1030 和 1037。1025 和 1037 店铺编号恰好在客户之间相同,但店铺本身是独一无二的,完全不同的。

CustomerA 的 1000 号商店销售我们的三种商品(这是批发角度),它们是商品 ABC、DEF 和 EFG。CustomerA 的 1025 号商店也销售我们的三种商品,它们是 ABC、HIJ 和 XYZ。

这些项目中的每一个都包含两个导入数据,涉及其与其特定客户和商店编号的关系、销售点数据和库存数据。销售点数据将采用 PosUnits 的形式,即售出的商品数量和 PosDollars,即在该商店售出的商品的总美元(基本上是单位数量乘以售价)。库存数据将以 InventoryUnits 为单位,即商店中库存商品的数量。[需要注意的一点,我将库存和 pos 数据分开到单独的表中,因为我们并不总是从每个客户那里收到这两种数据。此外,库存和 POS 数据通常单独分析]。

因此,回到我的示例,CustomerA 的商店编号 1000,商品 ABC 可能已售出 100 个单位,即 $1245.00。CustomerA 的商店编号 1025,可能仅以 124.50 美元的价格售出 10 件相同商品。

现在,如果我们回到 CustomerB,碰巧这个客户也有一个名为 ABC 的商品,它在他们的许多商店中销售。CustomerA 的 item ABC 与 CustomerB 的 item ABC 是完全不同的产品。他们将它们命名为相同的东西纯属巧合。

让我添加最后一点澄清,我可能应该在前面说明。我的观点是作为批发商。当我说商品时,我指的是客户商品编号,而不是批发商商品编号。获取批发商项目涉及交叉参考,客户可能有多个项目编号引用相同的批发商项目编号。不过,我认为没有必要深入研究。

4

1 回答 1

0

问题 #1:作为规范化规则的一部分,您应该避免在任何表中包含冗余数据,除非存在需要de-normalization. 有数以千计的文章将解释为什么要避免冗余。

至于问题 #2:在规则中只选择您在查询中需要的列,如果您需要 Customer_ID 从数据库更便宜的地方选择它

请允许我再提出一个问题

你为什么要重复 Customer_IDStores以及Item_level什么时候可以加入他们Main Inventory Data?这是另一个冗余。

于 2013-08-05T16:36:18.043 回答