Package: mocodo
Janvier 2024.Mocodo4.2est maintenant disponible sousBasthon. AprèsMocodoonline, Basthon constitue donc une deuxième manière d'utiliser Mocodo sans rien installer. Elle a l'avantage de donner accès à l'intégralité des fonctionnalités du logiciel. Merci à son auteur, Romain Casati !Novembre 2023.Mocodo4.1gère les bibliothèques 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 à ses étudiants pour leur permettre de le récupérer (soit sous Mocodo online, soit en ligne de commande).Octobre 2023.Mocodo4introduit la gestion manuelle et automatique des contraintes d'optionalité et d'unicité, améliore les interfaces graphique et en ligne de commande, et ajoute un grand nombre de fonctionnalités : coloration syntaxique, liens de partage, exportation en UML, en notation de Chen etcrow's foot, génération de MCD aléatoires, décomposition des associations et autres opérations de réécriture.Septembre 2022.Mocodo 3 introduit l'héritage, l'agrégation, lescalques, lessorties PDF et PNG, etc. :3.0,3.1,3.2.Documentationsur une seule page, incluant la sortie democodo --helpet l'aide-mémoire des transformations.Mocodo est un logiciel d'aide à l'enseignement et à l'apprentissage desbases de données relationnelles.En entrée, il prend unMCD(modèle conceptuel de données) décrit dans un langage dédié minimaliste.En sortie, il produit un diagramme entité-association et, à la demande, unMLD(schéma relationnel, sous forme graphique ou textuelle), unDDL(script SQL de création de la base), undiagramme de classes UML, etc.En bonus, il est capable de réarranger automatiquement votre MCD de façon esthétique, et de lui appliquer des opérations de réécriture qui vont du mondain (typographie) à l'académique (décomposition d'associations), en passant par le merveilleux (inférence de types, génération d'exercices et d'exemples).Vous pouvez utiliser Mocodo :sur son site webMocodoonline;dans un documentJupyter Notebook, avec ousansinstallation ;en ligne de commande ;comme une bibliothèque Python.Tracé du modèle conceptuelCi-dessous, un exemple d'utilisation sous Jupyter Notebook. L'appel du programme est en première ligne ; le texte-source proprement dit, lignes suivantes. En sortie, le diagramme conceptuel, égayé au passage par l'option--colors:Opérations de conversionOn peut récupérer ce texte-source avec--inputpour lui appliquer diverses opérations. Ainsi, l'appel suivant génère et affiche son MLD, son diagramme relationnel et son DDL :%mocodo --input ccp --transform mld diagram ddl --colors desertCLIENT(Réf. client, Nom, Prénom, Adresse)COMMANDE(Num. commande, Date, Montant,#Réf. client)INCLURE(#Num. commande,#Réf. produit, Quantité)PRODUIT(Réf. produit, Libellé, Prix unitaire)CREATETABLECLIENT(PRIMARYKEY(ref_client),ref_clientVARCHAR(8)NOTNULL,nomVARCHAR(255),prenomVARCHAR(255),adresseVARCHAR(255));CREATETABLECOMMANDE(PRIMARYKEY(num_commande),num_commandeVARCHAR(8)NOTNULL,dateDATE,montantDECIMAL(10,2),ref_clientVARCHAR(8)NOTNULL);CREATETABLEINCLURE(PRIMARYKEY(num_commande,ref_produit),num_commandeVARCHAR(8)NOTNULL,ref_produitVARCHAR(8)NOTNULL,quantiteINTEGER);CREATETABLEPRODUIT(PRIMARYKEY(ref_produit),ref_produitVARCHAR(8)NOTNULL,libelleVARCHAR(50),prix_unitaireDECIMAL(10,2));ALTERTABLECOMMANDEADDFOREIGNKEY(ref_client)REFERENCESCLIENT(ref_client);ALTERTABLEINCLUREADDFOREIGNKEY(ref_produit)REFERENCESPRODUIT(ref_produit);ALTERTABLEINCLUREADDFOREIGNKEY(num_commande)REFERENCESCOMMANDE(num_commande);Dans la suite, pour épargner la frappe, les options--inputet--transformseront respectivement abrégées en-iet-t.Les opérations de conversion ne se limitent pas forcément au schéma relationnel. En voici une qui extrait un dictionnaire des données, par défaut sous la forme d'un tableau Markdown à trois colonnes :%mocodo -i ccp -t data_dictEntité ou associationLibellé de l'attributTypeCLIENTAdresseVARCHAR(255)"NomVARCHAR(255)"PrénomVARCHAR(255)"Réf. clientVARCHAR(8)COMMANDEDateDATE"MontantDECIMAL(10,2)"Num. commandeVARCHAR(8)INCLUREQuantitéINTEGERPRODUITLibelléVARCHAR(50)"Prix unitaireDECIMAL(10,2)"Réf. produitVARCHAR(8)Une autre qui transcrit le MCD dans la notationcrow's foot(crow) pourMermaid(mmd) :%mocodo -i ccp -t crow:mmderDiagram
  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: DFLe rendu des diagrammes décrits dans des langages-tiers (comme Mermaid) n'est pas directement pris en charge, mais peut être délégué (--defer) de façon transparente au service web approprié. Dans ce cas, c'est la sortie graphique qui est affichée :%mocodo -i ccp -t crow:mmd --deferOpérations de réécritureUneréécrituretransforme un MCD Mocodo en un autre MCD Mocodo (au contraire d'uneconversion, qui produit un animal d'une espèce différente).Heureusement, l'utilisateur n'a pas à réfléchir si la transformation qu'il souhaite appliquer est une réécriture ou une conversion : dans les deux cas, il invoque-t(c'est-à-dire--transform), et Mocodo se débrouille.En guise de premier exemple de réécriture, mettons les noms des entités et associations (boxes) en majuscules, et les libellés (labels) en ASCII etsnake 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'exécution d'une réécriture affiche, au-dessous du diagramme, le code-source résultant. Celui-ci est précédé de la commande magique originale,privée de l'option-iet de toute opération de réécriture. Ces dispositions permettent de continuer à travailler directement dessus si on le copie-colle dans une autre cellule.Plusieurs opérations de réécriture de nature sémantique sont également offertes. Par exemple, on peut décomposer un MCD quelconque en un MCD équivalent, mais n'employant que des dépendances fonctionnelles et des entités faibles :%mocodo -i ccp --select mcd -t explode:weak,arity=2 arrange:wide --seed=3 --colors brewer+3Notez la sous-optionarrange:wide. Elle a procédé à une réorganisation aléatoire des boîtes, ce que l'insertion de deux nouvelles associations de dépendance fonctionnelles avait rendu nécessaire. Quant à l'option--seed=3, elle garantit que le résultat sera le même à chaque exécution.Pour vous familiariser avec Mocodo, le plus simple est d'utilisersa version en ligne. Vous pourrez ensuite vous plonger dans ladocumentation.