Journal Graph my database

Posté par  . Licence CC By‑SA.
58
28
mar.
2021

Que ceux qui n'aiment pas les graphes quittent immédiatement ce journal.

Je travaille sur Mobilizon, le logiciel développé par Framasoft, pour s'affranchir de Faïcebouc dans l'organisation de groupe et d'événements.

Je voulais avoir une représentation graphique du modèle de données. Pas à la main bien sûr, mais construit à partir de la base de prod.

Comme j'utilise au quotidien SquirrelSQL et qu'il a un plugin graph, essayons :

avec squirrelsql
Pas terrible. Direction un moteur de recherche web.

Je trouve DBeaver (basé sur la plateforme Eclipse) et me dis que décidément, le DBA aiment les rongeurs. J'installe, je branche sur la DB, et voilà.

avec dbeaver

Beaucoup plus lisible mais pas encore au niveau que je souhaite.

Je crois lire que DBeaver ou un autre utilise graphviz pour faire le placement. Et je me dis que finalement un outil qui se connecte à la DB, récupère le tables et les relations et pond un script dot serait plus proche de ce que je cherche. Et bien cela existe, ça s'appelle SchemaCrawler.

Un download+extract et quelques ajustements de la ligne de commande - schemacrawler.sh ... --command=schema --load-row-counts --table-types=table ... --output-format=scdot - après, j'obtiens un fichier dot que je peux retoucher un peu et convertir en image :

avec schemacrawler

Joli, hein ?! Pour avoir un rendu correct, il faut 5000px de large alors, il faut zoomer un peu. Mais j'ai testé le rendu sur du A3 et c'est vraiment utilisable.

À noter que j'ai exclus quelques tables pour plus de lisibilité. Cela se fait dans la ligne de commande.

Cerise sur le gâteau, sc ajoute le nombre de lignes de chaque table. Utile pour avoir une idée du poids de chacune.

Et vous, comment auriez vous fait ?

