• python --商品规格--表结构设计


    商品规格表结构设计

    商品规格包括规格组合、规格项,规格项为规格组的成员。

    规格组

      |-规格项:规格值

      |-规格项:规格值

    规格组

      |-规格项:规格值

      |-规格项:规格值

    同一类商品的规格相同。

    方案一

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

    表设计

    商品表:tb_item

    列名       类型       键   说明

    item_id  bigint     P     商品id

    cat_id    bigint     F     商品分类id

    商品分类表:tb_item_cat

    列名       类型       键   说明

    cat_id    bigint     P     商品分类id

    商品规格组表:tb_item_param_group

    列名       类型       键   说明

    group_id bigint     P     商品规格组id

    group_name varchar         商品规格组名称

    cat_id    bigint     F     商品分类id

    商品规格项表:tb_item_param_key

    列名       类型       键   说明

    key_id    bigint     P     商品规格项id

    key_name    varchar         商品规格项名称

    group_id bigint     F     商品规格组id

    商品规格值表:tb_item_param_value

    列名       类型       键   说明

    item_id  bigint     P     商品id(联合主键)

    key_id    bigint     P     商品规格项id(联合主键)

    param_value varchar         商品规格信息

    表关系

    查询语句

    查询某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

    缺点

    需要创建多张表来描述规格参数之间的关系。

    查询时需要复杂的sql语句查询。

    规格参数数据量是商品信息的几十倍,数据量十分庞大,查询时效率很低。

    商品参数变时需要改动多个表。

    方案二

    每一个商品对应一个规格参数的模板。

    [

      {

        //规格组名称

        "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": "支持"

          }

        ]

      }

    ]

    特点

    优点:

    单表查询,不需要做多表管理。

    如果要求新添加的商品规格项发生改变,只需要变更模板,之前的商品还是按照之前的格式存储。

    缺点:

    复杂的表单和json之间的转换。对js的编写要求很高。

  • 相关阅读:
    freemarker.core.ParseException:Unexpected end of file reached
    freemarker.template.TemplateException:Error executing macro:mainSelect
    Perl--子程序传参
    MFC管理员权限(UAC下的程序权限提升)
    高级编程
    vmstat 查看堵塞的队列
    linux crontab 文件位置和日志位置
    linux 定时执行shell脚本 crontab
    Redis 命令参考 » Server(服务器)
    AiX--Ipcs 资源
  • 原文地址:https://www.cnblogs.com/weifeng-888/p/10706432.html
Copyright © 2020-2023  润新知