学海无涯

网络是最好的老师

统计

常用链接

留言簿

.net

AOP

goold site

js

Sql

设计模式

友朋自网络来

阅读排行榜

评论排行榜

sql2005的xml字段类型在.net中的应用

        今天要介绍的就是sql2005的xml字段类型在.net中的应用。调用过程是:先运用并行化的办法把xml字段类型中的数据转换成Model对象,对Model对象操作后,再运用串行化的方法把Model对象转变成xml格式,最后存储到数据库中。
       我认为如果把复杂的业务关系数据存储在xml字段中,可简化数据库的设计,方便业务的处理。

       这里写了个小demo:
      
      假如我们有很多店铺信息,每个店铺都有一个ShopID, 所以我们就把同一店铺的信息放在以ShopID命名的文件夹下,当一台服务器放不下时,我们就部署多台,这样每台服务器存储的店铺是不一样的。这些服务器就构成了一个服务器群。出于需要,我们要把这个群复制多个,部署在不同的地区(注意,各个群的信息是相同的)。为了完成这个目的,我们先设计了数据模型 MServerGroup(服务器群信息),MServer(服务器群下的服务器信息),MServerShop(服务器对应的店铺):

 

服务器群信息



   

服务器群下的服务器信息

       

服务器对应的店铺


    
   为了对模型的集合信息进行描述,我们有设计了MServerGroupCollection(服务器群信息集合),MServer(服务器群下的服务器信息),MServerShopCollection(服务器对应的店铺集合)

    

服务器群信息集合


 

服务器群下的服务器信息集合

 

服务器对应的店铺集合


   
   
经分析,服务器对应的店铺信息可用xml存储,设计格式如下(用xsd描述,设计好后,我们把它创建到数据库中)

CREATE XML SCHEMA COLLECTION [dbo].[MServerShop] AS 
N
'<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:t="http://www.linkedu.com.cn/MServerShop.xsd" targetNamespace="http://www.linkedu.com.cn/MServerShop.xsd" elementFormDefault="qualified">
<xsd:element name="Shops">
  <xsd:complexType>
     <xsd:complexContent>
       <xsd:restriction base="xsd:anyType">
          <xsd:sequence>
             <xsd:element name="Shop" type="t:ServerShop" minOccurs="0" maxOccurs="unbounded" />
          </xsd:sequence>
       </xsd:restriction>
    </xsd:complexContent>
  </xsd:complexType>
</xsd:element>
<xsd:complexType name="ServerShop">
  <xsd:complexContent>
   <xsd:restriction base="xsd:anyType">
    <xsd:sequence />
      <xsd:attribute name="ShopID" type="xsd:int" use="required" />
      <xsd:attribute name="ShopName" type="xsd:string" use="required" />
    </xsd:restriction>
  </xsd:complexContent>
</xsd:complexType>
</xsd:schema>
'



最后,我设计了(服务器群信息 ES_ServerGroup),(服务器群下的服务器信息 ES_Server)的数据表, 在 ES_Server 数据表中,我们把服务器对应的店铺信息放在ES_Server数据表下用xml表示,并加入上边设计的xsd约束。 

CREATE TABLE [dbo].[ES_ServerGroup](
 
[ServerGroupID] [int] NOT NULL,
 
[ServerGroupName] [nvarchar](20) COLLATE Chinese_PRC_CI_AS NOT NULL,
 
CONSTRAINT [PK_ES_SERVERGROUP] PRIMARY KEY CLUSTERED 
(
 
[ServerGroupID] ASC
)
WITH (IGNORE_DUP_KEY = OFFON [PRIMARY]
ON [PRIMARY]

 

CREATE TABLE [dbo].[ES_Server](
 
[ServerID] [int] NOT NULL,
 
[ServerGroupID] [int] NULL,
 
[ServerName] [nvarchar](20) COLLATE Chinese_PRC_CI_AS NOT NULL,
 
[IP] [nvarchar](15) COLLATE Chinese_PRC_CI_AS NULL,
 
[DomainName] [nvarchar](20) COLLATE Chinese_PRC_CI_AS NULL,
 
[Dir] [nvarchar](255) COLLATE Chinese_PRC_CI_AS NULL,
 
[Url] [nvarchar](255) COLLATE Chinese_PRC_CI_AS NULL,
 
[ServerShops] [xml](CONTENT [dbo].[MServerShop]NULL,
 
CONSTRAINT [PK_ES_SERVER] PRIMARY KEY CLUSTERED 
(
 
[ServerID] ASC
)
WITH (IGNORE_DUP_KEY = OFFON [PRIMARY]
ON [PRIMARY]

 


下一步,我开始设计数据访问接口,然后设计数据访问层和业务层,最后设计表现层。
为了演示方便,Demo中我省去了接口的书写和业务层,我在表现层直接调用了数据访问层

数据访问层代码如下:

 /// <summary>
    
/// 服务器群下的服务器信息数据访问层
    
/// </summary>

    public class DServer
    
{
        
constructor

        
public method


 

关于MServerShop的操作


         
   

服务器群信息数据访问层


整个程序的代码下载如下:/Files/laiwen/Sql2005XmlWeb.rar

posted on 2006-12-13 21:30 来问(zljGood@hotmail.com) 阅读(2035) 评论(1)  编辑 收藏 网摘 所属分类: SQL技术.net 2.0

评论

#1楼 2006-12-15 09:18 呵呵啊[匿名][未注册用户]

广告时间   回复  引用