- 
  - Source
  - Modèle Conceptuel
  - UML-Diagramme de domaine
  - UML-Diagramme des classes
  - UML-Interface de Programmation
  - Modèle Relationnel (Éducation Nationale)
  - Modèle Relationnel (Université)
  - Modèle Logique (tables)
  - Tables (base de données)
- 
  - SQL-MariaDB
  - SQL-PostgreSQL
  - SQL-Sqlite
  - Haxe
  - Java
  - PHP
  - Python
- 

# Source

- 
- 
- 

## Présentation

Cette application est la version en ligne de DBConcept, un logiciel de modélisation de structures et de bases de données qui opère à partir d'une description textuelle des contraintes ensemblistes.

Exemples :

- Bibliothèque
- Évaluation des étudiants
- Gestion commerciale
- File et Pile

Les panneaux de visualisation sont multifonctions : utiliser les menus  et  pour choisir le type de diagramme (UML, MCD, MLD, MPD) ou de code (SQL, Haxe, Java, PHP, Python).

Note pour Firefox : la fonctionnalité de presse papier est par défaut désactivée ; pour l'activer, saisir l'URL `about:config` et définir la valeur `true` pour la propriété `dom.events.asyncClipboard.clipboardItem`.

## Définir une classe

    classe: attr1, attr2, attr3, ...

- Le nom de la classe est suivit par un deux-points.
- Les attributs sont séparés par des virgules.
- Le premier attribut est par défaut l’identifiant de la classe. Pour inclure un autre attribut dans l’identifiant (ou exclure le premier), préfixer le nom de l’attribut par un tiret bas ;
  exemple : `_attr`
- Le type de donnée peut être précisé entre crochets après le nom de l’attribut (la valeur par défaut est `VARCHAR(50)`). Le type `COUNTER` est un mot clé pour définir un nombre auto-incrémenté ;
  exemple : `attr [INT]`
- Ce qui est entre `/*` et `*/` ou ce qui suit `//` est ignoré (commentaire).

### Spécificités UML / OOP :

- La visibilité des attributs est par défaut protégée. Des accesseurs et mutateurs sont automatiquement générés à moins que la visibilité ne soit rendue explicite par le préfixe `+` (publique), `#` (protégée) ou `-` (privée)
- Un attribut préfixé par `~` est à portée classe.
- Le type `T` indique un type générique.

## Définir une association

    assoc, 01 ent1, 1N ent2, ... : attr1, ...

- Le nom de l’association est suivit par une virgule.
- Les “pattes” d’une association sont séparées par des virgules.
- Chaque patte est définie par ses cardinalités (`01`, `11`, `0N`, `1N`, ou `XX` pour les masquer) suivies du nom de la classe impliquée dans l’association.
- Les éventuels attributs d’une association sont placés à la fin après un deux-points.
- Le rôle de que joue la classe dans l’association peut être indiqué entre crochets, après les cardinalités ;
  exemple : `11 [role] entité`
- Pour indiquer un lien relatif, préfixer les cardinalités (dont la maximum devrait être 1) par un tiret bas ;
  exemple : `_11 entité faible`

### Spécificité UML / OOP :

- Pour indiquer une agrégation préfixer les cardinalités par la lettre `o` (en minuscule) ; le tiret du bas `_` (cf lien relatif) ou l’étoile `*` indique une composition.
- La visibilité des liens (par défaut protégée avec accesseurs et mutateurs) peut être rendue explicite en préfixant les cardinalités par `+`, `#` ou `-`.

## Définir une sous-classe

    /\ parent - enfant1, enfant2

- La ligne commence par les caractères `/` et `\` suivis du nom de la classe parent, d’un tiret (`-`) puis des noms des classes enfants (sous-classes) séparées par des virgules.

- Des contraintes d’e`X`clusion et/ou de `T`otalité peuvent être placées entre les `/` et `\` ;
  exemple : `/XT\ Personne - Eleve, Prof`

- Le séparateur entre parents et enfants permet de spécifier un choix pour la génération du modèle relationnel :

  - `-` pour générer la relation parent et une relation par enfant ;
  - `< [champCodeType]` pour supprimer les relations enfants et en faire remonter les attributs vers celle du parent (`[champCodeType]` est facultatif) ;
  - `>` pour supprimer la relation parent (en cas de `T`otalité) et en faire descendre les attributs vers celles des enfants (requiert e`X`clusion).

## Définir les méthodes d’une classe (spécificités UML / OOP)

Les méthodes doivent être définies séparément et après la classe et ses attributs. Elles ne constituent pas des boîtes.

    classe(): méthode(param [type]) [type], ...

- Pour définir les méthodes d’une classe, indiquer le nom de la classe suivi de parenthèses (il peut y avoir plusieurs lignes pour une même classe).
- Un nom de méthode est suivi par la liste de paramètres entre parenthèses, et du type de la valeur retournée (entre crochet) le cas échéant.
- Par défaut, le type des paramètres est déduit de celui des attributs (si le paramètre porte le même nom) ou est chaîne de caractères.
- Par défaut, un constructeur prenant la valeur de chaque attribut en paramètre est automatiquement généré, à moins qu’un constructeur ne soit explicitement défini sous la forme d’une méthode sans nom ;
  exemple : `classe(): (attr, attr)`

- 
  - Aucun
  - Modèle Conceptuel
  - UML-Diagramme de domaine
  - UML-Diagramme des classes
  - UML-Interface de Programmation
  - Modèle Relationnel (Éducation Nationale)
  - Modèle Relationnel (Université)
  - Modèle Logique (tables)
  - Tables (base de données)
- 
  - SQL-MariaDB
  - SQL-PostgreSQL
  - SQL-Sqlite
  - Haxe
  - Java
  - PHP
  - Python

#

- 
- 