假设我有一个Products
表格,并且有一个“默认”单位产品的销售(EA
让我们说,单独)。某些供应商也提供该产品BX
(方框)和CT
(纸箱),每个产品都包含一定数量的“默认”单位(在我们的例子中,假设一个方框是6和纸箱是12)。
产品具有与“默认”单位关联的常规定价,然后是每个其他销售单位的另一个定价。产品的成本(即我们作为卖方支付的费用)因每个供应商的产品而异,我们打算实施一种方法来查看销售产品的供应商列表,以便我们选择最优惠的价格(例如我们可能会选择供应商) A为个别产品,但供应商B为纸箱,因为他们以比卖方A便宜的价格将它卖给我们。
业务规则要求我们在每个包装级别为产品维护单独的SKU,但其余信息(例如销售副本,制造商,描述)是相同的。因此,给定具有SKU ACM1234
的产品,它可以具有“可显示的”SKU:
ACM1234 - Individual product (default) with List Price $5.00 ACM1234BX - Box packaging (6 individual) with List Price $28.00 ACM1234CT - Carton packaging (12 individual) with List Price $50.00
并且该产品可能由3个不同级别的供应商提供 - 其中一些可能不提供纸盒版本,但提供盒子和单个,而其他可能有三个。
此外,由于我们的主要客户是美国政府,我们有“合同”和“非合同”项目的概念,因此需要将产品视为一个单独的实体;例如,我们可能只选择将产品的盒装和纸盒版本出售给政府,而不是单一产品。当我们收到订单时,我们需要通过它的SKU(例如ACM1234BX
)查找项目并获取它的信息 - 例如我们正在销售的信息。如果产品数据库具有“常规”SKU(例如,单个项目)但政府客户购买了盒子版本,则可能会遇到问题。
通常我会有一个“主”产品表,其中包含SKU和其他相关信息,如描述。但是,在这种情况下,创建模式来处理这个问题的最佳方法是什么?我可以做一些查找表,并在一个表中列出“常见”信息(销售副本,描述,它是回收利用等),并将其链接到另一个表,列出产品及其包装级别以及具有显示的SKU的“计算”列。也许是这样的:
# Products table id description recycled sales copy 1 ACME(R) Widget Plus 1 The only Widget you will ever need... # Packaging table product_id unit selling_sku list_price 1 EA ACM1234 5.00 1 CT ACM1234CT 50.00 1 BX ACM1234BX 28.00
但是,我担心在查找或添加新产品时,这将变得非常复杂和笨拙。我们收到产品供稿的供应商包含所有相关信息的单一表格,并且不假设您销售多种包装类型的产品(仅限主要类型)。他们还提供自己的人工ID,将所有内容联系在一起。我想这样做的另一种方式是在Products表中有一行对应于常规产品实体(例如单个),然后将相关表与该产品的其他包级别相对应,并在UI上(我没有'考虑到我正在尝试构建一个合适的数据模型,我做了一个“自动建议”类型的交易,如果你键入ACM1234,它将显示与BX和CT变体一起,你可以选择一个你想要并获得由它填充的适当值。
我觉得我走在正确的轨道上,但我仍然认为我错过了一些东西,而且我的头脑开始转向尝试在精神上运行所有这些潜在的场景,以提出可扩展的解决方案。它需要能够容纳可以单独销售的产品,盒子以及来自不同供应商的不同价格水平的纸箱。
有任何建议或想法吗?
编辑:我使用SQL Server 2005 Standard作为数据库。
编辑(02/25/2009):因此,请遵循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
可能会创建一个表格,其中包含每种类型单位的SKU后缀映射,以防我们添加更多内容。
答案 0 :(得分:2)
听起来我觉得你需要下面的表格:
答案 1 :(得分:1)
听起来你是在正确的轨道上,但看起来你的桌子需要更多分解。我将如何做到这一点:
与您的产品类似的产品表:
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。这取决于您使用的数据库引擎。这种理想可以防止您将相同的信息复制到多个表中。
您还提到向不同的客户展示不同的包裹,即不向政府出售个别物品。您可以创建另一个名为“catalogs”的表或类似的东西,将打包的产品ID映射到客户ID。然后,您可以向客户发送自定义目录。你也可以通过做类似的事情来为政府生成一个目录:
SELECT <fields> from Packaged_Products WHERE package_id != 1
再次,这将取决于您的数据库
希望这会有所帮助