Happy graphing !

  • # Besoin récurrent

    Posté par  (site web personnel) . Évalué à 5.

    Hello, merci pour le partage d'expérience, c'est un besoin récurrent que l'on a aussi.

    Dans les outils qui peuvent parfois sortir quelque chose de convenable, il y a pgadmin (pour postgresql) MySQLWorkbench (pour MySQL), et sinon de mon côté, vu qu'on utilise un DBAL (DataBase Access Layer) custom qu'on maintien sur nos projets, je rejoints ta solution et utilise un générateur de GraphViz branché sur un visiteur qui parcoure le schéma (outillage intégré à notre DBAL).

    Par contre, j'ai toujours beaucoup de soucis avec dot, je n'arrive jamais à trouver un jeu d'options correct pour afficher convenablement les graphs, as-tu des options particulières à conseiller ?

    • [^] # Re: Besoin récurrent

      Posté par  . Évalué à 4.

      On peut vite arriver à une combinatoire ingérable avec les options de Graphviz.

      ScemaCrawler, si le rendu te plaît, en positionne très peu :

      digraph "SchemaCrawler_Diagram" {
      
        graph [
          fontname="Helvetica"
          labeljust="r"
          rankdir="RL"      <=========== là
      
        ];
      ...
      }
      

      Je réponds quelques fois sur SO.

      Il est possible aussi de jouer avec le moteur de rendu : dot, neato, circo, fdp. À adapter selon l'usage. Ici j'utilise dot.

      Mais je n'ai rien de magique si ce n'est tâtonner 🪄.

      • [^] # Re: Besoin récurrent

        Posté par  (site web personnel) . Évalué à 1.

        Mais je n'ai rien de magique si ce n'est tâtonner 🪄.

        Je m'attendais un peu à cette réponse, mais merci pour les pistes, je vais me garder ça dans un coin au chaud, surtout schema crawler qui l'air de mettre des options pas trop idiotes.

        Merci !

  • # Pour LinuxFr.org

    Posté par  (site web personnel) . Évalué à 9.

    pour linuxfr.org, je m'étais rabattu sur draw.io (donc très manuel, mais je voulais de toute façon ajouter des précisions à divers endroits) :
    https://github.com/linuxfrorg/linuxfr.org/blob/master/db/schema.png
    https://github.com/linuxfrorg/linuxfr.org/blob/master/db/schema.drawio

  • # Merci beaucoup

    Posté par  (site web personnel) . Évalué à 3.

    Super info

    Merci beaucoup

  • # Et pour les très grosses bases...

    Posté par  . Évalué à 8.

    Le problème qu'on avait ici, c'était qu'on a des vieilles applications qui n'ont pas 20 ou 30 tables, mais plutôt 200 ou 300 (voire plus). Et que beaucoup d'entre elles n'ont pas de contraintes d'intégrité.

    Et c'est surtout celles là qu'on veut documenter, car quand on arrive sur un tel projet, c'est l'enfer pour comprendre le modèle.

    Au final, on ne peut donc pas s'appuyer directement sur un outil qui extrait les metadatas ; et on ne peut pas tout représenter sur un seul graphe - ça n'aurait aucun sens et n'apporterait aucune aide.

    Donc il faut toujours une étape manuelle de manipulation du résultat pour le splitter deux catégories de graphes :

    1) les graphes par domaine fonctionnel ; où tu montres même parfois seulement les tables principales, ou alors tu ne détaille que les tables principales - pour les autres tu ne montre que les attributs de clé primaire voire quelques attributs sélectionnés par un être humain.

    2) les graphes globaux ; où tu représente très grossièrement chaque domaine fonctionnel et tu mets en exergue les tables qui sont transverses et importantes.

    Autrement dit, tu utilises un outil de génération pour le début du travail, mais après c'est tout à la mimine. Et souvent, tu vas te retrouver à maintenir totalement à la main… Avant je faisais ça avec des gros outils propriétaires (PowerDesigner), mais ça finit toujours par être abandonné.

    Encore autrement dit : à ce jour je n'ai pas trouvé de bonne solution. Le taux de travail manuel était pour moi un bon indicateur de "quelle quantité de travail est nécessaire pour remettre cette base d'applomb"…

    • [^] # Re: Et pour les très grosses bases...

      Posté par  . Évalué à 3. Dernière modification le 29 mars 2021 à 11:43.

      SchemaCrawler permet d'inclure/exclure des tables par regexp. Ça peut permettre de créer des graphs certes incomplets mais plus lisibles.

    • [^] # Re: Et pour les très grosses bases...

      Posté par  (site web personnel) . Évalué à 3.

      Le problème qu'on avait ici, c'était qu'on a des vieilles applications qui n'ont pas 20 ou 30 tables, mais plutôt 200 ou 300 (voire plus). Et que beaucoup d'entre elles n'ont pas de contraintes d'intégrité.

      Cela ressemble fortement à l'ERP qui me fait vivre … ( il y a un X dans le nom et le chiffre 3 )

      Tu as été puni pour être obligé de développer sur ce genre de truc :)

  • # Créer un MDP sexy avec quel outil ?

    Posté par  . Évalué à 3.

    Journal très intéressant car j'ai ce besoin de gérer mon graphe de mon modèle physique de données.

    Je n'ai pas besoin de génération automatique car comme dis dans un commentaire plus bas, les bases sont tellement grosses qu'il faut regrouper en domaines fonctionnels et rajouter des infos partout !

    A ce jour, j'utilise encore DIA pour avoir un qqch de potable visuellement https://ibb.co/f1HJFgK. J'ai déjà lorgné sur draw.io mais c'est très moche. Et les outils sympa existants sont tous payants ou liés à un service web qui peut disparaitre du jour au lendemain.

    • [^] # Re: Créer un MDP sexy avec quel outil ?

      Posté par  (site web personnel) . Évalué à 3.

      Peut être pour le modèle physique des données
      mais sinon Draw.io permet de faire de très joli chose

      Honnètement je suis passé de Visio à Draw.io plus rapidement que ce que je pensais, et je le regrette pas :)

      mais bon mes dessins sont surtout des schémas d'infra structure logicielle a destination de presque informaticien … pour rester dans le politiquement correct

    • [^] # Re: Créer un MDP sexy avec quel outil ?

      Posté par  . Évalué à 4.

      A ce jour, j'utilise encore DIA pour avoir un qqch de potable visuellement

      Dia… j'aimais bien aussi, et je l'utilise encore de temps en temps, mais j'en suis largement insatisfait, tout en n'ayant rien trouvé de mieux…

      Énormément de place est gâchée par les barres d'outils et règles, qu'il faut virer à chaque démarrage de l'application.
      L'édition de chaque table demande une utilisation trop importante de la souris, c'est long, très, très long pour juste modifier un champ (d'un autre côté, c'est un éditeur de diagramme, pas d'UML ni de merise. M'enfin quand même, le dialogue de modif pourrait être moins pire…).
      Les relations sont… bon, c'est soit se les tapper et les maintenir à la main (genre, chaque angle, et refaire au moindre déplacement) soit avoir un truc difficilement lisible.
      De même, impossible de savoir quand 2 relations se croise s'il s'agit d'une fourche (plusieurs relations qui avant avaient le même trajet se séparent) ou si l'une "passe au-dessus" de l'autre.

      Bref, je l'utilise à défaut de mieux, mais j'aimerai trouver mieux. Par contre, j'insiste pour que l'outil soit installable facilement en off-line, parce que le réseau quand il lâche, c'est bien de pouvoir accéder aux graphes qui le documentent, ou le modifier :)

      Il y a longtemps j'utilisais Bouml, mais ça ne sert que pour l'uml d'une part, et d'autre part, c'est trop compliqué pour 90% des usages que j'en aurai, l'interface se mets également dans les pattes de l'utilisateur je trouve. J'imagine que pour un gros, gros logiciel ça peut servir, cependant.

      Sinon, je serais curieux de savoir ce que les gens qui gèrent des réseaux (LAN/WAN) utilisent, pour documenter liens physiques, emplacements des services, ce genre de choses? Dia peut faire le boulot en partie, mais c'est assez limite je trouve.

  • # Django-extensions

    Posté par  (Mastodon) . Évalué à 1.

    Salut,

    Je travaille au quotidien avec Django, il y a une appli très utile qui s'appelle django-extensions, il fait ça très bien depuis au moins 6-7 ans, en utilisant graphviz aussi.

    … du coup, à chaque fois qu'on me parle de graphes, je sors plot / graphviz !

    Courage !

  • # yed graph editor

    Posté par  . Évalué à 1.

    Bonjour,

    Pour ma part j'utilise DBWeaver , dans lequel je crée un graphe sommaire que j'exporte au format graphHML , qui est ensuite ouvert avec yed graph editor ( assez léger et gratuit ) , qui permet de retravailler l'aspect visuel tant au niveau des couleur, de la police , du placement et insertion d’icône, d’objet UML ,… et permet une sortie au format image , HTML avec l’insertion éventuel de code , de référence vers des données , … pour obtenir un peu d'interactivité .

  • # SchemaSpy

    Posté par  . Évalué à 2.

    Pour les grosses bases de données (même plus de 1000 tables) il y a un outil très pratique : SchemaSpy

    http://schemaspy.org/

    EZ

  • # Equivalent de MySQLWorkbench

    Posté par  . Évalué à 1.

    Tous ces outils sont super intéressants, quand on a déjà réalisé son modèle physique.
    Je cherche quant à moi un équivalent de MySQLWorkbench, qui marcherait avec django (je suis néophyte sur Dango).
    Quelqu'un connait cela ?

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.