Octobre 2025. Basthon prend maintenant en charge Mocodo 4.3.2.
Mars 2025. Mocodo 4.3 commence a surfer sur la vague des IA hallucinogeneratives : il peut maintenant composer des prompts a copier-coller sous ChatGPT (ou autre) pour reecrire le MCD en cours avec le type des attributs ou l'explication des cardinalites.
Septembre 2024. Basthon prend maintenant en charge Mocodo 4.2.8, qui simplifie l'appel a la fonction mocodo() de mocodo.magic. Voir l'exemple mis a jour dans la galerie de Basthon.
Janvier 2024. Mocodo 4.2 est maintenant disponible sous Basthon. Apres Mocodo online, Basthon constitue donc une deuxieme maniere d'utiliser Mocodo sans rien installer. Elle a l'avantage de donner acces a l'integralite des fonctionnalites du logiciel. Merci a son auteur, Romain Casati !
Novembre 2023. Mocodo 4.1 gere les bibliotheques de MCD. Un enseignant peut par exemple placer sur son propre serveur la correction d'un MCD sous un nom << secret >>, que le moment venu il communiquera oralement a ses etudiants pour leur permettre de le recuperer (soit sous Mocodo online, soit en ligne de commande).
Octobre 2023. Mocodo 4 introduit la gestion manuelle et automatique des contraintes d'optionalite et d'unicite, ameliore les interfaces graphique et en ligne de commande, et ajoute un grand nombre de fonctionnalites : coloration syntaxique, liens de partage, exportation en UML, en notation de Chen et crow's foot, generation de MCD aleatoires, decomposition des associations et autres operations de reecriture.
Septembre 2022. Mocodo 3 introduit l'heritage, l'agregation, les calques, les sorties PDF et PNG, etc. : 3.0, 3.1, 3.2.
Documentation sur une seule page, incluant la sortie de mocodo --help et l'aide-memoire des transformations.
Mocodo est un logiciel d'aide a l'enseignement et a l'apprentissage des bases de donnees relationnelles.
- En entree, il prend un MCD (modele conceptuel de donnees) decrit dans un langage dedie minimaliste.
- En sortie, il produit un diagramme entite-association et, a la demande, un MLD (schema relationnel, sous forme graphique ou textuelle), un DDL (script SQL de creation de la base), un diagramme de classes UML, etc.
- En bonus, il est capable de rearranger automatiquement votre MCD de facon esthetique, et de lui appliquer des operations de reecriture qui vont du mondain (typographie) a l'academique (decomposition d'associations), en passant par le merveilleux (inference de types, generation d'exercices et d'exemples).
Vous pouvez utiliser Mocodo :
- sur son site web Mocodo online ;
- dans un document Jupyter Notebook, avec ou sans installation ;
- en ligne de commande ;
- comme une bibliotheque Python.
Trace du modele conceptuel
Ci-dessous, un exemple d'utilisation sous Jupyter Notebook. L'appel du programme est en premiere ligne ; le texte-source proprement dit, lignes suivantes. En sortie, le diagramme conceptuel, egaye au passage par l'option --colors :
Operations de conversion
On peut recuperer ce texte-source avec --input pour lui appliquer diverses operations. Ainsi, l'appel suivant genere et affiche son MLD, son diagramme relationnel et son DDL :
%mocodo --input ccp --transform mld diagram ddl --colors desert
- CLIENT (Ref. client, Nom, Prenom, Adresse)
- COMMANDE (Num. commande, Date, Montant, #Ref. client)
- INCLURE (#Num. commande, #Ref. produit, Quantite)
- PRODUIT (Ref. produit, Libelle, Prix unitaire)
PRIMARY KEY (ref_client),
ref_client VARCHAR(8) NOT NULL,
nom VARCHAR(255),
prenom VARCHAR(255),
adresse VARCHAR(255)
);
CREATE TABLE COMMANDE (
PRIMARY KEY (num_commande),
num_commande VARCHAR(8) NOT NULL,
date DATE,
montant DECIMAL(10,2),
ref_client VARCHAR(8) NOT NULL
);
CREATE TABLE INCLURE (
PRIMARY KEY (num_commande, ref_produit),
num_commande VARCHAR(8) NOT NULL,
ref_produit VARCHAR(8) NOT NULL,
quantite INTEGER
);
CREATE TABLE PRODUIT (
PRIMARY KEY (ref_produit),
ref_produit VARCHAR(8) NOT NULL,
libelle VARCHAR(50),
prix_unitaire DECIMAL(10,2)
);
ALTER TABLE COMMANDE ADD FOREIGN KEY (ref_client) REFERENCES CLIENT (ref_client);
ALTER TABLE INCLURE ADD FOREIGN KEY (ref_produit) REFERENCES PRODUIT (ref_produit);
ALTER TABLE INCLURE ADD FOREIGN KEY (num_commande) REFERENCES COMMANDE (num_commande);
Dans la suite, pour epargner la frappe, les options --input et --transform seront respectivement abregees en -i et -t.
Les operations de conversion ne se limitent pas forcement au schema relationnel. En voici une qui extrait un dictionnaire des donnees, par defaut sous la forme d'un tableau Markdown a trois colonnes :
%mocodo -i ccp -t data_dict
| Entite ou association | Libelle de l'attribut | Type |
|---|---|---|
| CLIENT | Adresse | VARCHAR(255) |
| " | Nom | VARCHAR(255) |
| " | Prenom | VARCHAR(255) |
| " | Ref. client | VARCHAR(8) |
| COMMANDE | Date | DATE |
| " | Montant | DECIMAL(10,2) |
| " | Num. commande | VARCHAR(8) |
| INCLURE | Quantite | INTEGER |
| PRODUIT | Libelle | VARCHAR(50) |
| " | Prix unitaire | DECIMAL(10,2) |
| " | Ref. produit | VARCHAR(8) |
Une autre qui transcrit le MCD dans la notation crow's foot (crow) pour Mermaid (mmd) :
%mocodo -i ccp -t crow:mmd
CLIENT {
VARCHAR(8) ref_client PK
VARCHAR(255) nom
VARCHAR(255) prenom
VARCHAR(255) adresse
}
COMMANDE {
VARCHAR(8) num_commande PK
DATE date
DECIMAL(10-2) montant
}
INCLURE {
INTEGER quantite PK
}
PRODUIT {
VARCHAR(8) ref_produit PK
VARCHAR(50) libelle
DECIMAL(10-2) prix_unitaire
}
CLIENT ||--o{ COMMANDE: PASSER
INCLURE }|..|| COMMANDE: DF
INCLURE }o..|| PRODUIT: DF
Le rendu des diagrammes decrits dans des langages-tiers (comme Mermaid) n'est pas directement pris en charge, mais peut etre delegue (--defer) de facon transparente au service web approprie. Dans ce cas, c'est la sortie graphique qui est affichee :
%mocodo -i ccp -t crow:mmd --defer
Operations de reecriture
Une reecriture transforme un MCD Mocodo en un autre MCD Mocodo (au contraire d'une conversion, qui produit un animal d'une espece differente).
Heureusement, l'utilisateur n'a pas a reflechir si la transformation qu'il souhaite appliquer est une reecriture ou une conversion : dans les deux cas, il invoque -t (c'est-a-dire --transform), et Mocodo se debrouille.
En guise de premier exemple de reecriture, mettons les noms des entites et associations (boxes) en majuscules, et les libelles (labels) en ASCII et snake case :
%mocodo -i ccp -t upper:boxes ascii:labels snake:labels --colors brewer+3
%%mocodo --colors brewer+3
CLIENT: ref_client [VARCHAR(8)], nom [VARCHAR(255)], prenom [VARCHAR(255)], adresse [VARCHAR(255)]
PASSER, 0N CLIENT, 11 COMMANDE
COMMANDE: num_commande [VARCHAR(8)], date [DATE], montant [DECIMAL(10,2)]
INCLURE, 1N COMMANDE, 0N PRODUIT: quantite [INTEGER]
PRODUIT: ref_produit [VARCHAR(8)], libelle [VARCHAR(50)], prix_unitaire [DECIMAL(10,2)]
Remarquez que l'execution d'une reecriture affiche, au-dessous du diagramme, le code-source resultant. Celui-ci est precede de la commande magique originale, privee de l'option -i et de toute operation de reecriture. Ces dispositions permettent de continuer a travailler directement dessus si on le copie-colle dans une autre cellule.
Plusieurs operations de reecriture de nature semantique sont egalement offertes. Par exemple, on peut decomposer un MCD quelconque en un MCD equivalent, mais n'employant que des dependances fonctionnelles et des entites faibles :
%mocodo -i ccp --select mcd -t explode:weak,arity=2 arrange:wide --seed=3 --colors brewer+3
Notez la sous-option arrange:wide. Elle a procede a une reorganisation aleatoire des boites, ce que l'insertion de deux nouvelles associations de dependance fonctionnelles avait rendu necessaire. Quant a l'option --seed=3, elle garantit que le resultat sera le meme a chaque execution.
Pour vous familiariser avec Mocodo, le plus simple est d'utiliser sa version en ligne. Vous pourrez ensuite vous plonger dans la documentation.