主题:
商城系统数据库中的商品表设计思路分析。
一、商品表建立
商品基本信息主表:
CREATE TABLE `product` ( `id` int(10) NOT NULL AUTO_INCREMENT, `cid` int(10) NOT NULL COMMENT '分类', `title` varchar(100) NOT NULL COMMENT '商品名称', `pro_no` varchar(20) NOT NULL COMMENT '商品编码', `keywords` varchar(255) NOT NULL COMMENT '关键字', `desc` varchar(255) NOT NULL COMMENT '描述', `img` varchar(255) NOT NULL COMMENT '商品主图', `price` decimal(10,2) NOT NULL COMMENT '商品最低价格(SKU价格最低的产品)', `cost` decimal(10,2) NOT NULL COMMENT '成本(SKU价格最低的产品)', `pv` int(10) NOT NULL DEFAULT '0' COMMENT '点击量', `status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '状态:-1已删除,0下架,1正常', `add_time` int(10) NOT NULL COMMENT '添加时间', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;
分析:
将内容较多的字段分到另外的表中以提高单表查询的效率;
主表只记录商品的主要图片;
表中的keywords字段是为了便于搜索引擎搜索;
建立索引id字段,用于服务器程序关联商品其它表的相关信息;
使用status字段表示商品状态,实现软删除及停止销售信息;
主表记录分类信息,低一级的信息在其它表中记录,减少表的体积,提高查询效率。
商品分类表(首页展示):
CREATE TABLE `product_cates` ( `id` int(10) NOT NULL AUTO_INCREMENT, `pid` int(10) NOT NULL COMMENT '上级分类id', `ord` int(3) NOT NULL DEFAULT '0' COMMENT '排序', `title` varchar(50) NOT NULL COMMENT '标签标题', `status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '状态:0正常,1禁用', `add_time` int(10) NOT NULL COMMENT '添加时间', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=22 DEFAULT CHARSET=utf8 COMMENT='商品类目表';
分析:
分类信息表主要处理前台首页展示的分类栏目信息,关联主表中的商品上级分类pid,并提取到首页栏目显示。
商品图片表:
CREATE TABLE `product_img` ( `id` int(10) NOT NULL AUTO_INCREMENT, `product_id` int(10) NOT NULL COMMENT '商品id', `img` varchar(255) NOT NULL COMMENT '商品图片url', `add_time` int(10) NOT NULL COMMENT '添加时间', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=21 DEFAULT CHARSET=utf8;
分析:
图片资源相对较多较灵活,单独建立一张表并关联相应的商品主表id,在后台应用程序中处理关联。
商品销售信息表:
CREATE TABLE `product_sku` ( `id` int(10) NOT NULL AUTO_INCREMENT, `product_id` int(10) NOT NULL COMMENT '商品id', `properties` text NOT NULL COMMENT '属性键值对:property_name:property_value', `price` decimal(10,2) NOT NULL COMMENT '价格', `cost` decimal(10,2) NOT NULL COMMENT '成本', `stock` int(10) NOT NULL COMMENT '库存', `weight` int(10) NOT NULL COMMENT '重量:克', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=47 DEFAULT CHARSET=utf8;
分析:
使用商品id关联主表商品信息,主要保存商品实时信息,相对不固定。
属性键值对在后台程序业务逻辑中绑定商品的外观、尺寸、颜色等相关信息,这样就不用建立多个字段保存相关信息可以提高数据库效率。
主表中的价格和成本数据取自该表价格和成本字段。
细节:
将表与页面的模块一一对应,条理清晰;
批量操作数据库时,在程序上可使用事务避免因网络原因造成数据库查询执行不完整(mysql数据库myIsam引擎不支持事务,需要换成InnoDb引擎);
url中提交的商品id使用随机编号避免用户循环查询造成数据库压力;
使用数字代表商品状态,在后台程序转化为实际状态字符串;
商品软删除;
尽量减少表字段提高效率(此细节做法相对灵活,需要多积累方法和思路)。