Je fouillais la base de données AdventureWorks aujourd'hui et j'ai remarqué qu'un certain nombre de tables ( HumanResources.JobCandidate
et Sales.Individual
par exemple) ont une colonne qui stocke des données xml.
Ce que je voudrais savoir, quel est l'avantage de stocker essentiellement la valeur d'une ligne d'une table de base de données dans la colonne d'une autre table? Cela ne rend-il pas difficile d'interroger ces informations? Ou est-ce l'hypothèse selon laquelle les données n'auront pas besoin d'être interrogées et doivent simplement être stockées?
Si le format des données est volatile et est susceptible d'être modifié, vous souhaiterez peut-être le regrouper sous forme de XML et le mettre dans la base de données sous cette forme, évitant ainsi de futurs changements de schéma de base de données.
Sur la même tangente, si les données sont fournies par un système externe et consommées par lui à nouveau, et qu'ils ne sont pas en mesure de vous fournir un format permanent, c'est ce que vous feriez.
SQL Server peut interroger des champs et des variables XML. Pas forcément difficile, mais plus de travail, oui. Mais faisable.
la source
D'après mon expérience, les données XML sont généralement stockées et rarement interrogées, mais souvent extraites lorsque cela est nécessaire, généralement lorsqu'un autre système a besoin d'une représentation XML de certaines données qui peuvent être difficiles ou impossibles à générer à la volée à partir de données relationnelles. Les données XML peuvent être préremplies par un autre processus.
la source
Si vous pouvez imaginer stocker vos données dans un flux binaire dans un blob, alors j'imagine que vous pouvez imaginer stocker vos données au format xml dans un blob.
Bien sûr, il vaut mieux laisser beaucoup de choses dans l'imagination de l'imaginateur.
Disons, les dossiers médicaux électroniques par exemple:
Puisque vous stockeriez probablement l'ASCII HL7 V2.x dans un champ d'une base de données. Vous seriez probablement en mesure de stocker HL7 V3.0 dans un champ d'une base de données.
L'avantage est donc la commodité.
la source
Je travaille actuellement sur un projet qui fait cela. Nous avons des données qui doivent être traitées plusieurs fois, stockées de manière relationnelle. Cependant, le traitement se fait en Java, et il est plus facile de travailler avec XML là-bas. Ainsi, nous effectuons un passage unique dans les données relationnelles et les stockons au format XML dans une table. Ensuite, nous pouvons traiter ces données en Java avec une requête de non-jonction plutôt que de récupérer les données à chaque fois, et traiter les mêmes données encore et encore pour le contenu de notre cœur. C'est beaucoup plus simple et plus efficace.
la source
Un bon exemple de stockage XML est lorsque vous souhaitez conserver les états d'interface utilisateur dans la base de données. L'état de toutes les vues d'application est sérialisé et stocké dans la base de données et il n'est pas nécessaire d'interroger le XML. Par état d'interface, je veux dire, l'ordre de tri, la taille des fenêtres, etc.
la source
Souvent, vous obtenez des données mixtes à la fois XML et relationnelles. (Un bel exemple de ceci est un magasin de documents où chaque document peut avoir des champs de métadonnées comme le titre, la date de création, le propriétaire, etc.)
À ce stade, vous devez choisir parmi trois options:
L'option 3 est probablement la plus propre mais aussi la plus chère et la plus difficile à mettre en œuvre, et vous ne voulez pas nécessairement des transactions distribuées dans un système pas très grand. L'option 2 n'est pas très bonne car les bases de données XML natives sont généralement extrêmement médiocres pour gérer les données relationnelles (que vous êtes plus susceptibles d'utiliser dans les recherches) et la technologie est globalement moins mature que la base de données relationnelle.
Cela vous laisse donc avec l'option 1 comme certainement pas la meilleure solution mais peut-être la moins mauvaise.
la source
D'après mon expérience, l'utilisation de XML dans une base de données finit par être parce que c'est ainsi que la source des données les stocke, ou que vous les ajoutez à une base de données existante pour étendre les fonctionnalités d'une manière qui ne nécessitera pas beaucoup de programmation de base de données pour prendre en charge .
Si vous allez rechercher fréquemment les nouvelles données, il peut être judicieux de diviser le XML en ses composants. Sinon, cela peut être un moyen utile d'enregistrer des données modifiées rarement.
J'espère que cela vous aide, Jeff
la source
Les banques de données orientées document (aka NoSql) sont très populaires de nos jours:
http://en.wikipedia.org/wiki/Document-oriented_database
Il n'y a aucune raison pour laquelle vous ne pouvez pas utiliser un schéma orienté document dans une base de données relationnelle. Vous n'obtiendrez peut-être pas tous les mêmes avantages par rapport à quelque chose comme Mongo, mais vous n'aurez pas non plus les inconvénients.
Pendant longtemps, si vous vouliez utiliser le stockage orienté document, votre seul choix était de placer des données structurées (comme XML) dans une grande colonne. Les bases de données relationnelles ont ajouté des fonctionnalités telles que l'indexation et la correspondance pour prendre en charge cela.
Comparez cela avec Mongo, où ils ne contiennent que des documents dans la base de données. Mais c'est un autre sujet.
EDIT: l'idée centrale de l'orientation documentaire est la suivante: vous extrayez les données, les manipulez et les repoussez en entier. Parfois, comme lorsque vous transmettez le document au client, vous voulez simplement envoyer le tout en tant qu'objet blob et le laisser s'en occuper. L'avantage (et l'inconvénient) est la flexibilité. La validation et l'exactitude du document se font en dehors de la base de données.
EDIT EDIT: Un autre contraste. Imaginez enregistrer des images JPG ou des documents Word dans une colonne de base de données.
la source
Quels sont les avantages de stocker un arbre (XML) dans une liste de tuples (une table de base de données)?
Il n'y a aucune raison pour que le XML ne soit pas interrogeable depuis votre SGBD en utilisant par exemple XPath ou SPARQL.
Selon moi, ce ne sont que deux structures de données différentes. Et il n'y a aucune raison pour qu'ils ne soient pas intégrés les uns aux autres.
Vous pouvez rechercher les raisons pour lesquelles le type de données JSON a été ajouté dans PostgreSQL. Je pense que bon nombre des mêmes arguments s'appliquent. Sauf qu'avec XML / XSD, encore plus de validation est possible.
la source
Eh bien, XML (ou JSON) est assez bon pour stocker des métadonnées avec une hiérarchie. Quelles sont les alternatives? Une table de métadonnées avec refid / clé / valeur / profondeur peut-être? C'est un peu lourd (mais probablement meilleur pour interroger si vous avez besoin de le faire). Le stockage de certaines données xml sur un document (une ligne dans un tableau de documents) est assez pratique lorsque vous souhaitez stocker des informations hiérarchiques sans avoir à vous fier à une table externe ou à ajouter 1 colonne par "type" d'informations.
la source
Je dirais que c'était une mauvaise pratique car vous obstruez un stockage autrement efficace avec des balises inefficaces qui n'ont pas besoin d'être là si vous faites l'effort d'analyser les informations. XML a une surcharge de stockage hideuse par rapport aux données qu'il décrit, car vous avez besoin d'une balise pour chaque colonne pour chaque ligne. Par comparaison, les données analysées et stockées au format relationnel ont leur nom de colonne stocké UNE FOIS. Pour une douzaine de lignes sur un dev. boîte, gros problème, mais j'ai vu des développeurs faire l'hypothèse que cela est évolutif à des millions de lignes. Cela peut représenter des centaines de Go de surcharge pour quelques dizaines de Go de données, ce qui crée des défis opérationnels. Vous vous abdiquez fondamentalement et poussez sur les gens qui doivent supporter la merde que vous avez écrite.
Alors, pourquoi ne pas le stocker LOIN des données opérationnelles, dans sa propre base de données? Ou comme prévu - dans des fichiers plats? Il ne sera probablement jamais réexaminé, alors pourquoi ne pas le supprimer des performances d'un système opérationnel? N'oubliez pas que XML est UNIQUEMENT là pour fournir une description du schéma de données qui autrement ne serait pas apparente en raison des différences de protocole de stockage entre les systèmes. C'est tout son point, il n'y a rien d'intelligent à ce sujet. Stocker 10 fois la quantité de frais généraux pour une quantité donnée de données indique simplement que vous êtes un développeur bâclé qui n'a pas réfléchi et ne peut pas être incité à traiter les données que vous consommez dans un format sensible, efficace et rapide à interroger. Arrêtez de pousser vos efforts vers le support opérationnel et réfléchissez à la façon dont vous pouvez mieux gérer les données après vous ' ai reçu ce serait mon appel. Il n'y a aucune défense pour stocker des données au format XML après leur réception, car elles ont rempli leur fonction.
la source