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.

FondamentalImbrication

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.

ExempleComparaison représentation XML versus Relationnel

1
<?xml version="1.0" encoding="UTF-8"?>
2
<module>
3
    <titre>Introduction au non-relationnel</titre>
4
    <publication>10 avril 2018</publication>
5
    <licence>CC BY-SA</licence>
6
    <activite>
7
        <titre>Cours</titre>
8
        <section>
9
            <titre>Au delà du relationnel</titre>
10
            <page>
11
                <titre>Problème de l'imbrication</titre>
12
                <entete>
13
                    <auteur>Stéphane Crozat</auteur>
14
                    <date>11 avril 2018</date>
15
                </entete>
16
                <introduction>
17
                    <paragraphe>Si on manipule des structures de données imbriquées dans une
18
                        application...</paragraphe>
19
                    <paragraphe>En effet la représentation d'un arbre profond...</paragraphe>
20
                </introduction>
21
                <exemple>
22
                    <xml>
23
                        <fichier>exemple01.xml</fichier>
24
                    </xml>
25
                </exemple>
26
            </page>
27
        </section>
28
    </activite>
29
</module>
30
1
Module (#titre:varchar, publication:date, licence:varchar)
2
Activite (#titre:varchar, #module=>Module)
3
Section (#titre:varchar, #activite=>Activite)
4
Page (#titre:varchar, #Section=>Section)
5
Entete (#page=>Page, auteur:varchar, date:date)
6
Bloc (#id:int, page=>Page, type:{introduction|exemple})
7
Paragraphe (#id:int, bloc=>Bloc, texte:CLOB)
8
Xml (#id:int, bloc=>Bloc, fichier:varchar)

FondamentalImpedance 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.