一般由于业务多变,表结构经常会增加列,特别像商品这类表,可能会根据业务需要增加很多属性,由于SQL SERVER2008 可以对XML字段建立索引,可以大大提高xml列的查询效率,故通过将不断增加的属性统一放到一个xml列中,这样就可以避免修改数据库表结构,然后通过维护xml列来实现不断变化的业务需求。
关于创建xml列及索引,以及查询xml的方法,这里转2篇帖子:
另外以商品扩展举个例子:
例如手机和笔记本电脑两种商品,我们可以定义手机类商品有“是否智能机”、“手机制式”、“外观”等几个特有属性,而笔记本电脑类商品有“尺寸”、“CPU类别”、“是否独立显卡”等几个特有属性,网站的用户可以利用这些扩展属性对同一类别下的商品进行方便的筛选查询,先定义如下表结构:
属性定义表(表名:expand) | |||
---|---|---|---|
唯一标识(fid) | 商品类别ID(fclassId) | 扩展属性名称(fexpandName) | 排序值(forder) |
1 | 1234 | 是否智能机 | 1 |
2 | 1234 | 手机制式 | 2 |
属性选择值定义表(表名:expandItem) | |||
---|---|---|---|
唯一标识(fid) | 扩展属性ID(fexpandId) | 选择项名称(fname) | 排序值(forder) |
1 | 1 | 是 | 1 |
2 | 1 | 否 | 2 |
3 | 2 | GSM | 1 |
4 | 2 | CDMA | 2 |
数据表示手机类别定义了两个扩展属性:是否智能机(选项:是|否);手机制式(GSM|CDMA)。
如果我们要将以下数据(N73的扩展属性)存入数据库中:
商品名称 | 商品ID | 是否智能机 | 手机制式 |
---|---|---|---|
Nokia N73 | 4321 | 是 | GSM |
我们需要装扩展属性的信息组合成以下XML格式字符串:
<exp>
<item name="1" value="1" />
<item name="2" value="3" />
</exp>
<item name="1" value="1" />
<item name="2" value="3" />
</exp>
SQL为:
insert into productExpand(fproductId,fexpand) values(4321,'<exp><item name="1" value="1" /><item name="2" value="3" /></exp>')
添加到商品扩展属性表(productExpand)中。此时商品扩展属性表(productExpand)的数据如下:
商品扩展属性表(表名:productExpand) | ||
---|---|---|
唯一标识(fid) | 商品ID(fproductId) | 商品扩展属性(fexpand) |
1 | 4321 | <exp> <item name="1" value="1" /> <item name="2" value="3" /> </exp> |
以上就完成了对于商品扩展属性信息添加,然后通过Sqlserver 可以对xml列进行操作。