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

4

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

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

3个回答

3
数据库用于存储数据,XML就是数据。因此,在合适的情况下,在数据库中存储XML是完全有效的。但是,是否这样做最有效取决于许多因素,这些因素可能无法概括。
例如,如果您有一个结构化的XML文档,表示一个对象(例如:书店中的一本书),将数据解析并存储到为该数据设计的适当行和列中的数据库中可能是有意义的。
另一方面,想象一个包含代码示例的数据库。您有语言、描述和代码等列。在使用XML的情况下,显然您将把XML存储在代码列中。
因此,像软件中的许多内容一样,“这取决于具体情况”。

过去,在关系型数据库中,XML是不透明且无法查询的。在过去的十年中,这种情况越来越少见了。 - Steven Sudit
@Bryan:该列明确声明为类型“xml”,而不是仅仅是“nvarchar(max)”,甚至可以与模式相关联。 (这适用于MS SQL Server 2008,但其他数据库具有类似的功能。有关此产品的概述,请参见http://www.microsoft.com/sqlserver/2008/en/us/wp-sql-2008-whats-new-xml.aspx) - Steven Sudit
更明确地说,虽然 SQL 可以始终将文本作为文本进行搜索,但较新的服务器可以使用 XPath 和相关技术将 XML 作为 XML 进行搜索。希望这有所帮助。 - Steven Sudit
@Bryan:好处在于,您可以编写一个存储过程,它接受包含已知元素和新元素的 XML 输入,然后半自动地将 XML 分解,以便使用已知元素填充预定义字段,而剩余的 XML 则进入一个捕获所有字段。在返回时,两者无缝结合。净效果是对表定义具有实质性的灵活性。这是很好的东西。 - Steven Sudit
这是一个相关的SO链接:https://dev59.com/23VD5IYBdhLWcg3wL4YA - Steven Sudit
显示剩余2条评论

1

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

一些SQL DBMS(即非关系型DBMS)根本不允许比较XML值。例如,Microsoft SQL Server允许XML类型的列,但它们不能进行比较,因此,除其他外,不支持SELECT DISTINCT。


0

实际上,这取决于您在数据库中存储的数据类型,例如,在数据库中存储XHTML信息是很正常的。关系型数据库的原则之一是信息是原子性的,也就是说,您应该存储像这样的内容:

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

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

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

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