论坛首页 Java企业应用论坛

淘宝商品价格存储结构设计

浏览 16965 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-09-27  
你必须按我说的做,不然你的库存怎么管理,不同size在定义不同库存,电商不是想的那么简单
0 请登录后投票
   发表时间:2012-09-27  
dagmom 写道
一个商品对应多个价格需要另存一张表,性能还好吧,但是你说的不同size对应不同的价格,那么如果再加一个别的比如颜色,你情以何堪,不同size、color,那应该当作不同商品去做,你看看京东、易讯之类的就知道,选择size之后productId是不同的


京东好像是不同的product
淘宝好像是存关联表 类似于之上我说的
0 请登录后投票
   发表时间:2012-09-27  
jinnianshilongnian 写道
dagmom 写道
一个商品对应多个价格需要另存一张表,性能还好吧,但是你说的不同size对应不同的价格,那么如果再加一个别的比如颜色,你情以何堪,不同size、color,那应该当作不同商品去做,你看看京东、易讯之类的就知道,选择size之后productId是不同的


京东好像是不同的product
淘宝好像是存关联表 类似于之上我说的



存关联表对后还是对应到了关联的变型商品product_assoc
0 请登录后投票
   发表时间:2012-09-28  
之前也有个类似的项目,我们的做法是这样的:
对于产品,先会对产品进行抽象,也就是说定义产品,产品包含哪些属性。
1,属性(分属性组和属性两个表)
Table: user_defined_attribute_group
Columns: id, internal_name, display_name, is_variant, .....
          1,  size,          Product Size,   Y
          2,  color,         Product Color,  Y
          3,  brand,         Brand,          N
is_variant属性表示创建产品时,是否指定该产品为一个style item产品(即是否立即指定属性的值)。

Table: user_defined_attributes
Columns: id, group_id,  internal_name, display_name, sequence, data_type, ....
          1,   1,        size,            Size,        1,       C,      
          2,   2,        color,          Color,        1,       C, 
          3,   3,        brand_name,     Brand Name,   1,       C,
每个attribute group包含N个attribute。其中对于data_type,N代表数字,C代表字符,D代表日期

2.产品抽象
Table: product_catalog
Columns: id, catalog_name,display_name, creation_date, effective_date,......
          1,  t_shirt,      T Shirt,     2012-09-28,    2012-09-28,
产品是由起属性定义的,那么必须有相应的属性关联
Table: product_catalog_attribute_group
Columns: product_catalog_id, attribute_group_id
             1,                    2
             1,                    3
那么t-shirt就关联了颜色和品牌属性

3,创建产品
Table: product
Column: id, product_catalog_id, product_name,    display_name,    is_style, is_sku, style_product_id.....
         1,   1,                nike_shirt,        Nike T-Shirt,     Y,      N,      null,
         2,   1,                adidas_shirt,      Adidas T-Shirt,   Y,      N,      null,
         3,   1,                nike_shirt_red,    Red Nike T-Shirt, N,      Y,       1,
         4,   1,                adidas_blue_shirt, Blue Adidas T-Shirt, N,   Y,       2,
产品属性表:
Table: product_attribute
Columns:  id,    product_id, attribute_group_name, attribute_name, attribute_value, .....
          1,          1,       brand,               brand_name,      Nike
          2,          2,       brand,               brand_name,      Adidas
          3,          3,       color,               color,           Red
          4,          4,       color,               color,           Blue
如果一个catalog包含variant的attribute group,那么根据这个catalog创建的product都为style的,其中variant的attribute group是不指定属性的值,但其他非varaint的值必须指定具体的值。然后可以根据style product创建sku product,即在创建SKU product时指定varaint属性的值。这样做的好处是非常明显的,例如,在定价策略中,可以针对style product定价,而不必针对产品属性来定价(如果有需要的话也可以实现)。属性是可以随业务的需要来确定的,也可以针对不同的属性来扩展实现属性之间的关联以及依赖的关系。

欢迎拍砖。。。。
0 请登录后投票
   发表时间:2012-09-28  
seanla 写道
之前也有个类似的项目,我们的做法是这样的:
对于产品,先会对产品进行抽象,也就是说定义产品,产品包含哪些属性。
1,属性(分属性组和属性两个表)
Table: user_defined_attribute_group
Columns: id, internal_name, display_name, is_variant, .....
          1,  size,          Product Size,   Y
          2,  color,         Product Color,  Y
          3,  brand,         Brand,          N
is_variant属性表示创建产品时,是否指定该产品为一个style item产品(即是否立即指定属性的值)。

Table: user_defined_attributes
Columns: id, group_id,  internal_name, display_name, sequence, data_type, ....
          1,   1,        size,            Size,        1,       C,      
          2,   2,        color,          Color,        1,       C, 
          3,   3,        brand_name,     Brand Name,   1,       C,
每个attribute group包含N个attribute。其中对于data_type,N代表数字,C代表字符,D代表日期

2.产品抽象
Table: product_catalog
Columns: id, catalog_name,display_name, creation_date, effective_date,......
          1,  t_shirt,      T Shirt,     2012-09-28,    2012-09-28,
产品是由起属性定义的,那么必须有相应的属性关联
Table: product_catalog_attribute_group
Columns: product_catalog_id, attribute_group_id
             1,                    2
             1,                    3
那么t-shirt就关联了颜色和品牌属性

3,创建产品
Table: product
Column: id, product_catalog_id, product_name,    display_name,    is_style, is_sku, style_product_id.....
         1,   1,                nike_shirt,        Nike T-Shirt,     Y,      N,      null,
         2,   1,                adidas_shirt,      Adidas T-Shirt,   Y,      N,      null,
         3,   1,                nike_shirt_red,    Red Nike T-Shirt, N,      Y,       1,
         4,   1,                adidas_blue_shirt, Blue Adidas T-Shirt, N,   Y,       2,
产品属性表:
Table: product_attribute
Columns:  id,    product_id, attribute_group_name, attribute_name, attribute_value, .....
          1,          1,       brand,               brand_name,      Nike
          2,          2,       brand,               brand_name,      Adidas
          3,          3,       color,               color,           Red
          4,          4,       color,               color,           Blue
如果一个catalog包含variant的attribute group,那么根据这个catalog创建的product都为style的,其中variant的attribute group是不指定属性的值,但其他非varaint的值必须指定具体的值。然后可以根据style product创建sku product,即在创建SKU product时指定varaint属性的值。这样做的好处是非常明显的,例如,在定价策略中,可以针对style product定价,而不必针对产品属性来定价(如果有需要的话也可以实现)。属性是可以随业务的需要来确定的,也可以针对不同的属性来扩展实现属性之间的关联以及依赖的关系。

欢迎拍砖。。。。


大体如此,如果为了扩展的话,把你的product拆分以下,product,product_assoc,product_assoc_type,否则以后还有新的类似于stype_product的关联关系,在product表中加字段不太合适
0 请登录后投票
   发表时间:2012-10-16  
用外键关联,商品表<-->价格表

商品表:

主键   商品名   大小    价格表主键
1        T恤      L          1
......

价格表:

主键    价格
1         100.00
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics