商品主表设计
做一个网站如果涉及到商品有这么几种
固定商品
比如我们只是卖鞋的,那么整个商品的属性基本都是一致的。鞋的颜色、尺寸、款式、品牌、价格等属性。
这时我们涉及到的表往往是“平面的”。
简单设计
商品主表(我们首先假设我们是B2C的)
包含通用信息
(一)即时更新
id、商品名称、所属分类、入库时间、最后一次修改时间、商品简介
(二)延时更新/日志更新
总点击量、月点击量、总销量、月销量,总评价数、月评价数
CREATE TABLE `prod_main` (
`prod_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`prod_name` varchar(50) DEFAULT NULL,
`prod_calssid` int(11) DEFAULT NULL COMMENT '商品分类',
`prod_intr` text,
`prod_adddate` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`prod_lasteddate` timestamp NULL DEFAULT NULL,
`prod_click_all` int(11) DEFAULT '0',
`prod_click_month` int(11) DEFAULT '0',
`prod_sale_all` int(11) DEFAULT '0',
`prod_sale_month` int(11) DEFAULT '0',
`prod_rate_all` int(11) DEFAULT '0',
`prod_rate_month` int(11) DEFAULT '0',
PRIMARY KEY (`prod_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
INSERT INTO `prod_main` VALUES ('1', 'Python基础教程(第2版 修订版)', '1', '\nPython基础教程(第2版 修订版)Python基础教程(第2版 修订版)Python基础教程(第2版 修订版)Python基础教程(第2版 修订版)Python基础教程(第2版 修订版)Python基础教程(第2版 修订版)Python基础教程(第2版 修订版)Python基础教程(第2版 修订版)Python基础教程(第2版 修订版)\n企业批量购书\n分享 关注商品举报\nPython基础教程(第2版 修订版)\nPython入门佳作 经典教程的全新修订 10个项目引人入胜', '2017-01-03 17:09:29', '2017-01-03 17:09:22', null, null, null, null, '0', '0');
商品分类表:
CREATE TABLE `prod_class` (
`prod_classid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`prod_classname` varchar(50) DEFAULT NULL,
`prod_pclassid` int(11) DEFAULT '0',
PRIMARY KEY (`prod_classid`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;
INSERT INTO `prod_class` VALUES ('1', '图书', '0');
点击量日志表
作为一个电商系统,我们除了指定商品的总点击量。还需要指定商品的周点击量和月点击量。然而这些数据是不能记录在商品主表中的。
同时还需要有个日志表。
CREATE TABLE `prod_clicklog` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`prod_id` int(11) DEFAULT NULL,
`user_ip` varchar(15) DEFAULT NULL,
`user_id` int(11) DEFAULT '0',
`clickdate` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
接下来我们来模拟读取商品页面
1、从商品主表根据ID读取商品所有信息
2、如果读取到,则记录点击量日志
知识点:
FOUND_ROWS(),select时返回最近一条sql的结果集条数;
ROW_COUNT(),update/delete/insert 受影响的条数
新建存储过程sp_load_prod
:
BEGIN
SET @num=0;
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
我们来执行这个存储过程: