如何为商品表添加上属性,属性值?属性对于商品而言肯定是一对多的,属性值对于属性也是一对多的。那么在不知道这个商品有哪些属性,属性下又有哪些属性值得情况下,如何来设计这个呢?商品的属性在不同的属性值下价格、库存、图片等都是不一样的eg:一个手机128G 版本的肯定和16G版本的价格不一样吧。
对于这个问题,我认为既然一件商品的属性在不同属性值下相当于另外一件商品。那么在这个商品的基础上应该拥有他的子商品集,关系也是一对多。即:我们要给商品加上属性这一元素,需要添加三张表,属性表、属性值表、子商品表。下面给出表的结构:
--
-- 表的结构 `goods` 商品表
--
CREATE TABLE `goods` (
`GoodsId` int(11) NOT NULL COMMENT '商品id',
`GoodsName` varchar(50) NOT NULL COMMENT '商品名称',
`Price` float NOT NULL COMMENT '价格',
`MarketPrice` float NOT NULL COMMENT '市场价',
`SalVolume` int(10) NOT NULL COMMENT '销量',
`GoodsImages` varchar(300) NOT NULL COMMENT '商品图片',
`GoodsClass` varchar(20) NOT NULL COMMENT '商品类型',
`GoodsDetails` text NOT NULL COMMENT '商品描述',
`goodstag` varchar(50) NOT NULL COMMENT '商品标签'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- 表的结构 `goodsitem` 子商品表
--
CREATE TABLE `goodsitem` (
`goodsitemid` int(11) NOT NULL COMMENT '子商品id',
`goodsid` int(11) NOT NULL COMMENT '商品id',
`itemprice` float NOT NULL COMMENT '子商品价格',
`iteminventory` int(11) NOT NULL COMMENT '库存量',
`valuesids` varchar(50) NOT NULL COMMENT '属性值id',
`title` varchar(50) NOT NULL COMMENT '商品标题',
`pics` varchar(200) NOT NULL COMMENT '商品图片'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- 表的结构 `goodsitemkey` 商品属性表
--
CREATE TABLE `goodsitemkey` (
`keyid` int(11) NOT NULL COMMENT '主键Id',
`goodsid` int(11) NOT NULL COMMENT '商品Id',
`keyname` varchar(50) NOT NULL COMMENT '属性名'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- 表的结构 `goodsitemvalues` 商品属性值表
--
CREATE TABLE `goodsitemvalues` (
`valuesid` int(11) NOT NULL COMMENT '属性值id',
`keyid` int(11) NOT NULL COMMENT '属性id',
`valuesname` varchar(50) NOT NULL COMMENT '属性名'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
需要注意的是在给子商品表添加数据时需要保证数据完整性,即他应该是属性名和属性值交叉得出的结果,valuesids必须描述完所有的属性值
eg:属性名有 (keyid = 1) 颜色 (keyid = 2)大小
属性值有 (valuesid = 1 )白色 (valuesid = 2 )黑色 (valuesid =3) 红色
(valuesid = 4 )小 (valuesid = 5 )中 (valuesid = 6) 大
那么对于子商品valuesids的描述应该有 valuesids= 1,4 ; valuesids=1,5;valuesids=1,6;valuesids= 2,4 ; valuesids=2,5;valuesids=2,6;valuesids= 3,4 ; valuesids=3,5;valuesids=3,6。
最后,这只是我的最开始时的思路,可能不完美,但是这个思考过程是很nice的