SQL规范化与多个;“措施”;桌子

SQL规范化与多个;“措施”;桌子,sql,normalization,Sql,Normalization,我目前正试图重新设计一个销售点数据库,使其更加规范化,这将极大地帮助管理数据等。根据我必须处理的数据,我对最佳设计实践有点不确定。首先,基本上有两组度量,它们共享公共密钥。有库存数据,单位和美元,然后是销售点数据,单位和美元。每一个都是客户、商店、商品和日期级别 我所做的(目前主要是在理论上)是为 Item level information Item_ID, Customer_ID itemnumber (and a few other item specific inf

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

我所做的(目前主要是在理论上)是为

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,即使它们是stores和items表的一部分
  • 我的第二个问题是,如果我添加客户ID,如果我将所有这些表连接在一起

  • 我是否将所有表(Pos数据、门店和商品或库存数据、门店和商品)中的客户ID连接到客户表或
  • 仅仅从Pos数据表中加入就足够了
关于这些数据,让我提供一些额外的细节。例如,我们有两个客户,CustomerA和CustomerB。CustomerA有多家门店,门店号分别为10001025、1036和1037。CustomerB还拥有多家门店,门店号分别为1025、1030和1037。商店编号1025和1037在顾客之间是相同的,但商店本身是独一无二的,完全不同

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

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

所以,回到我的例子,CustomerA的商店编号1000,ABC可能已经售出100台,即1245.00美元。CustomerA的商店编号1025,可能只以124.50美元的价格销售了10套相同的商品

现在,如果我们回到CustomerB,正好这个客户也有一个名为ABC的商品,它在他们的许多商店出售。CustomerA的ABC项目与CustomerB的ABC项目完全不同。他们给他们起的名字是一样的,这纯粹是巧合

让我补充最后一点澄清,我可能早就应该说明这一点。我的观点是作为一个批发商。当我说商品时,我指的是顾客的商品编号,而不是批发商的商品编号。在获取批发商商品时涉及交叉参考,客户可能有多个商品编号,且参考的是同一批发商商品编号。不过,我认为没有必要对此进行深入研究。

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

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

请允许我再提出一个问题


当您可以加入
主库存数据时,为什么在
门店
项目
中重复使用客户ID。这是另一个冗余。

也许我没有听你的问题,但让我看看这是否回答了你的问题。每个客户可能有几个商店,每个客户可能有几个项目。两个不同的客户可能共享同一个门店号(尽管地址可能完全不同),而且他们也可能拥有相同的商品号,即使商品的详细信息可能完全不同。我想你的答案正是我想要的关于客户ID的答案,也就是说,将其添加到库存数据中是没有意义的,因为我可以通过加入门店或商品表来获取客户详细信息。至于加入它,请使用我的查询所需的“最便宜”的。话虽如此,若你们有更好的方法来规范数据的想法,请分享。谢谢你的反馈!也许我还应该澄清另一点。对于给定的客户,每个商店可能包含与另一个商店相同的商品。因此,一个客户可能有许多商店,每个商店可能有许多商品,但每个商店可能包含与该客户的另一个商店相同的商品。@TimothylVenice我在可视化您的商业模式时遇到问题,请您编辑问题,尽可能多地添加详细信息,如商店的定义、客户、商品,存货等;实体之间的关系,它们之间的关系,也许,如果你想得更详细一些,你会自己找到一些答案。我补充了一些细节。如果你觉得还有一些问题需要澄清,请让我知道。你不应该让问题一直悬而未决。这个回答对你有帮助吗?如果是,请标出答案