这几天,有个朋友找我帮忙做个类似京东商城的商品分类的数据库设计,本人也是刚入行没多少经验,更没有从事电子商务方面的经验,平时写个简单的数据库设计倒也还能用,现在要我写这个,心里没多少谱,现在我简单做了一个设计,抛砖引玉,烦请各位大牛点评拍砖,另外,烦请评隐藏贴的,希望还能给出宝贵意见,至少说说我是设计不对,还是其他方面不行,再此先谢过各位。
首先,产品分类跟视角的关系是N:M关系(一个视角中有m个分类,而一个分类可能属于多个视角),不同的视角,看到的商品的分类的方式和层次都不是相同的,比如按照商品的用途分类(用途视角)和按照商品的面向的用户(用户视角)看到的分类是不同的。
其次, 产品:分类的关系是 1:N关系(一个产品可归属到多个分类下),则必须新建一个表(商品分类映射),建二个字段(商品ID,分类ID),并把这二个字段设置为联合主键即可
补充一下:商品公共信息中记录的是所有商品都有的属性。
再者, 商品和商品的系列的关系是N:1的关系,但是系列有层级关系,比如ThinkPad 分T,X,R,W等系列,T系列下又有很多子系列,比如T400,T500等,所以又建立了系列和商品的关系表
最后,商品的分类和商品的系列是N:M的关系,一种分类下有多个系列,而一个系列可能属于多个分类,此处不多说了。
补充说明一下分类字段扩展表:
考虑到扩展属性总是基于分类的(比如:电脑类的产品应该具有"CPU频率、内存容量、显示器尺寸、硬盘大小"等扩展属性,而服装类产品应该具有“颜色、尺码、品牌、面料”等扩展属性),所以可以新建一个"分类扩展表"用于存储分类的扩展属性基础定义
共用属性保存到 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)