手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>网络编程>Mssql>列表

MS SQL SERVER2005 XML 最好实践

来源:互联网 作者:west263.com 时间:2008-04-02
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!
XML,您能够将任何值映射到关系列,并且可能使用 XML 视图技术。

使用 xml 数据类型进行数据建模
本部分讨论有关本机 XML 存储的数据建模主题,包括对 XML 数据创建索引、属性提升和类型化的 xml 数据类型。

相同或不同的表
能够在包含其他关系列的表中,或在和主表具备外键关系的单独表中创建 xml 数据类型列。

假如满足下列条件之一,请在同一个表中创建 xml 数据类型列:

您的应用程式对 XML 列执行数据检索,并且无需 XML 列的 XML 索引。


您希望对 xml 数据类型列生成 XML 索引,并且主表的主键和其聚集键相同。有关周详信息,请参阅“对 xml 数据类型列创建索引”。


假如满足下列条件,请在单独的表中创建 xml 数据类型列:

您希望对 xml 数据类型列生成 XML 索引,但主表的主键和其聚集键不同,或主表没有主键,或主表是个堆(即没有聚集键)。假如主表已存在,可能会这样。


您不希望因为表中存在 XML 列而降低表扫描的速度。无论该列是存储在行内还是行外,都会占用空间。


XML 数据的粒度
XML 列中存储的 XML 数据的粒度对锁定至关重要,在一定程度上,对更新也很重要。SQL Server 对 XML 数据和非 XML 数据都使用相同的锁定机制。因此,行级锁定会导致锁定行中的任何 XML 实例。当粒度较大时,锁定大型 XML 实例以便进行更新会导致多用户情况下的吞吐量下降。另一方面,过度分解会丢失对象封装,并增加重新汇集开销。

对于良好的设计而言,重要的是保持数据建模需要和锁定和更新特征之间的平衡。但在 SQL Server 2005 中,实际存储的 XML 实例的大小并不十分重要。

例如,通过使用对部分二进制大型对象 (BLOB) 和部分索引更新(将存储的现有 XML 实例和其更新后的版本进行比较)的新支持,对 XML 实例进行更新。部分二进制大型对象 (BLOB) 更新在两个 XML 实例之间执行差异比较,并只更新差异之处。部分索引更新只修改那些必须在 XML 索引中更改的行。

非类型化、类型化和约束的 xml 数据类型
SQL Server 2005 xml 数据类型实现了 ISO SQL-2003 标准 xml 数据类型。因此,他能够在非类型化的 XML 列中存储格式正确的 XML 1.0 版的文档、具备文本节点和任意数量顶级元素的所谓的 XML 内容片段。系统将检查数据格式是否正确,但不需要将列绑定到 XML 架构,并且拒绝在扩展意义上格式不正确的数据。对于非类型化的 XML 变量和参数也是如此。

假如您有说明 XML 数据的 XML 架构,则能够将架构和 XML 列相关联以产生类型化的 XMLXML 架构用于验证数据,在编译查询和数据修改语句过程中执行比非类型化的 XML 更精确的类型检查,连同优化存储和查询处理。

在下列情况下,请使用非类型化的 xml 数据类型:

您没有对应于您的 XML 数据的架构。


您有架构,但不希望服务器验证数据。当应用程式在将数据存储到服务器之前执行客户端验证时,或临时存储根据架构确定无效的 XML 数据时,或在服务器上使用不受支持的架构组件(如 key/keyref)时,有时会出现这种情况。


在下列情况下,请使用类型化的 xml 数据类型:

您有对应于您的 XML 数据的架构,并且希望服务器根据 XML 架构验证 XML 数据。


您希望充分利用基于类型信息的存储和查询优化。


您希望在编译查询过程中更好地充分利用类型信息。


类型化的 XML 列、参数和变量能够存储 XML 文档或内容。但是,必须使用标志指定在声明时是存储文档还是存储内容。此外,必须提供 XML 架构集合。假如每个 XML 实例都刚好有一个顶级元素,请指定 DOCUMENT。否则,请使用 CONTENT。查询编译器在编译查询过程中的类型检查中使用 DOCUMENT 标志以推断单一的顶级元素。

除了对 XML 列进行类型化之外,还能够对类型化或非类型化的 xml 数据类型列使用关系(列或行)约束。在下列情况下,请使用约束:

无法在 XML 架构中表达业务规则。例如,花店的交货地址必须在其营业地点周围 50 英里之内。这能够编写为 XML 列的约束。约束可能涉及 xml 数据类型方法。


您的约束涉及表中的其他 XML 列或非 XML 列。例如,强制使 XML 实例中的客户 ID (/Customer/@CustId) 和 CustomerID 关系列中的值匹配。


文档类型定义 (DTD)
能够使用 XML 架构来对 xml 数据类型列、变量和参数进行类型化,但不能使用 DTD 进行此项操作。但是,内联 DTD 既可用于非类型化的 XML,也可用于类型化的 XML,以便提供默认值,并将实体引用替换为其扩展形式。

能够通过使用第三方工具将 DTD 转换为 XML 架构文档,然后将 XML 架构加载到数据库中。

对 xml 数据类型列创建索引
能够对 xml 数据类型列创建 XML 索引。他将对列中 XML 实例的任何标记、值和路径进行索引,从而提高查询性能。在下列情况下,您的应用程式能够从 XML 索引中获益:

XML 列进行查询在您的工作负荷中很常见。必须考虑数据修改过程中的 XML 索引维护开销。


XML 值相对较大,而检索的部分相对较小。生成索引避免了在运行时分析任何数据,并且索引查找有利于进行高效的查询处理。


XML 列的第一个索引是主 XML 索引。使用他时,能够对 XML 列创建三种类型的辅助 XML 索引,以提供常见种类的查询的速度,如以下部分所述。

XML 索引
这将对 XML 列中 XML 实例的任何标记、值和路径进行索引。基表(即包含 XML 列的表)的主键必须具备聚集索引。主键用于将索引行和基表中的行相关联。可从

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!