Hello. Pour le taf, je dois parfois concevoir des schémas de bases de données, et donc les dessiner. Mais des trucs parfois un peu complexes, pas des boilerplates à la con. Alors pas non plus ultra complexes, mais juste ce qu’il faut, quoi. Et à chaque fois que je dois le faire, je me galère à trouver un outil simple, gratuit, idéalement en ligne, et suffisamment complet. Je ne vous raconte pas le paquet de .deb merdiques que j’ai installés. Pas merdiques en tant que tels, mais disons, qui ne convenaient pas du tout à mon besoin, malgré une description le laissant présager. Des trucs qui te génèrent un schéma à partir d’une base de données déjà existante (je veux concevoir, ma base n’existe que grosso modo dans mon cerveau), d’autres trucs qui ne te donnent que les types basiques de MySQL, d’autres encore qui ont quelques fonctionnalités de PostgreSQL mais loin de tout avoir. Je ne vous raconte pas non plus le nombre de trucs vieux, moches, nuls ou payants que j’ai trouvés directement en ligne. Alors c’est louable de proposer ta soluce mais… elle est naze, je suis sincèrement navré mais c’est vrai, il faut que quelqu’un te le dise.

Bref, impossible de trouver un truc simple, avec des types de données customisables, qui te fait un dessin adaptable à ta convenance, et qui te fait des putains de flèches entre deux tables pour symboliser une relation. Rien… jusqu’à dbdiagram.io.

Le site présente une interface extra light, avec un bandeau à gauche pour “programmer” ta base, dans une syntaxe simplissime proche de GraphQL appelée DBML pour database markup language, et une visualisation à droite de ce que tu as programmé. En haut, la possibilité de générer un lien read-only vers la visualisation de cette base, et la possibilité d’exporter en PDF, en PNG, ainsi que de générer le MySQL ou le PostgreSQL correspondant. C’est tout con, et c’est exactement ce qu’il me fallait.

Comme tu peux le constater, pour déclarer une table, il suffit de taper dans le bandeau de droite :

1
2
3
4
5
Table tablename {
field1 type1 [des modifiers genre "pk", "not null", ou des relations comme "> table2.field3"]
field2 type2
etc.
}

Et pour déclarer un type custom, par exemple un enum :

1
2
3
4
5
Enum article_status {
draft
published
removed
}

Type qui peut donc ensuite être utilisé immédiatement dans ta table.

Les relations aussi sont simples. Soit on les déclare après la déclaration d’une table :

1
Ref: table1.field1 > table2.field2

Ou directement, comme expliqué plus haut, dans les modifiers d’une colonne.
En tout cas, > représente un many-to-one, < un one-to-many, et - un one-to-one.

Pour déclarer des index, ça se fait en les imbriquant dans la déclaration de la table :

1
2
3
4
5
6
7
8
Table tablename {
id UUID [pk]
name varchar(20) [not null, default: 'Roger']
Indexes {
name [unique, name:'index_on_name']
}
}

Le p’tit côté qui manque à dbdiagram, ce sont les visualisations de tous ces modifiers, ou index. Alors c’est bien parce que le schéma peut être touffu, et en épurant toutes les fioritures, on a un dessin qui se lit bien. Mais certaines indications peuvent paraître manquantes. Il te faudra donc, pour que tes collègues comprennent bien tout, bien leur partager le lien vers l’interface, plutôt qu’une image exportée, parce qu’elle permet de voir plus de choses au survol :

Toute la doc de DBML se trouve sur cette page. On peut faire des trucs vraiment stylés, hyper simplement.

Ah oui, et là je te parle seulement de mon besoin, qui est de concevoir un schéma à partir de rien. Mais on peut également créer une visualisation à partir de scripts MySQL ou PostgreSQL, en cliquant sur “Import”.

Un outil vraiment complet, que j’affectionne particulièrement, comme tout ce qui permet de générer quelque chose à partir d’un markup quelconque. Comme par exemple Hexo, que j’utilise pour écrire ce blog, ou encore le génialissime websequencediagrams, qui permet de faire la même chose que dbdiagram, mais pour des diagrammes de séquence, et que j’utilise fréquemment pour le boulot également.

Voilà, j’espère que tu feras de beaux dessins de bases de données en quelques minutes grâce à cet outil (c’est vraiment fou comme c’est rapide à prendre en main et à utiliser), et en attendant, je te fais la bise.