【数据库】给商品表添加上属性

如何为商品表添加上属性,属性值?属性对于商品而言肯定是一对多的,属性值对于属性也是一对多的。那么在不知道这个商品有哪些属性,属性下又有哪些属性值得情况下,如何来设计这个呢?商品的属性在不同的属性值下价格、库存、图片等都是不一样的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的

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值