XML在可扩展CRM系统中的应用
2010-06-05唐欢徕
唐欢徕
(华南理工大学 计算机科学与工程学院,广东 广州510640)
SQL Server 2005中增加了新的XML支持,引入了一种称为XML的本机数据类型。用户创建的数据表,可以在关系列之外还有一个或多个 XML类型的列,此外,还允许带有变量和参数。为了更好地支持XML模型特征(例如文档顺序和递归结构),XML值以内部格式存储为大型二进制对象(BLOB)[1]。SQL Server 2005将 XML数据存储在关系数据库中会给数据管理和查询处理带来好处。SQL Server 2005提供了强大的查询和修改关系数据的能力,而且已经扩展到查询和修改XML数据。 它支持关系数据和XML数据之间的互操作,这为更广泛地采用 XML功能开辟了道路[3]。关系列与XML类型列并存的方式,既能保持原有关系数据库的优点,又能在关系数据库中使用XML更好地描述复杂的数据结构,如层次或树状的数据。
本文在CRM系统客户属性表中引入了XML类型,并且使用XML配置文件描述具有层次结构的客户属性,并根据此配置文件动态生成界面,因而实现了客户属性的可扩展操作。使用XML字段存储和扩展客户属性以及具有层次性的客户属性,并在系统中实现了对客户属性的添加、修改、删除、查询等操作。可扩展的CRM系统,既保持了原有基于关系数据库的CRM系统的特点,又可以增删客户属性,或记录较为复杂的客户属性,因而具有较好的灵活性。
1 关系数据和XML数据的集成
1.1 XML数据的存储
用户可以在同一个数据库中存储关系数据和XML数据。简而言之,数据库引擎除了知道如何遵循关系数据模型之外,还知道如何遵循XML数据模型。在升级到SQL Server 2005之后,关系数据和SQL应用程序仍然能够正常工作。对SQL Server 2005中XML数据类型的列,可以建立XML列的索引,并对其进行查询和修改。数据库利用现有的关系基础结构和引擎组件(例如存储引擎和查询处理器)来进行 XML处理[1]。
1.2 使用XQuery查询与更新XML数据
多样化的结构数据需求和保留数据间隐含约束的必要性是扩展关系型数据模型支持XML文档存储的最重要的两个原因。另外,SQL语言在处理半结构化或者标记信息时的局限性也促使了XQuery语言的发展。XQuery语言在设计的时候已经考虑到XML数据的特性和处理XML数据的相关问题[1]。
SQL Server 2005提供了对XQuery的全面支持,它将XPath 2.0作为导航语言包括在内,其实现提供了用于遍历节点(for)、节点检查(where)、返回值(return)和排序(order by)的构造,也提供了用于在查询过程中重新进行数据构形的元素构造。XML数据类型提供了4种检索XML值或实例的方法:query()、value()、exist()和 nodes(),以及修改 XML 数据的modify()方法。前4个方法均接受XQuery表达式作为参数,其中:query()方法用于提取 XML 实例的部分;value()方法用于从XML实例提取标量值;exist()方法用于对XML实例进行存在性检查;nodes()方法用于从XML实例片断产生一个新的XML实例。modify()方法执行XML DML以完成对XML数据片段的修改,如添加或删除子树或者更新标量值等,而需要修改的数据也是通过XQuery来定位的[2]。
结构化数据应该存储在表和关系列中。当应用程序需要执行细粒度查询和数据修改时,对于使用XML的半结构化数据和标记数据,XML数据类型是比较合适的选择[4]。
在基于关系数据库的CRM系统中,为了实现客户属性的扩展,基本的客户属性被看作属于结构化的数据,用关系数据库的普通数据类型存储,客户的扩展属性使用SQL Server 2005中专门的XML数据类型存储。
2 CRM系统中对客户属性的扩展
2.1 客户属性的扩展
可扩展的CRM系统,核心是可扩展的客户属性的设计[2],允许系统动态地增减客户的属性,因此这里提出一种基于关系数据以及XML数据混合的方式来实现可扩展的客户属性模型。基于此模型,系统可以实现对关系数据库数据和XML数据的混合操作,如查询、插入、更新、删除。首先抽取CRM系统拥有的共同的客户属性,如客户姓名、电话、年龄、地址等,这些固定的属性直接对应关系数据库里的列。客户的扩展属性,由于其可动态增删的特性,具有一定半结构化的特征,因此使用SQL Server 2005中增加的专门的XML数据类型存储。在这个XML字段中,可扩展的客户属性以属性名和属性值成对出现。对XML字段使用XQuery语言进行查询与更新操作,即可实现对客户扩展属性的动态增删。因此本CRM系统中记录客户属性的数据表的结构为若干个基本属性的字段加一个XML字段,如图1所示。
图1 对客户属性的扩展Fig.1 Expansion of customer property
2.2 查询操作
由于关系数据和XML数据存放于同一数据表中,对客户数据的查询被分为2种类型,查询客户的基本属性时,使用的是普通的SQL查询;对客户数据的扩展属性,也就是XML字段查询时,使用的是XQuery查询[3]。具体的查询流程如图2所示。
图2 查询流程Fig.2 Flow chart of query
对某个客户资料进行普通SQL查询时,对于表中的非XML字段,可以由程序直接呈现到界面上,对于XML字段,基于ASP.NET的应用程序可以使用命名空间System.Data.SqlTypes中的SqlXml类型对象对XML字段进行处理,使用此对象创建一个XmlReader类型变量,读取XML字段里的某个节点的客户扩展属性的属性名和属性值,从而实现对客户扩展属性的查询显示。
对于客户扩展属性即XML字段的查询,可以使用SQL Server 2005里所支持的XQuery语句进行查询。以下的查询,条件是客户扩展属性中存在“推荐人”属性,且“推荐人”为“李东”,返回符合此条件的所有客户的名字、电话、地址、性别以及表示此客户的扩展属性的XML字段[4]:
2.3 插入操作
可扩展CRM系统的插入操作也分为对数据表的行插入操作和对XML字段添加节点的插入操作。对数据表的行插入操作,首先从页面上读取客户属性中的基本属性,然后读取客户扩展属性,使用System.Xml命名空间的XmlDocument类型的对象把扩展属性封装成为一个XML文档,插入数据库时可以使用XmlDocument类型的InnerXml属性构建Insert into语句即可把XML文档的内容保存到数据库表的XML字段中。
对XML字段添加节点的插入操作,在SQL Server 2005中对XML字段使用modify方法,然后使用XML数据修改语言DML中的insert语句就可以实现对XML中的某一节点进行更新。下面的SQL语句实现了对ID为129的客户的扩展属性中增加“推荐人”属性且属性值为“李东”:
2.4 更新操作
对CRM系统的更新操作也可以分为对数据表中的行更新操作和对XML字段的某节点更新操作。对基本客户属性的更新操作直接使用SQL的update语句。对客户扩展属性中的某一属性的值,即XML字段某节点进行更新时,在SQL Server 2005中对XML字段使用modify方法,然后使用XML数据修改语言DML中的replace value of语句就可以实现对XML中的某一节点进行更新。以下语句实现了把ID为129的客户的扩展属性中的“推荐人”属性的值的更改:
3 可扩展客户属性模型的设计与应用
3.1 可扩展客户属性模型的设计
可扩展CRM系统中对客户属性的查询既有SQL也有XQuery,或者是二者结合形成更复杂的查询,最终通过ASP.NET进行业务处理后呈现到用户面前。基本框架如图3所示。
图3 基本框架Fig.3 Basic framework
如图4所示,在可扩展CRM系统应用于某部门之前,可以事先对系统的客户扩展属性进行整体配置,增加适用于本部门所有客户的扩展属性,这个配置文件以XML的形式存放于服务器中[5]。而在对某个特定客户属性进行添加操作时,先读取配置文件,动态加载客户的基本属性和配置中的扩展属性,另外,还可以根据此客户的特殊性动态增删其特有的属性,从而更好实现客户属性的可扩展性。
图4 对客户属性的操作Fig.4 Operation of customer property
配置文件片段如图5所示,生成的动态界面如图6所示。
4 系统应用
图5 配置文件片段Fig.5 Configuration fragment
图6 动态界面片断Fig.6 Dynamic interface fragment
基于本文所提出的CRM可扩展属性模型开发的CRM系统已经在某汽车配件公司上线使用,解决了CRM从一个系统迁移到另一个系统往往要对关系数据库进行重新设计的问题。由于客户属性模型是可扩展的,系统能够在市场、销售、客户服务、财会、产品库存各个部门使用,实现了CRM中客户数据在各个部门的共享以及客户数据的扩展,大大提高了公司运作的效率,成为公司利润提高的加速器。
5 结 论
详细介绍了XML在基于关系数据库的CRM系统中的应用,并使用XML与关系数据库相结合的方式,利用SQL Server 2005中对XML强大的支持,实现了可扩展的客户属性模型,从而提高了CRM的可扩展性,使CRM更能适应不同的部门对客户属性的不同需求,很大程度上克服了原有基于关系数据库的CRM系统无法实现扩展客户属性且属性不能呈现层次或树状结构的缺点,使不同的客户可以拥有不同的扩展属性,并且可以保存较为复杂的客户属性,从而为针对CRM进行数据挖掘提供了更丰富的数据来源,提高CRM的潜在价值和应用效率。
[1]Scott Klein.SQL Server 2005 XML高级编程[M].王馨,译.北京:清华大学出版社,2007.
[2]庞启盛,杨东勇.基于XML的CRM系统的研究与实现[J].计算机工程与设计, 2006, 27(14):2637-3639.PANG Qi-sheng,YANG Dong-yong.Research and realization of CRM system with XML[J].Computer Engineering and Design,2006,27(14):2637-3639.
[3]孟小峰,王宇,王小锋.XML查询优化研究[J].软件学报,2006,17(10):2069-2086.MENG Xiao-Feng,WANG Yu,WANG Xiao-feng.Research on XML query optimization[J].Journal of Software,2006,17(10):2069-2086.
[4]孔令波,唐世渭,杨冬青,等.XML数据的查询技术[J].软件学报,2007.18(6):1400-1418.KONG Ling-bo,TANG Shi-wei,YANG Dong-qing,etal.Querying techonniques for XML Data[J].Journal of Software,2007,18(6):1400-1418.
[5]秦杰,杨树强.XML数据库技术研究[J].计算机科学,2003,30(8):6-9.QIN Jie,YANG Shu-qiang.XML Database Researching[J].Computer Science,2003,30(8):6-9.
[6]徐小平.基于B/S结构的分布式CRM系统的设计与实现[J]计算机工程与设计,2003,24(13):70-72.XU Xiao-ping.Design and implementation of distributed customer relationship management system based on B/S construction[J].Computer Engineering and Design,2003,24(13):70-72.