【问题标题】:Product and Retailer's Database with accommodating different attributes of products容纳不同产品属性的产品和零售商数据库
【发布时间】:2012-02-24 05:44:55
【问题描述】:

我有一个数据库设计问题。我的项目是关于产品和零售商的。

  • Product 表:product_id, product_name, product_description, category_id, quantity_per_unit

  • Retailer 表:retailer_id, retailer_name, City

  • Retailer's Stock 表:retailer_id, product_id, unit_price, availability

Retailer's Stock 表将每个产品与其卖家联系起来

还有Category 表和category_id,category_name,category_description

现在我想在产品中有不同的尺寸、颜色和品牌。我应该如何在这个数据库中容纳它们?我将价格包含在另一个表中,然后是产品表,因为不同的零售商可以以不同的价格出售相同的商品。

【问题讨论】:

    标签: database database-design


    【解决方案1】:

    您现有的数据库设计已经满足您提出的要求。产品中尺寸、颜色和品牌组合的每个实例都是Product 表中的一行。这通常称为库存单位 (SKU)。

    如果您想拥有更高级别的产品,请考虑将您当前的 Product 表分成两部分,如下所示:

    ProductType ( product_type_id, product_type_name, product_type_description, 
                  category_id )
    
    SKU ( sku_id, quantity_per_unit, product_type_id )
    

    然后修改您的RetailersStock 表以引用SKU 而不是Product

    【讨论】:

    • 好的,如果我在产品中添加尺寸、颜色和品牌,那么我就得不到我想要的。例如,我们有一款名为 Lux 的产品肥皂,它有 3 种颜色和 2 种尺寸。我想要一种产品 Lux.and 能够得到它有 3 种颜色的红色粉红色白色和 2 种大小。希望你明白我想要做什么。在目前的情况下,我无法通过在产品表中包含尺寸和颜色来实现这一点,因为不同的尺寸和颜色将是不同的产品。谢谢
    • @WaheedKhan - 是的,我明白了。但是您无法保持库存,甚至无法将价格保持在“勒克斯”水平。这就是为什么我建议在您当前的设计中,您所称的产品实际上是 SKU,而您需要添加的是比您当前的产品表更高级别的东西。您的产品属性中的某些属性会上升到新的更高级别的实体,而某些属性会保持在较低级别,为了便于讨论,我将其重命名为 SKU。如果您这样做,您仍然会在 Product 中有一条名为“Lux”的记录,而在 SKU 中有不同的记录为“Red Lux”、“Blue Lux”和“Pink Lux”。
    【解决方案2】:

    这是库存系统的常见问题;不同的颜色、尺寸等通常称为“variants”。还有其他questionsonStackOverflow。

    这里经常有两个问题交织在一起。

    一个是“我正在销售肥皂、毛巾和推土机;我如何设计一个架构,让我能够存储和推理这些产品的属性,当它们都不同且我事先不知道时属性是什么?”。我假设这不是你现在的问题。

    第二个问题是“我如何跟踪变体的库存、价格等?”。

    对此的经典答案是有一个“产品”表,其中包含所有属性共有的属性,以及一个产品变体表,其中包含特定于变体的属性,以及库存数量和价格(如果变体可以有不同的定价,例如一大包肥皂比小包更贵)。

    Product table: product_id, product_name, product_description, category_id, quantity_per_unit
    Product_Variant table:  product_variant_id, product_id(FK), size_code, colour_code
    Retailer's Stock table: retailer_id, product_variant_id, unit_price, availability
    

    那么,您确实需要为所有产品保留一个变体,即使该产品只有一个版本,但从更短暂的数据中提取出产品数据的“核心”通常是个好主意比如可用性和价格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-06
      • 2017-03-17
      • 2020-06-08
      • 2019-12-03
      • 2013-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多