您的 XML 数据可通过架构进行说明,该架构可能是 XML 架构文档,也可能不是。对架构绑定的 XML 的支持取决于 XML 技术。
此外,不同的选择具有不同的性能特征。
本机 XML 存储
您可以将 XML 数据存储在服务器上的 xml 数据类型列中。下列情况下,适于做此选择:
您希望使用一种简单的方法将 XML 数据存储在服务器上,同时保留文档顺序和文档结构。
您可能有对应于您的 XML 数据的架构,也可能没有。
您希望查询和修改 XML 数据。
您希望对 XML 数据创建索引,以提高查询处理的速度。
您的应用程序需要系统目录视图以管理您的 XML 数据和 XML 架构。
如果您的 XML 文档具有多种结构,或您的 XML 文档符合不同的或复杂的架构,而这些架构很难映射到关系结构,本机 XML 存储很有用。
示例:使用 xml 数据类型对 XML 数据进行建模
例如有一个 XML 格式的产品手册,其中每个主题对应单独的一章,而每章中又包含多节。一节可以包含多个小节。因此,<section> 是一个递归元素。产品手册包含大量混合内容、关系图和技术材料;数据是半结构化的。用户可能希望对感兴趣的主题执行上下文搜索,例如,在有关“索引”的章中搜索有关“聚集索引”的节,并查询技术数量。
适于您的 XML 文档的存储模型是 xml 数据类型列。这可保留 XML 数据的 InfoSet 内容。对 XML 列创建索引有利于提高查询性能。
示例:保留 XML 数据的精确副本
为了进行说明,假定政府条例要求您保留 XML 文档的精确文本副本。例如,这些文档可能为签署的文档、法律文档或股票交易单。您可能希望将文档存储在 [n]varchar(max) 列中。
查询时,先在运行时将数据转换为 xml 数据类型,然后对其执行 Xquery。运行时转换开销可能很高,尤其是在文档较大的情况下。如果经常查询,可以采取冗余方式将文档存储在 xml 数据类型列中,并对其创建索引,同时从 [n]varchar(max) 列中返回精确的文档副本。
XML 列可以是基于 [n]varchar(max) 列的计算列。但不能对 XML 计算列创建 XML 索引,也不能对 [n]varchar(max) 或 varbinary(max) 列创建 XML 索引。
XML 视图技术
通过定义 XML 架构和数据库中的表之间的映射,可以创建持久性数据的“XML 视图”。通过 XML 视图,可使用 XML 大容量加载来填充基础表。您可以使用 XPath 1.0 版来查询 XML 视图;这种查询将被转换为针对表的 SQL 查询。与此类似,更新也会被传播到那些表。
在下列情况下,此技术很有用:
您希望拥有以 XML 为中心的编程模型,该模型使用现有关系数据上的 XML 视图。
您有对应于您的 XML 数据的架构(XSD、XDR),该架构可能由外部伙伴提供。
数据中的顺序并不重要,或查询表数据不是递归的,或事先已知最大递归深度。
您希望使用 XPath 1.0 版通过 XML 视图查询和修改数据。
您希望通过 XML 视图来大容量加载 XML 数据,并将其分解到基础表。
相关示例包括显示为用于数据交换和 Web 服务的 XML 的关系数据。有关详细信息,请参阅 MSDN Online Library。
本文介绍了XML数据的不同存储方式,包括本机XML存储及其适用场景,以及如何通过XML视图技术实现XML架构与数据库表之间的映射。适用于需要处理半结构化数据的应用场景。
799

被折叠的 条评论
为什么被折叠?



