• 电商商品表设计


    一、了解下商品中的两个概念:SPU和SKU

    SPU(Standard Product Unit):标准化产品单元。是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个产品的特性。通俗点讲,属性值、特性相同的商品就可以称为一个SPU。

    SKU=Stock Keeping Unit(库存量单位)。即库存进出计量的基本单元,可以是以件,盒,托盘等为单位。

    举个例子:iPhone6是一个SPU,iPhone6 32G 白色是一个SKU,iPhone6 128G 白色是另一个SKU。

    我们刚才说的 iphone6,书面称谓叫“SPU” Standard Product Unit (标准化产品单元),它是最接近用户认知的产品单元,比如用户说,我想买个 iphone4、iphone6、小米 4,这些都是 SPU,也就是用户普遍认知范围内的一种产品。然而在电商系统中只有 SPU 并没有什么卵用,用户购买时肯定要确定,需要什么颜色、多少 G 的,支持什么网络。所以,例如金色 -16G- 移动版 iphone6,就需要一个名称去规范它,这个名称叫“SKU” Stock Keeping Unit(库存单元),换句话理解就是库存里面存的东西,库存里存在东西肯定是具体的某种规格的 iphone6。基于这个理解,我们先画下图:

    SPU表有了,这里还是以iPhone6为例,iPhone6有内存16G的,有32G的,有黑色,有白色等信息,这些信息我们称之为规格,比如内存是一种规格,颜色是一种规格。这些规格放在那里呢,放在SPU表里面自然是不合适的,因为每个SPU的规格都不一样。因此这里需要一张规格表,用来存放内存,颜色(不是存放32G,黑色,就存放“内存”,“颜色”这个值,表示这个SPU具有内存,颜色规格),然后用一张中间表,把SPU表和规格表关联起来,如图:

     

    接下来需要解决的是,如何存放“32G”,“黑色”这些值呢?这些时具体规格的值,只需要新建一张规格值表即可。规格表和规格值表是一对多的关系,即一个规格有多个值,内存有32G,64G等。

    发现还少了品牌的概念,SPU与品牌的关系是一对一的关系,一个SPU具有一个品牌(iPhone6的品牌是苹果),这点好理解,因此只要新建一张品牌表,然后SPU表里添加一个品牌id。

     

    至此,我们似乎已经可以通过规格搜索出大部分的商品,屏幕尺寸,网络,机身内存这三项都是规格,品牌我们也知道了。

    但是,购物商城中不可能只卖手机,还会卖电脑,衣服等。这里我们衍生出另一个概念:分类。其中手机是一种分类。因此,我们要新建一张分类表,里面存放各种分类名称,然后在SPU表里面添加一个分类id,如图:

     

    现在,我们已经把SPU相关的表设计好了,现在来设计SKU相关的表。

    根据SKU的定义得知,SKU是SPU的一种详细说明,因此SPU与SKU的关系是一对多的关系,即一个SPU对应多个SKU,首先我们要有一张SKU表:

     

    其中SKU表中有一个spu_id。然后我们来看下SKU需要哪些字段,上面说到了SPU有规格,那SKU就落实到了具体的规格值,即具体的内存,颜色等。规格值表已经有了,因此需要建一张SKU与规格值的关联表:

     

    大部分的内容我们都有了,但还缺少几样东西,如果是C2C的商城,那应该有个店铺,还有一个增值保障。一个SKU对应一个店铺,可直接在SKU表里加一个店铺id,然后有一张独立的店铺表。

    至于增值保障,肯定需要一张表来存放增值保障信息,然后它跟SKU的关系是多对多的关系,需要一张中间表来关联

    至此,商品表的核心内容已经设计得差不多了。

    原文链接:https://blog.csdn.net/thc1987/article/details/80426063


    一张相似的设计图

     图片来源:http://www.360doc.com/content/18/0810/15/58569063_777227507.shtml

     数据表设计

      1 对于商品模块,统一使用goods_做前缀。
      2 首先是两个比较简单的表:分类表和品牌表
      3 
      4 分类表:
      5 CREATE TABLE `goods_category` (
      6   `id` bigint(20) unsigned NOT NULL auto_increment,
      7   `category_name` varchar(50) NOT NULL COMMENT '分类名称',
      8   `gmt_create` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
      9   `gmt_update` timestamp NOT NULL default '0000-00-00 00:00:00',
     10   PRIMARY KEY  (`id`)
     11 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='分类表';
     12 
     13 品牌表:
     14 CREATE TABLE `goods_brand` (
     15   `id` bigint(20) unsigned NOT NULL auto_increment,
     16   `brand_name` varchar(50) NOT NULL COMMENT '品牌名称',
     17   `gmt_create` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
     18   `gmt_update` timestamp NOT NULL default '0000-00-00 00:00:00',
     19   PRIMARY KEY  (`id`)
     20 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='品牌表';
     21 
     22 接下来是SPU表:
     23 
     24 CREATE TABLE `goods_spu` (
     25   `id` bigint(20) unsigned NOT NULL auto_increment,
     26   `spu_no` varchar(50) NOT NULL COMMENT '商品编号,唯一',
     27   `goods_name` varchar(50) NOT NULL COMMENT '商品名称',
     28   `low_price` decimal(9,2) NOT NULL COMMENT '最低售价',
     29   `category_id` bigint(20) NOT NULL COMMENT '分类id',
     30   `brand_id` bigint(20) NOT NULL COMMENT '品牌id',
     31   `gmt_create` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
     32   `gmt_update` timestamp NOT NULL default '0000-00-00 00:00:00',
     33   PRIMARY KEY  (`id`),
     34   UNIQUE KEY `uk_spu_no` (`spu_no`)
     35 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='spu表';
     36 
     37 然后是SPU规格相关的表:
     38 规格表:
     39 CREATE TABLE `goods_spec` (
     40   `id` bigint(20) unsigned NOT NULL auto_increment,
     41   `spec_no` varchar(50) NOT NULL COMMENT '规格编号',
     42   `spec_name` varchar(50) NOT NULL COMMENT '规格名称',
     43   `gmt_create` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
     44   `gmt_update` timestamp NOT NULL default '0000-00-00 00:00:00',
     45   PRIMARY KEY  (`id`)
     46 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='规格表';
     47 
     48 规格值表:
     49 CREATE TABLE `goods_spec_value` (
     50   `id` bigint(20) unsigned NOT NULL auto_increment,
     51   `spec_id` bigint(20) NOT NULL COMMENT '规格id',
     52   `spec_value` varchar(50) NOT NULL COMMENT '规格值',
     53   `gmt_create` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
     54   `gmt_update` timestamp NOT NULL default '0000-00-00 00:00:00',
     55   PRIMARY KEY  (`id`)
     56 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='规格值表';
     57 
     58 SPU规格表
     59 CREATE TABLE `goods_spu_spec` (
     60   `id` bigint(20) unsigned NOT NULL auto_increment,
     61   `spu_id` bigint(20) NOT NULL COMMENT 'spu_id',
     62   `spec_id` bigint(20) NOT NULL COMMENT 'spec_id',
     63   `gmt_create` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
     64   `gmt_update` timestamp NOT NULL default '0000-00-00 00:00:00',
     65   PRIMARY KEY  (`id`)
     66 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='spu规格表';
     67 
     68 接下来是SKU相关的表:
     69 SKU表:
     70 CREATE TABLE `goods_sku` (
     71   `id` bigint(20) unsigned NOT NULL auto_increment,
     72   `sku_no` varchar(50) NOT NULL COMMENT 'sku编号,唯一',
     73   `sku_name` varchar(50) NOT NULL COMMENT 'sku名称(冗余spu_name)',
     74   `price` decimal(9,2) NOT NULL COMMENT '售价',
     75   `stock` int(11) NOT NULL COMMENT '库存',
     76   `shop_id` bigint(20) NOT NULL COMMENT '商铺id,为0表示自营',
     77   `spu_id` bigint(20) NOT NULL COMMENT 'spu_id',
     78   `gmt_create` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
     79   `gmt_update` timestamp NOT NULL default '0000-00-00 00:00:00',
     80   PRIMARY KEY  (`id`)
     81 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='sku表';
     82 
     83 商铺表:
     84 CREATE TABLE `shop_info` (
     85   `id` bigint(20) unsigned NOT NULL auto_increment,
     86   `shop_name` varchar(50) NOT NULL COMMENT '店铺名称',
     87   `gmt_create` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
     88   `gmt_update` timestamp NOT NULL default '0000-00-00 00:00:00',
     89   PRIMARY KEY  (`id`)
     90 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='店铺表';
     91 
     92 增值保障表:
     93 CREATE TABLE `goods_safeguard` (
     94   `id` bigint(20) unsigned NOT NULL auto_increment,
     95   `safeguard_name` varchar(50) NOT NULL COMMENT '保障名称',
     96   `price` decimal(9,2) NOT NULL COMMENT '保障价格',
     97   `gmt_create` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
     98   `gmt_update` timestamp NOT NULL default '0000-00-00 00:00:00',
     99   PRIMARY KEY  (`id`)
    100 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='增值保障';
    101 
    102 SKU增值保障
    103 CREATE TABLE `goods_sku_safeguard` (
    104   `id` bigint(20) unsigned NOT NULL auto_increment,
    105   `sku_id` bigint(20) NOT NULL COMMENT 'sku_id',
    106   `safeguard_id` bigint(20) NOT NULL COMMENT 'safeguard_id',
    107   `gmt_create` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
    108   `gmt_update` timestamp NOT NULL default '0000-00-00 00:00:00',
    109   PRIMARY KEY  (`id`)
    110 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='sku增值保障';
    111 
    112 SKU规格值表
    113 CREATE TABLE `goods_sku_spec_value` (
    114   `id` bigint(20) unsigned NOT NULL auto_increment,
    115   `spu_id` bigint(20) NOT NULL COMMENT 'sku_id',
    116   `spec_value_id` bigint(20) NOT NULL COMMENT '规格值id',
    117   `gmt_create` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
    118   `gmt_update` timestamp NOT NULL default '0000-00-00 00:00:00',
    119   PRIMARY KEY  (`id`)
    120 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='sku规格值';
    View Code
  • 相关阅读:
    负载均衡算法(四)IP Hash负载均衡算法
    负载均衡算法(二)加权轮询负载均衡算法
    负载均衡算法(一)轮询负载均衡算法
    移动端媒体查询CSS3适配规则
    JavaScript中label语句的使用
    NODE简易综合应用服务器搭建
    ES6--不定参数
    ES6--默认参数表达式,参数变动
    node基础学习——http基础知识-02-http响应数据流
    node基础学习——http基础知识-01-客户单请求
  • 原文地址:https://www.cnblogs.com/FondWang/p/11671612.html
Copyright © 2020-2023  润新知