固定商品:譬如我们只是卖鞋,那么整个商品的属性基本都是一致的,列如鞋的颜色、尺寸、款式、品牌、价格。这时候我们涉及到的表往往是平面的。
这种涉及方法的特点:
1、纯定制化。
2、开发快,仅仅只要针对某些元素开发。
3、但是扩展性差,一旦我们新增了其他类型商品,那么真个系统就要重新做。
4、时间久了,这张表会无比大。影响系统性能。
所以我们尽可能的要设计一个相对通用的商品表。以适应大部分的电商系统。
今天我们先来设计一个商品主表(我们首先假设我们的是B2C)
包含通用信息:
(一)即时更新:id,商品名称,所属分类,入库时间,最后一次修改时间,商品简介。
(二)延时更新/日志更新:总点击量,月点击量,总销售量,月销售量,总评价数,月评价数。
下面我们在navicat里创建表 prod_main:
其中 prod_id 设置自动增长,设置为主键。
prod_adddate设置默认值为CURRENT_TIMESTAMP.
然后我们根据字段随便给这个表填入一个数据。
我们再创建一个简单的商品类别表 prod_class:
![]()
点击量日志表:
作为一个电商系统,我们出料知道商品的总点击量,还需要知道商品的周点击和月点击,然后这些数据是不能记录在商品主表中的。
课程中我们简单点,设计到月点击就好。
我们来创建prod_clicklog表:
![]()
接下来,我们用存储过程来模拟读书商品页面:
1、从商品主表根据ID读取商品所有信息。
2、如果读取到,则记录点击日志。
我们要注意的知识点:FOUND_ROWS() select时返回最近一条SQL的结果及条数。
ROW_COUNT(): update delete insert受影响的条数。
BEGIN SELECT * FROM prod_main WHERE prod_id = _prod_id LIMIT 1; SET @num=FOUND_ROWS(); IF @num=1 THEN #代表商品取出成功 INSERT INTO prod_clicklog(prod_id,user_ip,user_id) VALUES (_prod_id,_user_ip,_user_id); END IF; END 参数:IN _prod_id int,IN _user_ip varchar(15),IN _user_id int
老规矩,我们新建查询,CALL一下,得到结果:
然后我们再:
SELECT * from prod_clicklog;