在一些商務系統中會對商品的屬性進行管理,方法有很多,可參考文章商品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)。
這種實現方式,屬性和屬性集都是可隨時擴展的,而具體的商品在使用屬性集時,通過其實例化來關聯,也沒有與屬性集做強依賴,可算一種靈活的實現思路。
