仿京东商品分类

这几天,有个朋友找我帮忙做个类似京东商城的商品分类的数据库设计,本人也是刚入行没多少经验,更没有从事电子商务方面的经验,平时写个简单的数据库设计倒也还能用,现在要我写这个,心里没多少谱,现在我简单做了一个设计,抛砖引玉,烦请各位大牛点评拍砖,另外,烦请评隐藏贴的,希望还能给出宝贵意见,至少说说我是设计不对,还是其他方面不行,再此先谢过各位。


首先,产品分类跟视角的关系是N:M关系(一个视角中有m个分类,而一个分类可能属于多个视角),不同的视角,看到的商品的分类的方式和层次都不是相同的,比如按照商品的用途分类(用途视角)和按照商品的面向的用户(用户视角)看到的分类是不同的。



 

其次, 产品:分类的关系是 1:N关系(一个产品可归属到多个分类下),则必须新建一个表(商品分类映射),建二个字段(商品ID,分类ID),并把这二个字段设置为联合主键即可

补充一下:商品公共信息中记录的是所有商品都有的属性。



 

再者, 商品和商品的系列的关系是N:1的关系,但是系列有层级关系,比如ThinkPad 分T,X,R,W等系列,T系列下又有很多子系列,比如T400,T500等,所以又建立了系列和商品的关系表



 最后,商品的分类和商品的系列是N:M的关系,一种分类下有多个系列,而一个系列可能属于多个分类,此处不多说了。


补充说明一下分类字段扩展表:

对于产品的扩展属性,因为(在产品分类未选择之前)无法事先确定产品的扩展属性有哪些,所以这部分属性显然不适合通过在T_Product中预留一大堆字段来解决(而且这样性能也不好)
考虑到扩展属性总是基于分类的(比如:电脑类的产品应该具有"CPU频率、内存容量、显示器尺寸、硬盘大小"等扩展属性,而服装类产品应该具有“颜色、尺码、品牌、面料”等扩展属性),所以可以新建一个"分类扩展表"用于存储分类的扩展属性基础定义


 写道
将商品的共用属性(比如:价格,商品名称,商品编码这些肯定要有的东西)与扩展属性(即:根据分类不同而不同的非共用属性,比如电脑类的"CPU/硬盘容量...",充值卡类的"面值/适用地区...",服装类的"尺码/颜色...")分开保存而已,相当于原本应该保存一张表T_Product中的东西,拆分成二部分。(但由于每个分类的特性不同,每个类对应的产品都有不同的扩展属性值,所以不适合把所有产品的扩展属性保存在同一张表中,如果这样可以的话,干嘛还要费心把共用属性与扩展属性分开,搞拆分这么麻烦?)
共用属性保存到 T_Product表,而扩展属性保存到 T_Product_N 表(其中N 与 某一个分类记录的ID对应)
在逻辑上可以认为,每条产品记录的全部属性,都是 "T_Product中的一条记录" + "T_Product_N(N为该产品所属分类的对应Id)中的一条记录" 共同描述的

至于表的个数,其实只增加了“ 1 + N ” 张表(1即多出来的分类扩展属性定义表,而N即为T_Class中产品分类的记录条数),所以只要分类数不变,产品扩展表的数量也是一定的。
 

总体设计如下图,其中表内字段没有罗列完全,各位要是清楚的欢迎补充,也请众位拍砖


此次设计中参考了

中小型商城系统中的分类/产品属性/扩展属性的数据库设计

 部分内容的内容(http://www.cnblogs.com/yjmyzz/archive/2010/06/27/1766012.html

猜你喜欢

转载自mfnevi.iteye.com/blog/1161977