URL: https://linuxfr.org/news/requetes-et-jointures-avec-pgmodeler-postgresql Title: RequĂȘtes et jointures avec pgModeler (PostgreSQL) Authors: Maxzor BAud, Davy Defaud, Ysabeau đŸ§¶, BenoĂźt Sibaud, claudex et ZeroHeure Date: 2019ćčŽ12月18æ—„T02:04:37+01:00 License: CC By-SA Tags: base_de_donnĂ©es, modĂ©lisation, postgresql, requĂȘte, sql, nlidb et pgmodeler Score: 64 Bon, voilĂ , j’ai dĂ©veloppĂ© ce greffon pour pgModeler (C++/Qt), et j’ai envie de le partager dans une petite dĂ©pĂȘche. Mes motivations principales Ă©taient de pouvoir effectuer des requĂȘtes dans mon logiciel de modĂ©lisation prĂ©fĂ©rĂ©, bien entendu, et le fait que les logiciels de modĂ©lisation que je connais ne prennent pas en charge les jointures existantes ou automatiques. Votre client SQL est cool ? Mais est‐il cool [Ă  ce point](https://github.com/Maxzor/pgmodeler_plugins_media/blob/master/inference.gif) ?! :) Rapide prĂ©sentation de pgModeler ================================ pgModeler est un logiciel de modĂ©lisation de base de donnĂ©es. Bien que plutĂŽt gĂ©nĂ©raliste — si l’on s’en tient Ă  un modĂšle logique des donnĂ©es — il est spĂ©cialisĂ© PostgreSQL. Il permet entre autres de : - construire par interface graphique un modĂšle de base de donnĂ©es (tables, schĂ©mas, rĂŽles...), mais bien plus ; en fait, il propose toutes les fonctionnalitĂ©s offertes par PostgreSQL, allant jusqu’aux extensions PostGIS ; - crĂ©er une base de donnĂ©es Ă  partir d’un modĂšle : passer de la reprĂ©sentation Ă  l’implĂ©mentation ; - Ă  l’inverse, crĂ©er un modĂšle Ă  partir d’une base de donnĂ©es ; - comparer une instance PostgreSQL avec un modĂšle et produire — voire rĂ©intĂ©grer — les diffĂ©rences entre schĂ©mas ; - administrer sa base, avec un module riche, mais qui n’égalera sans doute pas pgAdmin ; - produire un dictionnaire des donnĂ©es. Des discussions sont en cours pour rendre pgModeler nativement compatible avec les autres systĂšmes de gestion de bases de donnĂ©es relationnelles (SGBDR) grĂące Ă  l’excellent extracto‐chargeur ([ETL](https://fr.wikipedia.org/wiki/Extract-transform-load "Extract-transform-load")) [pgLoader](https://pgloader.io/). ---- [Site officiel de pgModeler](https://pgmodeler.io) [DĂ©pĂŽt GitHub de pgModeler](https://github.com/pgmodeler/pgmodeler) [DĂ©pĂŽt GitHub du greffon de requĂȘtage graphique](https://github.com/maxzor/plugins/tree/master/graphicalquerybuilder) [Cui‐cui officiel](https://twitter.com/pgmodeler) [Reddit](https://www.reddit.com/r/pgmodeler/) ---- PrĂ©sentation du requĂȘteur graphique =================================== Le requĂȘteur graphique est un greffon pour pgModeler. La sortie officielle de ce greffon coĂŻncide avec celle de la version 0.9.2 stable de pgModeler : c’est l’occasion de rappeler ces liens vers [l’annonce officielle](https://twitter.com/pgmodeler) et la [liste des changements](https://github.com/pgmodeler/pgmodeler/blob/develop/CHANGELOG.md). Le requĂȘteur graphique consiste en deux modules : - le **cƓur**, qui permet de construire des requĂȘtes SQL Ă  partir des entitĂ©s graphiques du modĂšle – tables, colonnes et relations : ![CƓur](https://linuxfr.org/images/historique/images_perdues/requetes-et-jointures-avec-pgmodeler-postgresql-KB8AYvGyFmJ2.jpg) - le **moteur d’infĂ©rence de jointures**, qui, Ă  partir de tables dans la clause `select`, propose une liste de jointures complĂštes possibles, classĂ©es par coĂ»t total : ![Moteur d’infĂ©rence](https://linuxfr.org/images/historique/images_perdues/requetes-et-jointures-avec-pgmodeler-postgresql-IrnDvy5bVJaG.jpg) Alors que le cƓur est trĂšs classique et n’apporte pas grand‐chose par rapport aux requĂȘteurs graphiques de Microsoft Access, SQL Server Management Studio, pgAdmin 3 ou autres Active Query Builder d’Active Database Software... La partie solveur de jointures est plus intĂ©ressante et nous allons nous y attarder un peu ici. Solveur de jointures ==================== Une vidĂ©o de prĂ©sentation (en anglais) tout aussi complĂšte que la section suivante est [disponible ici](https://tube.tux.ovh/videos/watch/ee0cba13-eeb0-49a1-bb8c-480c8567a254). Le fichier README de GitHub (en anglais aussi) est aussi Ă©quivalent. La vidĂ©o comporte en plus une partie guide d’utilisation. Fonctionnement -------------- Le solveur de jointures reçoit comme _entrĂ©e_ un **ensemble de tables Ă  relier**, et _produit_ une **liste de chemins valides**, c’est‐à‐dire diffĂ©rentes façons de joindre ces tables. La liste des chemins potentiels est triĂ©e par coĂ»t ascendant. Il y a une pondĂ©ration par dĂ©faut, et il est possible de personnaliser celle‐ci dans le menu paramĂštres du solveur. Pendant la marche du solveur, un rapport d’avancement est affichĂ©, et l’on peut arrĂȘter le solveur s’il prend trop de temps. Il est aussi possible d’afficher en temps rĂ©el les tables inspectĂ©es (c’est le deuxiĂšme GIF du README du dĂ©pĂŽt du greffon) et d’en apprendre plus sur l’algorithme. Parlons algorithmes justement ! Algorithmes ----------- Ce greffon fait appel Ă  diffĂ©rents algorithmes de graphes relativement simples. Pour le mode manuel (sans solveur), la construction de la requĂȘte a recours Ă  un [tri topologique](https://fr.wikipedia.org/wiki/Tri_topologique), qui repose sur une implĂ©mentation du [parcours en profondeur](https://fr.wikipedia.org/wiki/Algorithme_de_parcours_en_profondeur). Pour le mode automatique (l’infĂ©rence), d’autres algorithmes entrent en jeu via les bibliothĂšques [Boost](http://boost.org) et [Paal](paal.mimuw.edu.pl/) : - une [dĂ©couverte des tables connectĂ©es](https://en.wikipedia.org/wiki/Connected-component_labeling) (via DFS) ; - une recherche sur les [arbres de Steiner](https://fr.wikipedia.org/wiki/Probl%C3%A8me_de_l%27arbre_de_Steiner) dans le cas de trois tables ou plus Ă  joindre ; - un parcours des chemins les plus courts, via l’[algorithme de Dijkstra](https://fr.wikipedia.org/wiki/Algorithme_de_Dijkstra) notamment ; - un tri topologique pour finir, comme dans le cas manuel. Quelques bases algorithmiques sont posĂ©es, on peut pour la suite envisager des choses bien plus intĂ©ressantes ! Je pense aux [rĂ©seaux de flot](https://fr.wikipedia.org/wiki/R%C3%A9seau_de_flot) et au [thĂ©orĂšme flot‐max/coupe‐min](https://fr.wikipedia.org/wiki/Th%C3%A9or%C3%A8me_flot-max/coupe-min) pour les `EXPLAIN ANALYZE`, par exemple. Bilan ----- Le solveur a plus un statut expĂ©rimental — c’était une stimulation intellectuelle sympathique dans sa conception — que celui d’une fonctionnalitĂ© mature et Ă©prouvĂ©e. L’algorithmique est plus que perfectible. Mais c’est surtout son intĂ©rĂȘt qui reste Ă  valider, et vos retours sont les bienvenus : - dans les modĂšles simples, la valeur ajoutĂ©e par rapport au mode manuel n’est pas Ă©norme ; - dans les modĂšles complexes, le nombre de rĂ©sultats renvoyĂ©s par le solveur, surtout sans paramĂ©trage personnalisĂ©, peut devenir dĂ©sarmant. Une fonctionnalitĂ© qui pourrait aider pour ce dernier type de modĂšle est celle des [calques multidimensionnels](https://www.youtube.com/watch?v=eTHQ5EP2maU). Ces calques contournent la limitation historique des bases de donnĂ©es relationnelles « table n − 1 schĂ©ma » pour en faire « table n − n calque ». Cela permettrait de stocker des Ă©tats fonctionnels, des catĂ©gories de traitements ou de requĂȘtes, dans un ensemble visuel, etc., pour restreindre une exĂ©cution du solveur Ă  un tel ensemble. Conclusion ========== L’objectif initial de ce greffon Ă©tait de ne plus avoir Ă  se fader des `select` dĂ©biles. S’il peut servir Ă  d’autres personnes, c’est bien... Et si les Ă©coles pouvaient remplacer leurs Microsoft Access dĂ©gueulasses par pgModeler dans leurs cours de conception de bases de donnĂ©es, ça serait le rĂȘve. :D Ce greffon est en version plus ou moins bĂȘta : il ne devrait plus planter grossiĂšrement, mais de nombreuses corrections mineures et plus importantes restent Ă  faire. Une liste des amĂ©liorations envisagĂ©es est [disponible _ici_](https://github.com/Maxzor/plugins/blob/master/graphicalquerybuilder/CONTRIBUTING.md), Ă  vos claviers ! Au moment de la publication de cette dĂ©pĂȘche [28 janvier 2020], le requĂȘteur est sur le point d’ĂȘtre intĂ©grĂ© au dĂ©pĂŽt officiel, mais ce n’est pas encore fait, il n’est donc _pas encore distribuĂ©_ (binaires payants sur le site officiel, encore moins dans les dĂ©pĂŽts des distributions). Je vous suggĂšre pour compiler d’utiliser la [branche 0.9.3‐alpha de pgModeler](https://github.com/pgmodeler/pgmodeler/tree/0.9.3-alpha) et la [branche _master_ de ma divergence des greffons](https://github.com/Maxzor/plugins).

AltStyle ă«ă‚ˆăŁăŠć€‰æ›ă•ă‚ŒăŸăƒšăƒŒă‚ž (->ă‚ȘăƒȘă‚žăƒŠăƒ«) /