在关系数据库中存储 XML 数据有哪些常见问题?

发布于 2024-09-14 18:34:28 字数 254 浏览 8 评论 0原文

关于这个问题开始的讨论,我决定将其作为社区维基问题。

因此,问题的根源是,将 XML 数据存储在关系数据库中是否合适?通常是否有更好的方法来实现相同的目标?哪些数据库引擎对 XML 数据类型(例如 SQL Server)提供了良好的支持?围绕所谓的“XML 索引”存在哪些问题?

In relation to a discussion started at this question, I've decided to put this up as a community wiki question.

The root of the question is, therefore, is it appropriate to store XML data in a relational database? Are there generally better ways to implement the same goal? What database engines provide good support for XML data types (such as SQL Server), and what are the issues surrounding so-called "XML indexes"?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

記憶穿過時間隧道 2024-09-21 18:34:28

数据库是用来存储数据的。 XML 是数据。因此,在适当的情况下,将 XML 存储在数据库中是完全有效的。这是否是最有效的做法取决于许多可能无法一概而论的因素。

例如,如果您有一个表示对象(例如:书店中的一本书)的结构化 XML 文档,则解析数据并将其存储在为该数据设计的数据库中的适当行和列中可能是有意义的。

OTOH,想象一个保存代码示例的数据库。您有语言、描述和代码列。对于 XML,显然您会将 XML 存储在代码列中。

因此,就像软件中的许多事情一样,“视情况而定”。

Databases are for storing data. XML is data. Therefore, under the right circumstances it's perfectly valid to store XML in a database. Whether that's the most efficient thing to do depends on a lot of factors that probably can't be generalized.

For example, if you have a structured XML document that represents an object (eg: a book in a bookstore), it likely makes sense to parse the data and store in in appropriate rows and columns in a database designed for that data.

OTOH, imagine a database holding code samples. You have columns for language, description, and the code. In the case of XML, obviously you'll store the XML in the code column.

So, like so many things in software, "it depends".

对你的占有欲 2024-09-21 18:34:28

在 RDBMS 中支持 XML 的一个问题是,据我所知,没有普遍接受的 XML 文档比较规则。关系数据库原则上可以存储任何可以支持分配和比较的属性值 - 例如,这对于关系投影至关重要,因为每个属性的值必须彼此可比较。对于大多数类型来说,比较没有问题:字符串、数字、二进制等。对于 XML 文档类型来说,比较可能会更困难。

某些 SQL DBMS(即非关系 DBMS)根本不允许比较 XML 值。例如,Microsoft SQL Server 允许 XML 类型的列,但无法比较它们,因此不支持 SELECT DISTINCT。

One problem with supporting XML in an RDBMS is that there are AFAIK no universally accepted rules for comparison of XML documents. A relational database can in principle store any attribute value that can support assignment and comparison - this being essential to relational projection for example because the values of each attribute must be comparable to each other. Comparison is no problem for most types: strings, numbers, binary etc. It's potentially more difficult for a XML document type.

Some SQL DBMSs (ie non-relational DBMSs) simply don't permit comparison of XML values at all. For instance Microsoft SQL Server allows XML-typed columns but they cannot be compared and so among other things SELECT DISTINCT is not supported.

我早已燃尽 2024-09-21 18:34:28

它实际上取决于您在数据库中存储的数据类型,例如在数据库中存储 XHTML 信息是正常的。关系数据库的原则之一是信息是原子的,我的意思是,您应该存储一些东西就像

name    |   professions
----------------------
Clark   |  writer, journaliste, superhero

这样我会反对存储类似的东西

name    |   information
----------------------
Clark   |  <profession> writer </profession><profession> journaliste </profession><profession> superhero </profession>

it actually depends on what kind of data you are storing in your DB, its normal for exemple to store XHTML information on the database.. one of the principes of a relational database is that the information is atomic, i mean, you should store something like

name    |   professions
----------------------
Clark   |  writer, journaliste, superhero

so i'd be against to store something like

name    |   information
----------------------
Clark   |  <profession> writer </profession><profession> journaliste </profession><profession> superhero </profession>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文