Problème de l'imbrication et des structures arborescentes (XML ou Json)
Si on manipule des structures de données imbriquées dans une application, comme par exemple des structures arborescentes exprimées en XML ou en Json ou encore des documents HTML, il est difficile de stocker les informations dans une base de données relationnelle.
Fondamental : Imbrication
La représentation d'un arbre profond en relationnel implique la création de nombreuses tables et donc la création d'un modèle complexe (éloigné de la réalité modélisée), et pouvant poser des problèmes de performance.
Exemple : Comparaison représentation XML versus Relationnel
<module>
<titre>Introduction au non-relationnel</titre>
<publication>10 avril 2018</publication>
<licence>CC BY-SA</licence>
<activite>
<titre>Cours</titre>
<section>
<titre>Au delà du relationnel</titre>
<page>
<titre>Problème de l'imbrication</titre>
<entete>
<auteur>Stéphane Crozat</auteur>
<date>11 avril 2018</date>
</entete>
<introduction>
<paragraphe>Si on manipule des structures de données imbriquées dans une
application...</paragraphe>
<paragraphe>En effet la représentation d'un arbre profond...</paragraphe>
</introduction>
<exemple>
<xml>
<fichier>exemple01.xml</fichier>
</xml>
</exemple>
</page>
</section>
</activite>
</module>
Module (#titre:varchar, publication:date, licence:varchar)
Activite (#titre:varchar, #module=>Module)
Section (#titre:varchar, #activite=>Activite)
Page (#titre:varchar, #Section=>Section)
Entete (#page=>Page, auteur:varchar, date:date)
Bloc (#id:int, page=>Page, type:{introduction|exemple})
Paragraphe (#id:int, bloc=>Bloc, texte:CLOB)
Xml (#id:int, bloc=>Bloc, fichier:varchar)
Fondamental : Impedance mismatch
Par ailleurs les données étant manipulées en mémoire sous une certaine structure et en base sous une autre, il faut "jongler" entre plusieurs représentations et écrire du code de conversion ce qui est source de complexification et de risque d'erreur dans le processus de programmation.