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

问题描述:

可能重复:
Why would I ever choose to store and manipulate XML in a relational database?您何时选择将XML存储在关系数据库中?

虽然表面上这个问题似乎是一个什么样的已经被以前问一个老调重弹,我会预先声明,事实并非如此。我的问题不是如何从关系数据库中存储或检索XML。眼下的问题是更为基本的比:

你通常以XML格式存储在数据库中的数据类型?你这样做的设计决定是什么?您是否愿意通过将模型的某些部分放入XML blurb来放弃数据库的“关系”方面?诸如首选项或配置文件之类的东西可以作为XML存储在关系数据库中,但是您应该这样做吗?

+4

Dupe of http://*.com/questions/184727/why-would-i-ever-choose-to-store-and-manipulate-xml-in-a-relational-database among其他人 – 2009-08-25 17:14:31

我与XML存储在关系数据库通常用于存储任何历史目的或作为持久化策略与我将在稍后检索该XML,并补充水分成一个对象的假设的部分序列化对象的经验。

我倾向于存储XML广告词(或如JSON序列其它不透明数据)时,该数据本身并不需要有关系。

的唯一原因,恕我直言,把XML的数据库,如果你需要互动,编辑,或与您的项目更改数据。如果您只是阅读和使用XML数据,就把它放在一个文件中。但是,如果数据被修改或添加到应用程序中,则最好使用数据库,因为表格将描述数据的结构,所以根本不需要XML。

我用这些条件在数据库中存储XML数据。

  1. 我没有开发的关系表的时间(说真的,我有时候会开始这种方式只是为了得到一个原型启动和运行)。

  2. 的数据是非常大,结构复杂打入表中没有相当大的努力

一般来说,我喜欢存储在我的数据库中的关系数据,但是想象一下我代表所有的对象需要渲染一个网页的数据(我的意思是所有的东西,字体,图像),它会变得非常复杂,将它存储在一个表格结构中,这只会影响我的维护问题 - 结构是流动的。它也会导致我查询问题 - 想象一下我需要做的连接数量以及需要的时间。

您的代码可能希望通过以下方式来处理XML数据:

  1. 只有坚持它在数据库中,所有的处理在业务层,例如来自/来自Web服务的SOAP消息的队列或审计跟踪。为此,我会使用简单的文本列。
  2. 坚持它在数据库中并在数据库中运行层,例如偶尔的查询用户可以搜索的XHTML文档。为此,我将在SQL Server 2005或更高版本中使用xml数据类型,或者在其他DBMS中使用该数据类型。
  3. 数据库层的全面复杂关系查询,例如一个只是序列化为XML的关系数据斑点,现在必须以适当的形式存储。这显然会存储在匹配反序列化数据结构的表集中。

从来没有。

将存在某种可识别结构的数据存储为XML,而不是关系数据,这意味着放弃关系代数对数据进行操作的能力。

如果这是你的意图,那么很好,但是对此很坦白,只是不打扰地使用关系数据库管理系统,只需将你的XML转储到一些本地/伪本地文件中即可。 (注意,存储在文件系统中的任何东西都构成一个数据库,所以它不像解决方案意味着你“不使用数据库”。你只是没有使用一个被关联管理的东西,这是你的意图启动。)

+0

虽然我在大多数情况下都同意你的观点,但在某些情况下,如果不需要关系电源,就可以将XML存储在SQL数据库中,正如其他解答此问题的人员所指出的那样。这篇文章有更多的信息:http://nativexmldatabase.com/2010/09/28/5-reasons-for-storing-xml-in-a-database/ – Fabio 2012-09-04 20:02:30