繁体   English   中英

在 SQL Server Graph Schema 中表示 XML Schema 及其数据

[英]Represent an XML Schema and its Data in a SQL Server Graph Schema

我有一个问题,我需要在 SQL 服务器数据库中表示 XML 架构及其数据。 我需要能够以允许我创建 XML 或 JSON 文件的方式访问数据。

我已经研究了几个解决这个问题的方法。 首先创建一个传统的关系型数据库,将 XML 数据存储在一个表示层次结构的表中,使用一个自引用的 parentId。 这个结构看起来不错,但是由于 XML 的大小很大,所以访问数据很慢,因为我必须使用大量递归来获取我需要的分层数据。 这种设计的性能会随着数据量的增加而趋于恶化。

其次,我查看了在 SQL 服务器内部创建图形模式的用途。 将每个 XML 元素分配为节点表,并将 xml 元素属性分配为该表中的列。 然后我创建了一个简单的“isParentOf”边缘表,将不同 xml 元素之间的这种关系插入到表中。 但是,由于每个元素都是一个单独的节点,因此查询起来很麻烦。

我知道 XML 模式结构与数据库之间没有直接关联,并且已阅读有关此类问题复杂性的文章。 但我想接触社区,看看是否有可能使用 SQL 图形数据库实现我的目标,因为这似乎是最合适的,因为我可以定义我的元素,然后创建不同的关系。

我在下面提供了一些样本 XML 数据,其中包含我目前在元素层次结构、属性和数据方面使用的 XML 的不同排列。

<?xml version="1.0" encoding="utf-8"?>
<Document xmlns='http://mydocument.com/schema/1'>
  <BankStatement frequency='monthly'>
    <Customer>
      <AcctNo>012-3456789</AcctNo>
      <Name type="full">John Doe</Name>
      <Street>123 Street Road</Street>
      <City>London</City>
    </Customer>
    <BeginDate>18/10/2022</BeginDate>
    <EndDate>18/11/2022</EndDate>
  </BankStatement>
</Document>

首先创建一个传统的关系型数据库,将XML数据存储在一个表中,使用自引用的parentId表示层级结构……这种设计的性能会随着数据量的增加而变差。

不,它可能不会。 当正确构建和索引时,表的搜索时间将为O(log(n)) ,因为索引使用 B-Tree 数据结构。

假设您的表中有 100 万行。 在最坏的情况下, log2(1 million) = 30 这只是 B 树的 30 个节点,需要遍历这些节点才能找到您的数据。 如果您的表增长到 10 亿行,则log2(1 billion) = 40 这些是计算机搜索的极小数字。 (由于扇出因子的原因,它实际上通常小于这个值。)

通常,递归 CTE 也可以很容易地用于高效地爬取层次结构。 可以在一秒钟内抓取数十万个分层行并适当关联。


除此之外,我什至在您的示例数据中看不到层次关系。 相反,它似乎是关系结构非常适合的传统数据 model 问题。

我建议定义的表是CustomersAccounts ,如果Customer可以有多个AddressBankStatements ,则可能是Addresses 我确定您的数据可能也有其他相关实体。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM