2010-08-19 4 views
4

En relation avec une discussion commencée au this question, j'ai décidé de le mettre comme une question wiki communautaire.Quels sont les problèmes courants entourant le stockage des données XML dans une base de données relationnelle?

La racine de la question est, par conséquent, est-il approprié de stocker des données XML dans une base de données relationnelle? Existe-t-il généralement de meilleurs moyens de mettre en œuvre le même objectif? Quels moteurs de base de données fournissent un bon support pour les types de données XML (tels que SQL Server), et quels sont les problèmes entourant ce que l'on appelle les «index XML»?

Répondre

3

Les bases de données servent à stocker des données. XML est des données. Par conséquent, dans les bonnes circonstances, il est parfaitement possible de stocker du XML dans une base de données. Que ce soit la chose la plus efficace à faire dépend de beaucoup de facteurs qui ne peuvent probablement pas être généralisés. Par exemple, si vous avez un document XML structuré qui représente un objet (par exemple: un livre dans une librairie), il est logique d'analyser les données et de les stocker dans des lignes et des colonnes appropriées dans une base de données conçue pour Les données.

OTOH, imaginez une base de données contenant des exemples de code. Vous avez des colonnes pour la langue, la description et le code. Dans le cas de XML, vous allez évidemment stocker le code XML dans la colonne de code. Donc, comme beaucoup de choses dans les logiciels, «ça dépend».

+0

Autrefois, le XML dans un SGBDR était opaque et non interrogeable. Cela a été de moins en moins le cas au cours de la dernière décennie. –

+0

@Steven Sudit: excusez mon ignorance, mais comment un RDBMS sait-il même que c'est du XML? C'est juste un tas d'octets. Pourquoi un simple texte ASCII serait-il possible de faire une recherche, mais un simple texte ASCII qui ressemblerait à XML ne serait pas consultable? –

+0

@Brian: La colonne est explicitement déclarée en tant que type 'xml', par opposition à' nvarchar (max) ', et peut même être associée à un schéma. (Ceci est pour MS SQL Server 2008, mais d'autres bases de données ont des fonctionnalités similaires.Pour un aperçu de ce produit, voir http://www.microsoft.com/sqlserver/2008/en/us/wp-sql-2008-whats- new-xml.aspx) –

0

dépend du type de données que vous stockez dans votre base de données, c'est normal de stocker des informations XHTML dans la base de données, par exemple, l'un des principes d'une base de données relationnelle est atomique. vous devriez stocker quelque chose comme

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

donc je serais contre pour stocker quelque chose comme

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

un problème avec XML de soutien dans un SGBDR est qu'il n'y a pas de règles AFAIK universellement acceptées pour comparer XML documents. Une base de données relationnelle peut en principe stocker n'importe quelle valeur d'attribut qui peut supporter l'affectation et la comparaison - ceci étant essentiel à la projection relationnelle par exemple parce que les valeurs de chaque attribut doivent être comparables les unes aux autres. La comparaison n'est pas un problème pour la plupart des types: chaînes, nombres, binaires, etc. C'est potentiellement plus difficile pour un type de document XML.

Certains SGBD SQL (c'est-à-dire les SGBD non relationnels) n'autorisent tout simplement pas la comparaison des valeurs XML. Par exemple, Microsoft SQL Server autorise les colonnes de type XML, mais elles ne peuvent pas être comparées et ainsi, entre autres choses, SELECT DISTINCT n'est pas supporté.

Questions connexes