类似淘宝的sku

首先数据库的设计我在百度上找了一大堆,可以说得上是众说纷纭啊!我看到一个中间表是这样设计的,商品ID sku属性,单价库存,看到中间属性存的是json然后就懵了,请各位大神告知什么操作能把这些属性还有值扔到一起,并且全部塞到指定的商品下边?

阅读 1.8k
评论
    2 个回答

    关于SKU的概念应该先谷歌了解下
    sku是属性and规格组成的,而属性规格又需要相互独立,为了避免未来业务扩展,实际一个属性属性链接另一个规格属性则就是一个sku,例如:

    规格:颜色 属性:红色
    规格:尺码 属性:xl
    规格:尺码 属性:xxl

    那么它的sku就又二个,(红色+xl)(红色+xxl)

    下面是我的数据表设计

    商品表

    CREATE TABLE `product` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商品标题',
      `category_id` int(11) NOT NULL COMMENT '商品分类编号',
      `mer_id` int(11) NOT NULL COMMENT '商家编号',
      `type_id` tinyint(4) NOT NULL COMMENT '类型编号',
      `sketch` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '简述',
      `intro` text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商品描述',
      `keywords` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '商品关键字',
      `marque` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商品型号',
      `barcode` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '仓库条码',
      `brand_id` int(11) NOT NULL COMMENT '品牌编号',
      `virtual` int(11) NOT NULL DEFAULT '0' COMMENT '虚拟购买量',
      `price` decimal(8,2) NOT NULL COMMENT '商品价格',
      `market_price` decimal(8,2) NOT NULL COMMENT '市场价格',
      `integral` int(11) NOT NULL DEFAULT '0' COMMENT '可使用积分抵消',
      `stock` int(11) NOT NULL COMMENT '库存量',
      `warning_stock` int(11) NOT NULL COMMENT '库存警告',
      `picture_url` varchar(125) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '封面图',
      `status` tinyint(4) NOT NULL COMMENT '状态 -1=>下架,1=>上架,2=>预售,0=>未上架',
      `is_package` enum('0','1') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '是否是套餐',
      `is_integral` enum('0','1') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0' COMMENT '是否是积分产品',
      `deleted_at` timestamp NULL DEFAULT NULL,
      `created_at` timestamp NULL DEFAULT NULL,
      `updated_at` timestamp NULL DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=136 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

    sku表

    CREATE TABLE `product_sku` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `product_id` int(11) NOT NULL COMMENT '商品编码',
      `name` varchar(125) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'sku名称',
      `img` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '主图',
      `price` decimal(8,2) NOT NULL COMMENT '价格',
      `stock` int(11) NOT NULL DEFAULT '0' COMMENT '库存',
      `code` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '商品编码',
      `barcode` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '商品条形码',
      PRIMARY KEY (`id`),
      KEY `product_sku_name_product_id_index` (`name`,`product_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1125 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

    规格表

    CREATE TABLE `product_attribute` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `category_id` int(11) NOT NULL COMMENT '商品类别编号',
      `name` varchar(25) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '属性名称',
      `sort` int(11) NOT NULL DEFAULT '999' COMMENT '排列次序',
      PRIMARY KEY (`id`),
      KEY `product_attribute_category_id_name_index` (`category_id`,`name`)
    ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

    属性表

    CREATE TABLE `product_attribute_option` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `name` varchar(125) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '选项名称',
      `attr_id` int(11) NOT NULL COMMENT '属性编码',
      `sort` int(11) NOT NULL DEFAULT '999' COMMENT '排序',
      PRIMARY KEY (`id`),
      KEY `product_attribute_option_name_attr_id_index` (`name`,`attr_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

    规格属性绑定SKU的表

    CREATE TABLE `product_attribute_and_option` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `sku_id` int(11) NOT NULL COMMENT 'sku编码',
      `option_id` int(11) NOT NULL DEFAULT '0' COMMENT '属性选项编码',
      `attribute_id` int(11) NOT NULL COMMENT '属性编码',
      `sort` int(11) NOT NULL DEFAULT '999' COMMENT '排序',
      `supplier_option_id` int(11) DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `product_attribute_and_option_sku_id_option_id_attribute_id_index` (`sku_id`,`option_id`,`attribute_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=4819 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
      相似问题
      推荐文章