2011-09-15 15:11
针对自定义特性,一般来说有两种设计思路。
一种思路是行模型(Row Modeling)设计,就是将自定义特性,定义到产品表的列上,命名为Attribute1,Attribute2,Attribute3,…,AttributeN,用于支持最多N个自定义的特性,并且将特性的名称,值的约束在一张配置表中定义,见下表。
特性名
|
特性名
|
特性值类型
|
特性值范围
|
Attribute1
|
厚薄指数
|
List
|
薄,偏薄,适中,稍厚,加厚
|
Attribute2
|
修身指数
|
List
|
超修身,修身,适中,宽松
|
Attribute3
|
弹力指数
|
List
|
超弹力,弹力,适中,无弹力
|
……
|
|
|
|
AttributeN
|
…
|
…
|
…
|
表1-1 特性配置表
行模型设计,适用于查询性能要求高,特性数据使用率高的情况,能够提供较好的查询性能,但是在各个产品特性类型变化大的,产品特性数据相对于产品数据少很多的情况下,会造成空间的浪费。
另外一种思路,是EVA模型(EVA Modeling)[1]设计,将特性设计到单独的一张数据表中,每一行表示一个产品的一个特性信息。主要的数据结构,用类图描述如下:
其中,ProductAttributeInfo是类似于表1-1的类映射,ProductAttributeValueInfo为产品特性的值存储类。这样的结构,具有良好的扩展性,并且存储空间利用率高,不会给产品表带来太大的负载,缺点是查询语句要比行模型复杂,一般来说,会使用Pivot做一个倒转,或者其他方式优化。