簡體   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