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

时间:2010-10-22 17:59:38

标签: database-design e-commerce amazon

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

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

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

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

它在亚马逊实施,这里有一个例子: 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

我想帮助设计一下!

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

由于

4 个答案:

答案 0 :(得分:7)

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

  1. 为每件商品的每种颜色/尺寸组合分别提供Product条记录。每个都有自己的价格。
  2. 如果许多物品将分享相似的尺寸和颜色(例如,如果您销售衬衫,并且每件衬衫都有五种尺寸和三种颜色可供选择),那么标准化SizeColour放入他们自己的表格中,并有一个PricePoint表格将它们拼接在一起 - 项目,颜色和大小的每个组合都在PricePoint中以适当的价格输入。
  3. 请注意,第二种方法虽然更加规范化,但可能会导致产品/库存跟踪出现问题。如果每个价格点的每个项目都有自己的SKU(或其他常用标识符),则更容易跟踪单个项目,您可能更喜欢混合方法:

    • 一个Product表,其中包含每个项目,大小和颜色组合的记录,每个组合都有一个唯一的SKU和Price。
    • 一个Size表,用于规范化产品可能具有的常用尺寸。 Product具有此表的外键。
    • 一个Colour表,如上所述。
    • 一个ProductTypeProductGrouping表,用于定义产品的超集以便于组织/搜索。每个产品都有一个这个“父产品”表的外键。例如,您可能有一个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表以将外键添加到Product Group:

    Product Table (defines the product):
    product_id
    product_group_id
    product_name
    

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

    产品: product_id = 100,product_group_id = 1,product_name ='男士圆领T恤'

    产品组: product_group_id = 1,product_group_name ='T-Shirts'

    颜色: product_color_id = 10,product_id = 100,color_id = 6 假设'6'为'蓝色'。此记录表示Crew-neck T有蓝色

    大小: product_size_id = 11,product_id = 100,size_id = 2 假设'2'为'中'。此记录表示Crew-neck T在Medium

    中可用

    价格: product_price_id = 555,product_id = 100,product_size_id = 11,product_color_id = 10,价格= 24.99 *此记录意味着中蓝色圆领T价格为24.99美元(请注意price_id,菲尔的例子中没有这个)*

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

答案 1 :(得分:6)

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

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

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

所以:

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

其次,您有另一个表格来显示您的选项值,(小,中,大,红,绿等) 它由您的主键,值的名称以及它所属的选项记录的ID组成。

因此,如果'options'表中的记录1是'size',那么'small','medium'等记录将与该记录相关联。

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

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

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

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

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

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

答案 2 :(得分:2)

一种可能的设计:

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

答案 3 :(得分:2)

这里的标准方法是将产品和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的范围显示为其中一个细节,在表格或下拉列表中或产品页面上的某个位置显示。

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