Bonjour,
Imaginons des données XML :
On peut fournir une interface très simple à l'utilisateur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <root> <book/> <book name="H2O2" /> <book> <page> <font id='43' /> </page> </book> </root>
Mais, un fichier XML n'est pas un SGBD et ne fournit pas directement certaines fonctionnalités ainsi que les optimisations liées :
Code : Sélectionner tout - Visualiser dans une fenêtre à part book[2].page.font['id'] = '42';
- les index ;
- les vues ;
- les clauses WHERE/HAVE/GROUP BY
- etc.
Je pensais alors qu'il serait intéressant de stocker ces données dans une BDD SQLite pour bénéficier des avantages des SGBD tout en conservant au maximum ceux des XML.
Le but serait donc de pouvoir proposer un système de requêtes "intuitives" du type :
Puis de "traduire" ces requêtes intuitives en requêtes SQL.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SET book[2].page.font['id'] = '42' INS page INTO rootbook[2] // ajoute une page à book[2] GET book.page.font['id'] WHERE ISSET(book.page.font['id']) DEL book.page.font['id'] WHERE ISSET(book.page.font['id'])
La traduction ne devrait pas être très compliquée c'est surtout la structure de la BDD qui me pose problème :
- soit je fais une table book, une table page, une table font, etc. mais j'ai peur que les jonctions entre les tables ne coûte très cher au fur et à mesure qu'on aura de "générations", et donc se révèle moins intéressant qu'un bête fichier XML
- soit je fais des tables à deux colonnes : clé-valeur : ("book[2].page.font['id']", "42"), ("book[2].page", ""), etc. mais je ne sais pas si cela serait vraiment intéressant.
J'ai aussi entendu parler du NoSQL ce qui correspondrait à des couples "clé-valeur", mais je ne comprend pas comment il fonctionne en interne ni même s'il serait vraiment intéressant dans mon cas. Ni même s'il existe des SGBD NoSQL qui, comme SQLite, ne nécessite pas un service tournant en tâche de fond.
Est-ce que vous auriez des idées ou des suggestions ?
EDIT : JSONB de postgresql se rapproche de ce que je voudrais faire.
Partager