Database design 电子商务应用中的数据库设计问题

Database design 电子商务应用中的数据库设计问题,database-design,e-commerce,amazon,Database Design,E Commerce,Amazon,我正在设计一个电子商务数据库。。。 我想建议设计以下案例: 产品可能有多种尺寸和颜色 每种产品的尺寸/颜色组合都必须有一个特定的价格 因此,我可以有一个尺寸为X的产品: A、 B,C 颜色: 绿色、黑色和白色 每种组合都有它的价格 它在Amazon中实现,这里有一个例子: 我想在设计上得到帮助 编辑:产品可以没有尺寸和颜色的价格 谢谢在众多方法中,我要强调以下几点: 为每个项目的每个颜色/尺寸组合单独记录产品。每个都有自己的价格 如果许多商品的尺寸和颜色相似(例如,如果您销售的是衬衫,并且

我正在设计一个电子商务数据库。。。 我想建议设计以下案例:

  • 产品可能有多种尺寸和颜色
  • 每种产品的尺寸/颜色组合都必须有一个特定的价格
因此,我可以有一个尺寸为X的产品: A、 B,C 颜色: 绿色、黑色和白色

每种组合都有它的价格

它在Amazon中实现,这里有一个例子:

我想在设计上得到帮助

编辑:产品可以没有尺寸和颜色的价格


谢谢

在众多方法中,我要强调以下几点:

  • 为每个项目的每个颜色/尺寸组合单独记录
    产品
    。每个都有自己的价格
  • 如果许多商品的尺寸和颜色相似(例如,如果您销售的是衬衫,并且每件衬衫都有五种尺寸和三种颜色中的任何一种),那么将
    尺寸
    颜色
    标准化到它们自己的表中可能是有意义的,并且有一个将它们缝合在一起的
    PricePoint
    表-每个项目、颜色和大小的组合在
    PricePoint
    中都有一个具有适当价格的条目
  • 请注意,第二种方法虽然更加规范化,但可能会导致产品/库存跟踪出现问题。由于如果每个价格点的每个项目都有自己的SKU(或其他通用标识符),则更容易跟踪单个项目,因此您可能更喜欢混合方法:

    • 一个
      产品
      表,其中包含项目、尺寸和颜色的每个组合的记录,每个组合具有唯一的SKU和价格
    • 一个
      Size
      表,用于规范化您的产品可能具有的常见尺寸<代码>产品具有此表的外键
    • A
      颜色
      表格,如上所述
    • 一个
      ProductType
      ProductGrouping
      表,用于定义产品的超集,以便于组织/搜索。每个产品都有一个外键指向这个“父产品”表。例如,您可能有一个ProductType='T-Shirt',它有几十种与之相关联的产品——衬衫样式、尺寸和颜色的每种组合对应一种产品
    更新:为了详细说明“超集”表,根据OP的要求,我将通过以下方式扩展@Phil Sandler的示例:

    添加产品组表:

    Product Group (defines a superset of similar products that will be grouped or filtered together)
    product_group_id
    product_group_name
    
    并编辑产品表以向产品组添加外键:

    Product Table (defines the product):
    product_id
    product_group_id
    product_name
    
    现在,为了突出某一特定价格点的组合示例,一些组合数据:

    产品:产品标识=100,产品组标识=1,产品名称='男士圆领T恤'

    产品组:产品组\u id=1,产品组\u name='T-Shirts'

    颜色:产品颜色id=10,产品id=100,颜色id=6假设“6”为“蓝色”。此记录表示圆领T为蓝色

    大小:产品大小id=11,产品id=100,大小id=2假设“2”为“中等”。此记录意味着圆领T为中等尺寸

    价格:产品价格id=555,产品id=100,产品尺寸id=11,产品颜色id=10,价格=24.99 *这一记录意味着中蓝色圆领T的价格为24.99美元(注意Phil示例中缺少的价格)*

    使用此示例,Product Group(产品组)表将允许您跨产品线进行查询,例如“选择我们销售的最昂贵的大号T恤。”

    一种可能的设计:

    Product Table (defines the product):
    product_id
    product_name
    
    Product Size Table (defined valid sizes for the product):
    product_size_id
    product_id
    size_id (assuming here that you have a lookup table for generic sizes like S/M/L/XL)
    
    Product Color Table (defines valid colors for the product):
    product_color_id
    product_id
    color_id (again, assuming there is a lookup for Blue/Green/Purple/etc.)
    
    Product Price Table (applies a price to the product/size/color combination):
    product_price_id
    product_size_id
    product_color_id
    price
    

    标准的方法是把产品和SKU视为独立的东西。SKU具有特定的尺寸、颜色和价格,产品是相关SKU的一个系列

    create table product (
      product_id integer primary key,
      name varchar(255) not null,
      description varchar(2048) not null
    );
    
    create table sku (
      sku_id integer primary key,
      product_id integer references product,
      size varchar(40),
      colour varchar(40),
      price numeric(8, 2) not null,
    );
    
    通过使SKU中的字段引用颜色和大小表中的行,而不是自由格式的文本,可以使颜色和大小正常化。你也可以分开定价,这样你就可以做一些事情,比如不同日期的价格,折扣价格,等等

    您通常围绕产品构建站点,并在产品页面的某个位置的表格或下拉列表中显示SKU范围,作为详细信息之一


    我并不是说这是做事情的最佳方式,但这似乎是我工作过的电子商务网站的标准方式。

    很抱歉回复太晚,但我刚刚遇到了这个问题,我想添加我的方法。 首先,我要说的是,颜色/尺寸/风格是时装行业特有的。我曾经在一家开发股票管理软件的公司工作,他们不会碰它

    正如已经指出的那样,解决办法是将库存单位与销售单位分开。这项工作非常完美,但有一个巨大的缺点,即您需要手动输入单个产品的每个组合。这样,添加一个范围可能需要几周的时间

    我的方法在后端更为复杂,但允许更快地生成库存单位和无限期权

    因此:

    首先,你需要一张桌子来容纳你的选择(尺寸、颜色、款式等) 这将只包含一个主键和选项的名称

    第二,您有另一个表来显示您的选项值(小、中、大、红、绿等) 这包括主键、值的名称以及它所属的选项记录的ID

    因此,如果“选项”表中的记录1为“大小”,则“小”、“中”等的记录将与该记录关联

    通过这种方式,您可以设置可在所有产品中选择的选项

    顺便说一句:您可以通过创建一个“optionsGroup”表来让生活变得更加轻松,该表将用于将两个表链接在一起。因此,如果您的t恤系列有红色、绿色、黑色和白色,您可以将这些选项指定给“t恤”组的“颜色”选项。然后你的跳线可能是红色、蓝色、黄色、灰色,所以你会联想到这些wi