3

我是 SQL 初学者,需要回答以下问题。我有数千个 XML 文件(每个都有数百个节点),需要在其中的数据之上构建一个 Postgresql 数据库。

我考虑两种方式:

  1. 将 XML 文件转换为一个(或多个)大型数据库表(一个 XML 节点 = SQL 表中的一行)并使用此表。
  2. 创建一个具有原生 XML 类型的数据库(将 XML 类型的数据存储在数据库中)并使用 XPath 进行搜索和过滤...

哪种方法可能更好(更快、更舒适)?在 SQL 数据库中使用 XML 类型的优缺点是什么?

4

1 回答 1

6

选项(1)很糟糕,不要那样做。每个节点只有一行的单个巨型表将很难查询,例如添加了硫磺臭味和额外角的EAV 。

要么将 XML 表示的数据建模为实体(表)和关系,要么将 XML 文档存储在 DB 中。

只有当 XML 是有规律的结构化时,您才能将 XML 建模为实体和关系。如果您有一堆不同的自由格式 XML 文件,那么您就无法在 RDBMS 中对其进行真正有用的建模。如果它们常规的,这通常是最好的选择,例如:

<root>
   <parentnode attrib="value">
      <child otherattrib="value2">content</child>
   </parentnode>
   <...>
</root>

您可以将其建模为:

  • parent带有一个id和一个attrib列的表格;和
  • 具有and列的child表以及具有对 的外键引用的列。idotherattribparent_idparent(id)

如何对 XML 进行建模取决于 XML。什么是强制性的,什么不是?您是否需要重建输入 XML 中实体的确切顺序,还是节点内的顺序无关紧要?是否有自由形式的可嵌套实体?

作为一种决策的示例,如果您有一个父节点可以有零个或一个(但没有更多)给定子节点类型,您可以选择使用两个表和一个 1:1 可选的模型来建模关系,或者您可以将子元素合并到单个表中的父元素中,其中子属性/内容可以为空。在性能(连接成本与表宽度和每页行数)和易用性方面都有优点和缺点。

如果 XML 结构是严格的,那么建模为表通常很方便;如果它是自由格式,通常将其作为 XML 存储在数据库中并使用 xpath 查询它会更有用。

如果您将其保留为 XML 文档,则在数据库中索引和查询会更困难,但将 XML 从数据库中取出并放入应用程序会容易得多。xpath 表达式上的功能索引可以提供很大帮助。还值得添加一个CHECK约束来强制该xml字段IS DOCUMENT,这样您就不能存储 XML 片段,只能存储整个文档。

于 2013-03-22T12:36:48.643 回答