浏览 11644 次
锁定老帖子 主题:关于商品分类 商品表和属性表的设计
精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-03-15
----------------------------- 以下是几个关联的对象 省去了 getter/setter 方法 ------------------ Field.java 属性 public class Field{ private Integer id; private String name; // 属性名称 } ProductField.java 商品属性 public class ProductField{ private Integer id; private Field field; // 属性对象 private String value; // 属性值 这里的值不管是整数 小数 还是什么类型都是用 String 类型 } Product.java 商品表 public class Product{ private Integer id; private String name; //商品名称 //根据商品 加载这个商品的所有属性 和属性值 private Set<ProductField> productFields = new HashSet<ProductField>();//商品属性集合 } Type.java public class Type{ private Integer id; private String name; //分类名称 //通过类型 可以加载这个类型下的所有商品 一种类型对应多种商品 //(暂时不考虑一种商品属于多种类型 例如手机属于电器类,也属于通讯类产品) private Set<Product> products = new HashSet<Product>(); } ---------------------- Hibernate 配置文件就不帖出来了,以下是由POJO和hbm配置文件生成出来的表 示例- //表关系 Type id name 1 电脑 3 手机 4 脑残 Product id name typeid 1 SONY 1(fk) 2 DELL 1 3 韩国猪 4 4 叁欣 3 Fields id name 1 颜色 2 重量 3 型号 ... ProductFields id pdctid fieldid value 1 (fk)1 (fk1)1 红色 2 1 2 500g 3 2 3 XYZ 4 2 1 白色 5 3 4 1000.00 --加载的测试数据 +++++++++ 商品信息 ++++++++ Name:Sony 价格 - 2000.00 型号 - YY-1939 名称 - 锁你牌手机 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-03-15
我要补充的是,当商品越来越多的时候,属性的增加也是自然的,有肯能属性增加到1000种,
那么我在后台管理 新增加一个商品,给它添加属性时,这时就需要从已经存在的属性中选出 它所需要的那么10种或者20种属性。 我的想法是,程序处理中: 1.在页面输出可选择的属性时按属性名称排序,这样可能选择快一些。 2.提供属性搜索,看数据库中有没有这么一属性,如果有直接使用,如果没有就添加 3.修改此数据库表,属性应该和大的类型相关联,作为常用属性。 次要属性可以从后续的属性列表中选择。 |
|
返回顶楼 | |
发表时间:2010-04-19
性能如何解决?
动态列总是有性能问题的,可是想不到什么好主意。 |
|
返回顶楼 | |
发表时间:2010-04-19
动态列性能上确实可能会有点问题。比如你要统计:红色的手机的一个月销售额就需要至少在四个表(类型、产品、属性、销售)进行联合查询。
我以前遇到类似问题,而且时间上不允许更改设计了,当时只是采取了一些简单的处理方式,比如针对需要的统计生成中间表,对库进行索引优化,根据时间进行分表等等。不过我个人感觉出问题的地方往往是一些特定统计,如果你能确定或基本上确定最终这些表的统计查询的方式,我觉得问题不大。你可以预估下数据量,假设半年后的运营, 类型、产品、属性、销售等数据大概是多少,联合查询的总记录数是多少。如果这个数据比较恐怖,那你再可以考虑更换其他方式。 |
|
返回顶楼 | |
发表时间:2010-04-30
敢问楼主,为什么要单独抽取一个Field呢?
public class ProductField{ private Integer id; private String fieldName; // 属性对象 private String fieldValue; // 属性值 } 这样不可以吗 |
|
返回顶楼 | |
发表时间:2010-04-30
darrendu 写道 敢问楼主,为什么要单独抽取一个Field呢?
public class ProductField{ private Integer id; private String fieldName; // 属性对象 private String fieldValue; // 属性值 } 这样不可以吗 取决于打算不打算复用field定义了。 个人看复用的原因更多些。可以跟着定义值的集合或限定,要改显示名字也是一起改。 |
|
返回顶楼 | |