## 方法一 mysql> SELECT * FROM `ware_product`; +----+----------+--------------+------------------------------+--------+ | id | category | name | attributes | status | +----+----------+--------------+------------------------------+--------+ | 1 | 329475 | 某种手机 | ["网络","颜色","存储"] | 1 | | 2 | 131329 | 某种衣服 | ["尺码","颜色"] | 1 | +----+----------+--------------+------------------------------+--------+ 2 rows in set (0.00 sec) mysql> SELECT * FROM `ware_item`; +----+-----+--------+--------------+------------------------+---------+-------+--------+ | id | pid | fakeid | name | attributes | price | stock | status | +----+-----+--------+--------------+------------------------+---------+-------+--------+ | 1 | 1 | 583701 | NULL | ["电信","白","16G"] | 1999.00 | NULL | 1 | | 2 | 1 | 583702 | NULL | ["电信","黑","16G"] | 1999.00 | NULL | 1 | | 3 | 1 | 583703 | 最后五台 | ["移动","黑","64G"] | 1999.00 | 5 | 1 | | 4 | 2 | 241351 | NULL | ["M","红"] | 128.00 | NULL | 1 | +----+-----+--------+--------------+------------------------+---------+-------+--------+ 4 rows in set (0.00 sec) 这是个简单的模型 ... 我把没用的东西比如副标题推荐语图片角标等等都去了 ... 库存也只是写个意思 ... 实际上库存不在这里 ... Product 表是抽象的产品表 ... 当前产品下的所有 SKU 的共有属性保存在这里 ... Item 表是具体的详情表 ... 所有涉及交易的实体都存在这里 ... 用户可感知的只有 item.fakeid ... 通过 fakeid 取得其他所有数据 ... ## 方法二 ### 京东的商品 SKU 设计 举个例子:博世的空调滤清器,再商品列表页空调滤清器分类博世品牌下全是同一 SPU 不同 SKU 的热销商品,进入到单个商品页面里,也可以选择其他的 SKU ,选择其他 SKU 就跳转到相应的页面。 这样价格、库存都在商品表里保存,只需加一个 SKU 表,保存相关的 SKU 商品配置关系即可。