关于在这个问题上开始的讨论,我决定将其作为社区维基问题发布。
因此,问题的根源是,在关系数据库中存储XML数据是否合适?是否有通常更好的方法来实现同样的目标?哪些数据库引擎提供对XML数据类型(如SQL Server)的良好支持,以及所谓的“XML索引”周围的问题是什么?
在RDBMS中支持XML的一个问题是,目前没有普遍接受的规则来比较XML文档。关系数据库原则上可以存储任何支持赋值和比较的属性值 - 这对于关系投影非常重要,例如每个属性的值必须可相互比较。对于大多数类型,如字符串、数字、二进制等,比较都不是问题。但对于XML文档类型来说,这可能更加困难。
一些SQL DBMS(即非关系型DBMS)根本不允许比较XML值。例如,Microsoft SQL Server允许XML类型的列,但它们不能进行比较,因此,除其他外,不支持SELECT DISTINCT。
实际上,这取决于您在数据库中存储的数据类型,例如,在数据库中存储XHTML信息是很正常的。关系型数据库的原则之一是信息是原子性的,也就是说,您应该存储像这样的内容:
name | professions
----------------------
Clark | writer, journaliste, superhero
所以我反对存储类似这样的东西
name | information
----------------------
Clark | <profession> writer </profession><profession> journaliste </profession><profession> superhero </profession>