· 6 min read
Azimutt : l'outil ultime pour vos bases de données
Découvrons comment Azimutt peut vous aider à explorer et documenter vos bases de données HYPER simplement !
Cet article est réalisé en partanariat avec Azimutt.
Obtenez 50% de réduction avec le code
YOANDEV
(valable juqu’au 30/03/2025)
Introduction
Votre projet grandit et votre base de données aussi. Il est même possible que vous possédiez plusieurs bases de données. Comment vous y retrouver ? Comment documenter tout ça ? C’est là qu’Azimutt entre en jeu !
Azimutt c’est un outil qui va vous permettre d’explorer et de documenter vos bases de données de manière simple et efficace. Vous allez voir, c’est un vrai jeu d’enfant !
Mettons en place une démo
Pour bien comprendre comment Azimutt fonctionne, mettons en place une vraie fausse architecture de base de données.
Nous allons utiliser trois instances de PostgreSQL. Une pour les utilisateurs, une pour les produits et une pour les commandes. C’est parti !
Le docker compose
Pour commencer, nous allons créer un fichier compose.yml
qui va nous permettre de lancer nos trois instances de PostgreSQL.
Dans la vraie vie, cela pourrais correspondre à trois bases de données différentes pour 3 microservices différents par exemple.
services:
users:
image: postgres
environment:
POSTGRES_DB: users
POSTGRES_USER: user
POSTGRES_PASSWORD: password
ports:
- "5432:5432"
products:
image: postgres
environment:
POSTGRES_DB: products
POSTGRES_USER: user
POSTGRES_PASSWORD: password
ports:
- "5433:5432"
orders:
image: postgres
environment:
POSTGRES_DB: orders
POSTGRES_USER: user
POSTGRES_PASSWORD: password
ports:
- "5434:5432"
Démarrez vos instances de PostgreSQL avec la commande docker compose up -d
.
Création des tables Users
- Connectez-vous à l’instance
users
avec votre client SQL préféré et exécutez le script suivant :
/* Type de User */
CREATE TABLE user_type (
id SERIAL PRIMARY KEY,
name VARCHAR(50)
);
/* Utilisateur */
CREATE TABLE "user" (
id SERIAL PRIMARY KEY,
type_id INT REFERENCES user_type(id),
first_name VARCHAR(50),
last_name VARCHAR(50),
email VARCHAR(50),
password VARCHAR(50)
);
/* Fixtures - Type de User - 2 types */
INSERT INTO user_type (name) VALUES ('Admin');
INSERT INTO user_type (name) VALUES ('User');
/* Fixtures - Utilisateurs */
INSERT INTO "user" (type_id, first_name, last_name, email, password) VALUES (1, 'John', 'Doe', 'test@test.com', 'password');
INSERT INTO "user" (type_id, first_name, last_name, email, password) VALUES (2, 'Jane', 'Doe', 'test@test.com', 'password');
Création des tables Products
- Connectez-vous à l’instance
products
avec votre client SQL préféré et exécutez le script suivant :
/* Produit */
CREATE TABLE product (
id SERIAL PRIMARY KEY,
name VARCHAR(50),
price DECIMAL(10, 2)
);
/* Fixtures - Produits */
INSERT INTO product (name, price) VALUES ('T-shirt', 19.99);
INSERT INTO product (name, price) VALUES ('Mug', 9.99);
INSERT INTO product (name, price) VALUES ('Sticker', 1.99);
Création des tables Orders
- Connectez-vous à l’instance
orders
avec votre client SQL préféré et exécutez le script suivant :
/* Commande */
CREATE TABLE "order" (
id SERIAL PRIMARY KEY,
user_id INT,
product_id INT,
quantity INT
);
/* Fixtures - Commandes */
INSERT INTO "order" (user_id, product_id, quantity) VALUES (1, 1, 2);
INSERT INTO "order" (user_id, product_id, quantity) VALUES (2, 2, 1);
INSERT INTO "order" (user_id, product_id, quantity) VALUES (1, 3, 5);
Découvrons Azimutt
Maintenant que notre architecture de base de données est en place, nous allons pouvoir explorer et documenter tout ça avec Azimutt.
Initialisation d’un projet avec la CLI
Azimutt nous propose un moyen très simple pour démarrer un projet. Il suffit de lancer la commande suivante :
npx azimutt explore postgres://user:password@localhost:5432/users
La CLI va initialiser un projet Azimutt et l’ouvrir dans votre navigateur !
A ce stade, on peut explorer notre base de données, voir les tables, les colonnes, les contraintes, les index.. et même naviguer dans les données !
Un schéma multi-bases de données ?
L’une des forces d’Azimutt est de pouvoir explorer plusieurs bases de données en même temps… et de faire apparaître des liens entre elles !
Pour cela, il suffit d’ajouter nos deux autres bases de données à notre projet Azimutt :
postgres://user:password@localhost:5433/products
postgres://user:password@localhost:5434/orders
- Ajoutons par exemple notre table
order
à notre layout.
- Azimutt detecte que les colonnes
user_id
etproduct_id
sont potentiellement des relations entre nos tablesorder
,user
etproduct
, et nous propose de les lier ! Génial non ?
- Magie, nous avons maintenant un schéma multi-bases de données !
- Nous pouvons même naviguer dans les données de nos différentes bases de données ! je trouve ça vraiment HYPER pratique !
Complexifions un peu notre architecture
Azimutt n’a pas tremblé face à notre architecture de base de données simpliste. Mais qu’en est-il d’une architecture un peu plus complexe ? Genre, si on ajoute un peu de polymorphisme ?
Ajoutons une tables service
dans notre base products
- Connectez-vous à l’instance
products
avec votre client SQL préféré et exécutez le script suivant :
/* Création de la table service */
CREATE TABLE service (
id SERIAL PRIMARY KEY,
name VARCHAR(50),
fee DECIMAL(10, 2)
);
/* Fixtures - Services */
INSERT INTO service (name, fee) VALUES ('Livraison Express', 4.99);
INSERT INTO service (name, fee) VALUES ('Emballage cadeau', 2.99);
Modification de la table order
pour supporter les services
- Connectez-vous à l’instance
orders
avec votre client SQL préféré et exécutez le script suivant :
/* Modifier la table order pour ajouter le champ polymorphique */
ALTER TABLE "order"
ADD COLUMN product_type VARCHAR(50); -- Pour indiquer le type référencé (ex. "product" ou "service");
/* Fixtures - Commandes existantes */
UPDATE "order" SET product_type = 'product';
/* Fixtures - Commandes de services */
INSERT INTO "order" (user_id, product_id, quantity, product_type) VALUES (2, 1, 1, 'service');
INSERT INTO "order" (user_id, product_id, quantity, product_type) VALUES (1, 2, 1, 'service');
Gestion du polymorphisme dans Azimutt
- On rafrachit notre projet Azimutt pour prendre en compte les nouvelles tables et relations.
- Directement, Azimutt détecte le polymorphisme et nous propose de lier nos tables
order
,product
etservice
(avec des conditionswhen
).
- Ta-dam !
Designer des évolutions de votre modèle
Vous avez une nouvelle feature à développer et vous devez modifier votre base de données ? Pas de panique, Azimutt vous permet de designer vos évolutions de modèle AVANT de les appliquer !
Ajoutons une source de type AML
à notre projet
-
AML, c’est Azimutt Markup Language. C’est un format simple pour décrire des schémas de base de données.
-
Ajoutons dinc une source AML `feature-xyz’ à notre projet.
- Et designons une nouvelle table
status
(sans relation au sens SQL):
status
id int pk
name text
order_id int
- Azimutt, une nouvelle fois, détecte les relations potentielles et nous propose de les lier !
Conclusion
Azimutt est un outil vraiment puissant pour explorer et documenter vos bases de données. Il est simple d’utilisation et permet de gérer des architectures complexes, multi-bases de données, et même du polymorphisme !
La démo que nous avons faite est très basique, peut de tables, peu de données… mais imaginez un peu ce que cela peut donner sur un vrai projet avec des centaines de tables, des milliers de données, des relations complexes…
Et nous n’avons même pas parlé de toutes les autres fonctionnalités d’Azimutt…