Database design 构建一个数据库,其中产品具有来自多个供应商的多种包装类型

Database design 构建一个数据库,其中产品具有来自多个供应商的多种包装类型,database-design,architecture,Database Design,Architecture,假设我有一个Products表,并且有一个产品销售的“默认”单位(EA假设,单独销售)。该产品也可以从一些供应商处获得,如BX(盒子)和CT(纸箱),每个都包含一定数量的“默认”单位(在我们的例子中,假设一个盒子是6,一个纸箱是12) 该产品有一个与“默认”单位关联的常规标价,然后是其每个附加销售单位的另一个标价。每个供应商的产品成本(即我们作为卖方支付的费用)各不相同,我们打算采用一种方式查看销售产品的供应商列表,以便我们可以选择最佳价格(例如,我们可能会选择供应商a购买单个产品,但选择供应商

假设我有一个
Products
表,并且有一个产品销售的“默认”单位(
EA
假设,单独销售)。该产品也可以从一些供应商处获得,如
BX
(盒子)和
CT
(纸箱),每个都包含一定数量的“默认”单位(在我们的例子中,假设一个盒子是6,一个纸箱是12)

该产品有一个与“默认”单位关联的常规标价,然后是其每个附加销售单位的另一个标价。每个供应商的产品成本(即我们作为卖方支付的费用)各不相同,我们打算采用一种方式查看销售产品的供应商列表,以便我们可以选择最佳价格(例如,我们可能会选择供应商a购买单个产品,但选择供应商B购买纸箱,因为他们向我们出售的产品比供应商a便宜)

业务规则要求我们在每个包装级别为产品维护单独的SKU,但其余信息(如销售副本、制造商、说明)是相同的。因此,如果某个产品的SKU
ACM1234
为“可显示”SKU:

但我担心,在查找或添加新产品时,这将变得非常复杂和笨拙。我们接收产品提要的供应商包含一个包含所有相关信息的表,并且不假设您销售的产品有多种包装类型(仅为主要类型)。他们还提供自己的人工ID,将所有东西联系在一起。我考虑这样做的另一种方式是,在Products表中有一行对应于常规产品实体(例如single),然后有与该产品的其他包级别相关的表,并在UI上(我还没有考虑到这一点,因为我正在尝试构建适当的数据模型)执行“自动建议”交易类型,如果您键入ACM1234,它将与BX和CT变体一起显示,您可以选择所需的交易类型并获得相应的值

我觉得我的思路是正确的,但我仍然认为我遗漏了一些东西,我的头脑开始从试图在头脑中运行所有这些潜在的场景来想出一个可扩展的解决方案。它需要能够容纳产品,可以单独出售,在盒子里,从多个供应商在不同的价格水平纸箱

有什么建议或想法吗

编辑:我使用SQL Server 2005标准作为数据库

编辑(2009年2月25日):因此,听取了
awithrow
David Aldridge
的建议,大致如下:

# Products id base_sku ... 1 ACM1234 # Vendors id name 1 United Supply Co. 2 ACME Office Supply # ProductsPackages id productID unit listPrice 1 1 EA 5.00 2 1 BX 15.00 3 1 CT 40.00 # VendorsProductsPackages vendorID packageID cost 1 1 3.45 1 2 7.85 1 3 14.86 2 2 10.45 #产品 id基本\u sku。。。 1 ACM1234 #卖主 身份证名称 1联合供应公司。 2 ACME办公用品 #产品包装 id产品id单价 1个5.00 21 BX15.00 31 CT 40.00 #供应商产品包装 供应商包装成本 1 1 3.45 1 2 7.85 1 3 14.86 2 2 10.45
可能会创建一个表,其中包含每种类型单元的SKU后缀映射,以防我们添加更多。

听起来您的思路是正确的,但看起来您的表需要进一步细分。以下是我将如何做到这一点:

类似于您所拥有的产品表:

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
现在,您可以从第三个表中选择,并使用基本SKU和SKU后缀创建“最终”SKU。这取决于您使用的数据库引擎。这是一种理想的方法,它可以防止您将相同的信息复制到多个表中

您还提到向不同的客户提供不同的套餐,即不向政府出售个别商品。您可以创建另一个名为“catalogs”或类似的表,将打包的产品ID映射到客户ID。然后,您可以向客户发送自定义目录。您也可以通过以下类似操作为政府生成目录:

SELECT <fields> from Packaged_Products WHERE package_id != 1
从包装产品中选择,其中包装id!=1.
同样,这将根据您的数据库而有所不同


希望这有帮助

我觉得您需要以下表格:

  • 产品:基础产品本身
  • 产品包装:它的包装
  • 供应商:供应商的完整列表
  • 产品包供应商:将供应商与其提供的产品包相关联的交叉点

这很有帮助。非常感谢。顺便说一句,我使用的是SQLServer2005(也将其添加到主要问题中)。
Packaged Product Table

id     product_id     package_id     price
1      1              1              $5
2      1              2              $50
3      1              3              $28
SELECT <fields> from Packaged_Products WHERE package_id != 1