在一些商务系统中会对商品的属性进行管理,方法有很多,可参考文章商品SKU分析和设计。在这里,我分享一种更灵活的实现思路。
商品属性设计为公用,属性由属性集管理,属性集也是公用的,如下:
1. 先定义属性 Attribute:
这个表只是定义属性的名称。
2. 定义属性具体的值 Attribute_Value:
其中Attribute可直接用Attribute表中的ID,这里用Name只是更好的体现其关系。
3. 定义属性集 AttributeSet:
属性集一般是根据商品来定义的,如衣服的属性集,手机的属性集等等。
4. 定义属性集的值(即属性集中包含哪些属性)AttributeSet_Value:
其中AttributeSet和Attribute栏位可用具体表中的ID。
以上四个表完成对商品属性和属性集的定义。
在具体的商品中却不能直接使用AttributeSet_Value,因为AttributeSet是公用的。
参考class的实例化引用,具体的商品关联其属性集时,可实例化一个属性集,如:
5. 定义属性集实例化 AttributeSetInstance:
衣服的属性集一般包含颜色和尺寸,但是每种衣服的颜色和尺寸(Value)肯定有所不同,因此实例化一个Coat的属性集,它的具体值用下表来实现:
6. 定义属性集实例值 AttributeSetInstance_Value:
其中Coat被实例化两次,它的属性及其Value是不同的。
此时,商品就可以关联AttributeSetInstance的ID,进而实现了它的属性(AttributeSetInstance_Value)。
这种实现方式,属性和属性集都是可随时扩展的,而具体的商品在使用属性集时,通过其实例化来关联,也没有与属性集做强依赖,可算一种灵活的实现思路。