在关系数据库中存储XML的基本原理

时间:2012-04-14 11:35:35

标签: xml oracle sql-server-2008

我需要解释为什么我们需要将XML文档存储在数据库中。

在好的方面:

  1. 没有努力将单个元素分解为表格和属性列
  2. 没有努力维护表之间的关系,因为它们是XML中自包含的
  3. 跨共享XML的系统的便携性
  4. 如果需要,几乎所有DBMS都支持XML操作来将XML作为关系实体进行查询。
  5. 在不利方面:

    1. 网络有效负载远远大于RDBMS计数器部分。
    2. 要求客户端应用程序将它们粉碎为可用组件。
    3. 这些理由是否有效?任何人都可以想到了吗?

3 个答案:

答案 0 :(得分:4)

确实没有明确的职业清单 - 这取决于你想要做什么。但是,您还需要考虑以下几点:

  1. 并非所有SQL数据库都支持XML xpath(超出blob like '%xxx%')。也许你被困在数据库的旧版本上,它没有XML支持功能(即Mysql 4)。更轻松的SQL数据库,如Sqlite和hsql也属于这个阵营。
  2. 即使可以在数据库中搜索XML,它也不是最佳的。 XML的SQL搜索无法利用SQL Server内置的搜索优化(即索引)。
  3. 根据数据库的不同,您在数据库中使用XML文档也无法利用SQL Server的验证和类型功能。例如,Oracle可以进行XML模式验证,我没有看到Mysql可以。
  4. 您可以执行哪些查询的性能,不会与标准列查询进行比较。
  5. 数据库大小。如果将XML存储在数据库中,它将变得更大。你可以压缩它,但随后查询它将很难/不可能。
  6. Normalization问题可能会成为相关问题 - 也许您不希望在某些时候使用SQL来查询XML,但稍后它决定实际需要一些字段。您可能需要从XML中提取该字段并填充实际列以获得所需的性能...在这种情况下,您现在在数据库中有冗余信息。
  7. 利弊实际上取决于你将要存储的内容以及它的用途。

    1. 如果它本质上是二进制/配置信息,你只需要坚持一些地方,并且无论出于何种原因更喜欢坚持你的SQL数据库......好吧,关于查询的考虑是不相关的。在这种情况下,重要的问题涉及空间以及如何最小化空间(即压缩)。
    2. 如果有可能需要定期搜索XML,那么您就会面临查询速度慢和上面提到的冗余问题的风险。在这种情况下,您应该非常仔细地考虑您的长期设计:您真的需要将这些数据存储为XML吗?从该数据构造XML会更好吗?

答案 1 :(得分:3)

在这两种情况下都有利弊,这取决于您的使用情况。

存储为XML本身的主要缺点是我们无法快速搜索特定数据。要执行搜索,我们必须检索并解析所有XML文件。

我们在其中一个项目中遇到过类似的情况。在讨论之后,我们采取了中间立场的方法: 所有主要信息(需要快速查询的信息)都存储在相关表中。我们也存储了XML;但是不是像这样存储XML,我们将XML保存到磁盘并在表中使用该文件路径。

答案 2 :(得分:3)

讨论你的意见:

  1. 不存储单个元素也意味着不对其施加约束
  2. 同样,不存储表之间的约束
  3. 仅在目标系统确认相同架构时才可移植。
  4. 是,但表现会有所不同。