Bootstrap

商品规格的数据库设计和实现流程——淘淘商城(十一)

商品规格

  • 商品规格包括规格组合、规格项,规格项为规格组的成员。
    4.specification.png
规格组
  |-规格项:规格值
  |-规格项:规格值
规格组
  |-规格项:规格值
  |-规格项:规格值
  • 同一类商品的规格相同。

方案一

  • 使用多个表存储商品规格。在已有的商品分类表和商品表的基础上,增加商品规格分组表商品规格项表商品规格值表

表设计

  • 商品表:tb_item

    列名类型说明
    item_idbigintP商品id
    cat_idbigintF商品分类id
  • 商品分类表:tb_item_cat

    列名类型说明
    cat_idbigintP商品分类id
  • 商品规格组表:tb_item_param_group

    列名类型说明
    group_idbigintP商品规格组id
    group_namevarchar商品规格组名称
    cat_idbigintF商品分类id
  • 商品规格项表:tb_item_param_key

    列名类型说明
    key_idbigintP商品规格项id
    key_namevarchar商品规格项名称
    group_idbigintF商品规格组id
  • 商品规格值表:tb_item_param_value

    列名类型说明
    item_idbigintP商品id(联合主键)
    key_idbigintP商品规格项id(联合主键)
    param_valuevarchar商品规格信息

表关系

  • 4.tableRelation.png

查询语句

  • 查询某id商品信息,规格组、规格项、规格值:
SELECT
    pg.group_name,
    pk.key_name,
    pv.param_value
FROM
    tb_item_param_value pv
LEFT JOIN tb_item_param_key pk ON pv.key_id = pk.key_id
LEFT JOIN tb_item_param_group pg ON pk.group_id = pg.group_id
WHERE
    item_id = xxxxx

缺点

  1. 需要创建多张表来描述规格参数之间的关系。
  2. 查询时需要复杂的sql语句查询。
  3. 规格参数数据量是商品信息的几十倍,数据量十分庞大,查询时效率很低。
  4. 商品参数变时需要改动多个表。

方案二

  • 每一个商品对应一个规格参数的模板。
[
  {
    //规格组名称
    "group": "主体",
    // 组的规格项名称
    "params": [
      "品牌",
      "型号",
      "颜色",
      "上市年份",
      "上市月份"
    ]
  },
  {
    "group": "网络",
    "params": [
      "4G",
      "3G",
      "2G"
    ]
  }
]
  • 添加商品时,根据规格参数模板生成表单,保存对应的规格参数的json格式。
[
  {
    //规格组名称
    "group": "主体",
    // 组的规格项名称
    "params": [
      {
        "k": "品牌",
        "v": "苹果(Apple)"
      },
      {
        "k": "型号",
        "v": "iPhone 6 A1589"
      },
      {
        "k": "颜色",
        "v": "白色"
      },
      {
        "k": "上市年份",
        "v": "2100"
      },
      {
        "k": "上市月份",
        "v": "12"
      }
    ]
  },
  {
    "group": "网络",
    "params": [
      {
        "k": "4G",
        "v": "支持"
      },
      {
        "k": "3G",
        "v": "支持"
      },
      {
        "k": "2G",
        "v": "支持"
      }
    ]
  }
]

流程

  • 4.jsonView.png

特点

  • 优点:
    1. 单表查询,不需要做多表管理。
    2. 如果要求新添加的商品规格项发生改变,只需要变更模板,之前的商品还是按照之前的格式存储。
  • 缺点:
    1. 复杂的表单和json之间的转换。对js的编写要求很高。
;