何时选择将XML存储在关系型数据库中?

6

可能重复:
为什么我会选择在关系数据库中存储和操作XML?

尽管这个问题表面上看起来是已经被问过的,但我要先声明一下,这并不是重复的。我的问题不是如何从关系数据库中存储或检索XML。实际上,这个问题比那更基本:

你通常在数据库中以XML格式存储哪种类型的数据?你做这样的设计决策有什么考虑?你愿意放弃数据库的“关系”方面,并将模型的某些部分放入XML文本中吗?例如,偏好或配置文件可以作为XML存储在关系数据库中,但你应该这样做吗?


4
重复的问题,包括https://dev59.com/qXVC5IYBdhLWcg3wykUt。 - anon
6个回答

3

从未。

将具有某种可识别结构的数据存储为XML,而不是关系型数据,意味着放弃关系代数操作该数据的能力。

如果这是你的真正意图,那么很好,但请坦诚地表明,并且根本不要使用关系型数据库管理系统,只需将XML转储到某个本地/伪本地文件中即可。

(请注意,存储在文件系统中的任何内容都构成数据库,因此这种解决方案并不意味着您“不使用数据库”。您只是没有使用关系管理的数据库,这正是您的本意。)


尽管我在大多数情况下同意你的观点,但在不需要关系型数据库的情况下,有时可以将XML存储在SQL数据库中,正如其他回答这个问题的人所指出的那样。这篇文章提供了更多信息:http://nativexmldatabase.com/2010/09/28/5-reasons-for-storing-xml-in-a-database/ - Fabio

2

我在关系型数据库中存储XML的经验通常是将序列化对象存储为历史记录或作为持久性策略的一部分,假设我稍后会检索此XML并重新将其转换为对象。


2

在我看来,将XML放入数据库中的唯一原因是如果您需要与项目交互、编辑或更改数据。如果您只是读取和使用XML数据,那么只需将其放入文件中即可。但是,如果该数据正在应用程序中被修改或添加,则最好使用数据库,并且实际上不需要XML,因为表将描述数据的结构。


2

你的代码可能需要以以下方式处理XML数据:

  1. 仅在数据库中保存,所有处理都在业务层完成,例如SOAP消息的队列或审计跟踪。对于这种情况,我会使用一个简单的文本列。
  2. 将其保存在数据库中,并偶尔在数据库层运行查询,例如用户可以搜索的XHTML文档。对于这种情况,我会在SQL Server 2005或更高版本中使用xml数据类型,或在其他DBMS中使用相应的数据类型。
  3. 在数据库层进行全面的复杂关系查询,例如一大块关系型数据仅序列化为XML并现在必须以其正确形式存储。显然,这将存储在与反序列化数据结构匹配的表集中。

0

当数据本身不需要关系时,我倾向于存储XML片段(或其他不透明数据,如JSON序列化)。


0

我使用以下条件将XML数据存储在数据库中:

  1. 我没有时间开发关系表(实际上,有时我只是这样开始,以便快速获取原型)。

  2. 数据的结构非常庞大和复杂,需要花费相当大的力气才能将其分解成表格。

一般来说,我喜欢在我的数据库中存储关系数据,但是想象一下,如果我有一个表示呈现网页所需的所有数据的对象(我的意思是一切,字体、图像等),它将非常复杂。将其存储在表格结构中将仅会导致维护问题 - 结构是不稳定的。这也会导致查询问题 - 想象一下我需要做多少个连接和花费多长时间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接