从多个供应商处获得多种包装类型的产品的数据库结构化

3
假设我有一个“产品”表,其中有一个“默认”单位,该产品以该单位(例如单独的EA)出售。该产品也可以从某些供应商以BX(盒)和CT(纸箱)的形式提供,每个包装中都包含一定数量的“默认”单位(在我们的例子中,假设一个盒子是6个,一个纸箱是12个)。
该产品有与“默认”单位关联的常规价格清单,以及每个附加销售单位的另一个价格清单。产品的成本(即作为卖方支付的费用)因产品和供应商而异,我们打算实现一种查看销售该产品的供应商列表的方法,以便我们可以选择最优惠的价格(例如,我们可能会选择个体产品的Vendor A,但对于Carton,我们会选择Vendor B,因为他们比Vendor A更便宜地销售给我们)。
业务规则要求我们在每个包装级别上维护单独的SKU,但其他信息(例如销售副本、制造商、描述)是相同的。因此,对于具有SKU ACM1234的产品,它可以具有“可显示”的SKU:
ACM1234-默认的单个产品,价格清单为$5.00 ACM1234BX-盒装(6个单品),价格清单为$28.00 ACM1234CT-纸箱包装(12个单品),价格清单为$50.00
而这个产品可能由3个供应商以不同的级别提供-他们中的一些人可能不提供纸箱版本,但提供盒装和单个版本,而其他人可能拥有所有三个版本。
此外,由于我们的主要客户是美国政府,因此需要将该产品视为单独的实体,并且我们有“合同”和“非合同”项目的概念;例如,我们可能只选择向政府销售产品的盒装和纸箱版本,而不是单个版本。然后,当我们收到订单时,我们将需要按其SKU(例如ACM1234BX)查找项目并获取其信息-例如我们出售它的价格。如果产品数据库具有“常规”SKU(例如单个项目),但政府客户已购买了盒装版本,则可能会遇到问题。
通常,我会有一个“主”产品表,其中包含SKU和其他相关信息,例如描述。在这种情况下,创建处理此类问题的模式的最佳方法是什么?我可以做某种查找表,并在一个表中列出“常见”信息(销售副本、描述、是否回收等),并将其链接到另一个表,该表列出产品及其包装级别以及具有显示SKU的“计算”列。也许像这样:
# 产品表 id 描述 是否回收 销售文案 1 ACME(R)小部件Plus 1 您需要的唯一小部件...
# 包装表 产品ID 单位 销售SKU 列表价格 1 EA ACM1234 5.00 1 CT ACM1234CT 50.00 1 BX ACM1234BX 28.00
但是,当查找或添加新产品时,我担心这将变得非常复杂和难以掌握。我们从供应商那里接收产品信息源,其中包含相当于所有相关信息的单个表,并且不假设您以多种包装类型(仅使用主要类型)销售产品。此外,他们提供自己的人工ID来将所有内容联系在一起。我考虑的另一种方法是,在产品表中的行对应于常规产品实体(例如单个),然后有其他包装级别的相关表,而在UI上(我还没有考虑过,因为我正在尝试设计适当的数据模型),进行“自动建议”类型的交易,如果输入ACM1234,它将显示与BX和CT变体一起,您可以选择要获取相应值的选项。
我觉得我走在正确的道路上,但我仍然认为我缺少某些东西,我的头开始旋转,因为我试图在脑海中运行所有这些潜在的情况,以找到可扩展的解决方案。它需要能够容纳可以以不同定价级别从多个供应商单独销售,盒装和纸箱包装的产品。
有任何建议或想法吗?
编辑:我使用SQL Server 2005标准作为数据库。
编辑(02/25/2009):因此,根据awithrow和David Aldridge的建议,大致如下:
# 产品 id 基本SKU ... 1 ACM1234
# 供应商 id 名称 1 United Supply Co. 2 ACME Office Supply
# 产品包装 id productID unit listPrice 1 1 EA 5.00 2 1 BX 15.00 3 1 CT 40.00
# 供应商产品包装 vendorID packageID cost 1 1 3.45 1 2 7.85 1 3 14.86 2 2 10.45
可能会创建一个表,其中每种单位类型都有SKU后缀映射,以防我们添加更多内容。
2个回答

3

听起来你走在了正确的道路上,但是看起来你的表需要再细分一些。这是我会怎么做:

一个类似于你现有的产品表:

Products table

id    description             recycled  base_SKU     sales_copy
1     ACME(R) Widget Plus     1         ACM1243      The only Widget you will ever need...

一个打包表格
Packaging table:

id     unit     SKU_suffix
1      EA       ''
2      CT       'CT'
3      BX       'BX'

最后是一张将两者相关联的第三张表:
Packaged Product Table

id     product_id     package_id     price
1      1              1              $5
2      1              2              $50
3      1              3              $28

现在,您可以从第三张表中选择并使用base_SKU和SKU_suffix来创建“最终”SKU。这将取决于您使用的DB引擎。这是一个理想的方案,它防止您将相同的信息复制到多个表中。
您还提到向不同的客户展示不同的包装产品,即不向政府出售单个商品。您可以创建另一个名为“目录”或类似名称的表,将已打包的产品ID映射到客户ID。然后您可以向客户发送自定义目录。您也可以通过执行类似以下操作来为政府生成目录:
SELECT <fields> from Packaged_Products WHERE package_id != 1

再次强调,这将取决于您的数据库

希望这能有所帮助


非常有帮助。谢谢!顺便说一下,我正在使用SQL Server 2005(也将其添加到主要问题中)。 - Wayne Molina

3

我认为你需要以下表格:

  • 产品:基本产品本身
  • 产品包装:它所包含的包装
  • 供应商:完整的供应商列表
  • 产品包装供应商:将供应商与他们提供的产品包装相关联的交集

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接