【问题标题】:SQL Normalization with multiple "measures" tables具有多个“度量”表的 SQL 规范化
【发布时间】:2013-08-06 10:14:41
【问题描述】:

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

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

创建分隔表
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 数据和库存数据表中包含客户 ID,即使它们是 store 和 items 表的一部分?
  • 我的第二个问题是,如果我确实添加了客户 ID,是否要将所有这些表连接在一起,

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

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

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

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

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

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

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

【问题讨论】:

  • 你不应该让问题悬而未决。回复对你有帮助吗?如果是,请标记答案

标签: sql normalization


【解决方案1】:

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

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

请允许我再提出一个问题

为什么你在StoresItem_level 中重复了Customer_ID,当你可以加入他们时想到Main Inventory Data。这是另一个冗余。

【讨论】:

  • 也许我没有关注你的问题,但让我看看这是否能回答你的问题。每个客户可能有几个商店,每个客户可能有几个项目。两个不同的客户可能共享相同的商店编号(尽管地址可能完全不同),并且可能他们也可能拥有相同的商品编号,即使商品的详细信息完全不同。
  • 我认为您的答案是我正在寻找的关于客户 ID 的内容,也就是说,将其添加到库存数据中没有任何意义,因为我可以通过加入来获取客户详细信息在商店或项目表上。至于加入它,请使用我的查询所需的“最便宜”的。话虽如此,如果您有更好的数据标准化方法的想法,请分享。感谢您的反馈!
  • 也许我还应该澄清另一点。对于给定的客户,每个商店可能包含与另一家商店相同的商品。因此,一个客户可能有很多商店,每个商店可能有很多商品,但每个商店可能包含与该客户的另一家商店相同的商品。
  • @timothylavenice 我在可视化您的业务模式时遇到问题,您能否编辑问题,添加尽可能多的详细信息,例如商店的定义、客户、商品、库存等;实体之间的关系,也许它们之间的关系,如果你想得更详细一些,你会自己得到一些答案。
  • 我添加了更多细节。如果您觉得还有一些需要澄清的地方,请告诉我。
猜你喜欢
  • 2023-03-03
  • 2011-03-31
  • 2017-07-31
  • 1970-01-01
  • 1970-01-01
  • 2012-10-08
  • 2019-01-01
  • 2012-12-31
  • 1970-01-01
相关资源
最近更新 更多