首页 文章

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

提问于
浏览
3

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

  • 产品可能有多种尺寸和多种颜色

  • 产品尺寸/颜色的每种组合必须具有特定价格

因此,我可以拥有尺寸为A,B,C和颜色的产品X:绿色,黑色和白色

每个组合都有它的价格......

它在亚马逊实现,这里有一个例子:http://www.amazon.com/Champion-Mens-Jersey-Black-Large/dp/B0010EEYCU/ref=sr_1_4?ie=UTF8&s=sporting-goods&qid=1287767784&sr=1-4

我想帮助设计一下!

EDIT: A Product can have a price without Size nor Color

谢谢

4 回答

  • 2

    在解决这个问题的众多方法中,我要强调一下:

    • 为每个项目的每种颜色/尺寸组合分别设置 Product 记录 . 每个都有自己的价格 .

    • 如果许多物品将分享相似的尺寸和颜色(例如,如果您销售衬衫,并且每件衬衫都有五种尺寸和三种颜色可供选择),将 Size 和_2555102规范化为自己的表格可能是有意义的,并有一个 PricePoint 表将它们拼接在一起 - 项目,颜色和大小的每个组合都有一个 PricePoint 条目,并且价格合适 .

    请注意,第二种方法虽然更加规范化,但可能会导致产品/库存跟踪问题 . 由于如果每个价格点的每个项目都有自己的SKU(或其他常用标识符),则更容易跟踪单个项目,您可能更喜欢混合方法:

    • 一个 Product 表,其中包含每个项目,大小和颜色组合的记录,每个组合都有一个唯一的SKU和Price .

    • Size 表格可以规范化产品的常用尺寸 . Product 有此表的外键 .

    • A Colour 表,如上所述 .

    • ProductTypeProductGrouping 表定义产品的超集以便于组织/搜索 . 每个产品都有一个这个"parent product"表的外键 . 例如,您可能有一个ProductType = 'T-Shirt',其中有几十个与之关联的产品 - 每种衬衫样式,大小和颜色组合都有一个产品 .

    Update: 详细说明"superset"表,按照OP _2555115的示例:

    添加产品组表:

    Product Group (defines a superset of similar products that will be grouped or filtered together)
    product_group_id
    product_group_name
    

    并编辑Product表以将外键添加到Product Group:

    Product Table (defines the product):
    product_id
    product_group_id
    product_name
    

    现在,要突出显示特定价格点的示例组合,一些补充数据:

    Product: product_id = 100,product_group_id = 1,product_name = 'Men' s圆领T恤'

    Product Group: product_group_id = 1,product_group_name = 'T-Shirts'

    Color: product_color_id = 10,product_id = 100,color_id = 6假设'6'是'Blue' . 此记录表示Crew-neck T有蓝色可供选择

    Size: product_size_id = 11,product_id = 100,size_id = 2假设'2'是'Medium' . 此记录表示Crew-neck T可在Medium中使用

    Price: product_price_id = 555,product_id = 100,product_size_id = 11,product_color_id = 10,price = 24.99 此记录表示中蓝色圆领T的售价为24.99美元(注意price_id,菲尔的例子中没有)

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

  • 2

    很抱歉迟到的回复,但我刚刚遇到这个问题,并认为我会添加我的方法 . 首先,我要说的是,颜色/尺寸/款式是时尚界特有的 . 我曾经为一家开发库存管理软件的公司工作,他们不会碰它!

    正如已经指出的那样,要走的是将库存单位与销售单位分开 . 这非常有效,但是您需要为单个产品手动输入每个单独的组合 . 这样,添加范围可能需要数周时间 .

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

    所以:

    首先,您需要一个表来保存您的选项(大小,颜色,样式等) . 这将只包含一个主键和一个您的选项的名称 .

    其次,您有另一个表格用于您的选项值(小,中,大,红,绿等) . 这包括您的主键,值的名称以及它所属的选项记录的ID .

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

    这样,您可以设置可在所有产品中选择的选项 .

    一边说:你可以创造生活通过创建'optionsGroup'表更容易 - 它将用于将两个表链接在一起 . 因此,如果你的T恤系列有红色,绿色,黑色和白色可供选择,你可以将这些选项分配给'T恤'组的'颜色'选项 . 然后你的跳线可能会有红色,蓝色,黄色,灰色,所以你将它们与“帽衫”组联系起来 . 这样,颜色选项值仍然与颜色选项相关联,但只有相关的选项值才会显示在管理系统的每个产品页面上 .

    最后,您有一个规范化表,将产品链接到选项值 . 每条记录都包含您的产品ID和选项值ID . 如何选择这些取决于您,但我会在产品管理屏幕中显示所有可用选项及其值,作为复选框 . 选中的每一个都在规范化表中生成记录 .

    因此,对于T恤产品,您现在可以为产品的每个产品选项单独记录 .

    现在真正聪明一点:您编写一个查询每个可用选项的查询并返回它们的所有可能组合 - 将每个选项创建为单独的SKU记录!这些记录中的每一个都可以包含单独的价格修改器,图像,无论您喜欢什么 - 更重要的是,您可以简单地停用任何不适合您的组合 .

    这是一个非常复杂的解决方案,我以前从未试图解释它(我发现它很难做到这一点!!),但它比我以前见过或使用的任何解决方案都要好得多 . 产品只在很短的时间内生成,您可以拥有无限的选择 .

  • 6

    一种可能的设计:

    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
    
  • 7

    这里的标准方法是将产品和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的范围,仅作为其中一个详细信息 .

    我不是说这是最好的做事方式,但它似乎是我工作的电子商务网站的标准 .

相关问题