1.把原有的横表转化为纵表存储属性,即
产品表:(product_id, product_name, product_class)
产品属性表:(product_id, property_id, property_name, property_value)
2.保持原有横表设计思路,但是弹性字段含义单独元数据表存储
产品表:(product_id, product_name, product_class, prop1, prop2, ... propn)
产品属性含义元数据表:(product_class, prop1_name, prop2_name, ... propn_name)
不管横表还是纵表,都有明显缺陷
所以,不要尝试只用数据库去统一解决这个问题,思路扩散一些:
1.)公共表:提炼商品公共的信息放到数据库,例如:商品id,名称,发布的商家,发布的日期,上架状态
2.)扩展表:将变化的信息放到另外一个表,可以是数据库表,例如电脑商品一个表,服装一个表;也可以将信息放到MongoDB或者ElasticSearch这类文档数据库
3.)搜索组件:扩展表在全文搜索的时候不好实现,因此需要独立的组件负责搜索,可以用ElasticSearch或者solr来冗余一份数据,用于搜索