在关系数据库中存储XML数据的常见问题是什么?

时间:2010-08-19 17:23:04

标签: sql xml database indexing relational-database

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

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

3 个答案:

答案 0 :(得分:3)

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

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

OTOH,想象一个包含代码示例的数据库。您有语言,描述和代码的列。就XML而言,显然您将XML存储在代码列中。

所以,就像软件中的许多东西一样,“它取决于”。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

这样的东西
name    |   professions
----------------------
Clark   |  writer, journaliste, superhero

所以我反对存储像

这样的东西
name    |   information
----------------------
Clark   |  <profession> writer </profession><profession> journaliste </profession><profession> superhero </profession>