商品系统设计(三):商品属性设计之固定属性

本文介绍了一种商品属性管理系统的设计方案,包括商品分类属性表和商品属性对应表的创建,以及通过存储过程实现商品及其属性的批量插入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天我们讲一下商品属性

我们知道,不同类别的商品属性是不同的。
比如图书和男装
图书:作者、出版社、出版时间、ISBN、开本
男装:工艺(图案或颜色)、风格、材质等

所以我们首先要建立一个商品分类属性表prod_class_attr

DROP TABLE IF EXISTS `prod_class_attr`;
CREATE TABLE `prod_class_attr` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `attr_name` varchar(100) DEFAULT NULL COMMENT '属性名称',
  `attr_note` varchar(100) DEFAULT NULL COMMENT '属性备注',
  `attr_pid` int(11) DEFAULT '0' COMMENT '属性父 id',
  `prod_classid` int(11) DEFAULT NULL COMMENT '商品分类id',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4;

INSERT INTO `prod_class_attr` VALUES ('1', 'press', '出版社', '0', '1'), ('2', 'author', '作者', '0', '1'), ('3', 'format', '开本', '0', '1'), ('4', 'pressdate', '出版时间', '0', '1'), ('5', 'technics', '工艺', '0', '2'), ('6', 'style', '风格', '0', '2'), ('7', 'target', '适用对象', '0', '2'), ('8', 'material', '材质', '0', '2');

所以接下来要建一个商品属性对应表

prod_id 商品id
attr_id 属性id
attr_value 属性值
注意,在表单中并不是所有用户都会填全属性

CREATE TABLE `prod_attr` (
  `prod_id` int(11) NOT NULL,
  `attr_id` int(11) NOT NULL,
  `attr_value` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`prod_id`,`attr_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;

新增商品流程

1、第一步,往商品主表插入数据
2、并获取自增的商品ID
3、批量插入商品属性(怎么插入)

先看一个SQL

SELECT 1 AS attr_id, '中信出版社' AS attr_value UNION SELECT 2 AS attr_id, '刘勇' AS attr_value;

这里写图片描述
这样是为了批量插入到prod_attr

下面,我们要把这条SQL放到存储过程中,并且需要动态执行。
这里写图片描述
这就是一个新建商品的mysql存储过程,商品的属性是在得到商品id之后,根据传入的一个sql字符串,再拼凑成一条插入到表prod_attr 的SQL完成的。

BEGIN
  SET @pid=0;
  INSERT INTO prod_main(prod_name,prod_classid) VALUES (_prod_name,_class_id);
  SET @pid=LAST_INSERT_ID();
  #SET @ss='INSERT INTO prod_attr SELECT ? AS prod_id, a.* FROM (SELECT 1 AS attr_id, \'中信出版社\' AS attr_value UNION SELECT 2 AS attr_id, \'刘勇\' AS attr_value) a';
  SET @ss=CONCAT('INSERT INTO prod_attr SELECT ? AS prod_id, a.* FROM (',_attr_sql,') a');
  PREPARE pname FROM @ss;
  EXECUTE pname USING @pid;
  DEALLOCATE PREPARE pname;
END

来执行这个sp_new_prod存储过程:

CALL sp_new_prod('java从入门到精通',1,'SELECT 1 AS attr_id, \'中信出版社\' AS attr_value UNION SELECT 2 AS attr_id, \'刘勇\' AS attr_value');

这样就完成了既插入了prod_mian 商品主表,也插入了prod_attr 商品属性表。
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值