Modéliser les données avec MySQL Workbench

Image non disponible


précédentsommairesuivant

9. Rétro-conception

9.1. Objet de la rétro-conception



La rétro-conception permet de produire un diagramme MWB à partir du code SQL (CREATE TABLE) ou encore — ce qui est propre à MySQL Workbench — produire un tel diagramme à partir d'un diagramme DBDesigner 4.

9.2. A partir du code SQL



Après avoir créé un modèle vierge (commande « File > New Model » cf. paragraphe 2.2.1), on importe le fichier contenant le code SQL utilisé pour la rétro-conception (le format .txt ou équivalent est parfait pour cela) :

Image non disponible
Figure 9.1 - Rétro-conception à partir du code SQL (CREATE TABLE)



Suite à l'ouverture de la fenêtre « Reverse Engineer SQL Script », en y cochant la case « Place imported objects on a diagram », on demande que les objets soient directement placés dans le diagramme. (On peut aussi se contenter de leur inscription au catalogue, et plus tard utiliser la commande « Model > Create Diagram from Catalog Objects » pour qu'ils apparaissent dans le diagramme) :

Image non disponible
Figure 9.2 - Rétro-conception, choix du fichier source



On peut avoir droit à quelques remarques :

Image non disponible
Figure 9.3 - Rétro-conception, détection des erreurs par MySQL Workbench



Une fois corrigées les erreurs, MySQL Workbench prend acte :

Image non disponible
Figure 9.4 - Rétro-conception, aucune erreur détectée



Et comme dans la chanson, tout finit par s'arranger...

Image non disponible
Figure 9.5 - Rétro-conception, c'est tout bon



On a droit à un gros pâté qu'il restera à mettre en forme en déplaçant judicieusement les objets affichés :

Image non disponible
Figure 9.6 - Rétro-conception, les tables importées



Suite aux déplacements judicieux, le diagramme prend forme :

Image non disponible
Figure 9.7 - Rétro-conception, fin



Il reste à remplacer certaines cardinalités minimales 1 par 0 si cela est nécessaire (par exemple, certains articles peuvent ne pas avoir été commandés).

Le code SQL source ayant servi pour la rétro-conception  :

 
Sélectionnez
CREATE TABLE CLIENT 
(
     CliId                INT                  NOT NULL
   , CliNom               VARCHAR(48)          NOT NULL
   , CliSiret             CHAR(14)             NOT NULL
  , CONSTRAINT CLIENT_PK PRIMARY KEY  (CliId)
  , CONSTRAINT CLIENT_AK1 UNIQUE (CliSiret)
) ;
CREATE TABLE ARTICLE 
(
     ArtId                INT                  NOT NULL
   , ArtNom               VARCHAR(48)          NOT NULL 
   , PrixHT               DECIMAL(16)          NOT NULL
 , CONSTRAINT ARTICLE_PK PRIMARY KEY (ArtId)
) ;
CREATE TABLE CAMION 
(
     CamionId             INT                  NOT NULL
   , CamImmat             VARCHAR(14)          NOT NULL
   , Camstatut            CHAR(2)              NOT NULL
 , CONSTRAINT CAMION_PK PRIMARY KEY (CamionId)
 , CONSTRAINT CAMION_AK1 UNIQUE (CamImmat)
) ;
CREATE TABLE COMMANDE 
(
     CliId                INT                  NOT NULL
   , CdeId                SMALLINT             NOT NULL
   , CdeNo                VARCHAR(12)          NOT NULL
   , CdeDate              CHAR(10)             NOT NULL
   , CdeStatut            CHAR(2)              NOT NULL
 , CONSTRAINT COMMANDE_PK PRIMARY KEY (CliId, CdeId)
 , CONSTRAINT COMMANDE_AK1 UNIQUE (CdeNo)
 , CONSTRAINT COMMANDE_CLIENT_FK FOREIGN KEY (CliId)
      REFERENCES CLIENT (CliId) ON DELETE CASCADE
) ;
CREATE TABLE LIGNECDE 
(
     CliId                INT                  NOT NULL
   , CdeId                SMALLINT             NOT NULL
   , LigneId              SMALLINT             NOT NULL
   , ArtId                INT                  NOT NULL
   , Quantite             INT                  NOT NULL
 , CONSTRAINT LIGNECDE_PK PRIMARY KEY (CliId, CdeId, LigneId)
 , CONSTRAINT LIGNECDE_CDE_FK FOREIGN KEY (CliId, CdeId)
      REFERENCES COMMANDE (CliId, CdeId) ON DELETE CASCADE
 , CONSTRAINT LIGNECDE_ART_FK FOREIGN KEY (ArtId)
      REFERENCES ARTICLE (ArtId)
) ;
CREATE TABLE ENGAGEMENT 
(
     CliId                INT                  NOT NULL
   , CdeId                SMALLINT             NOT NULL
   , LigneId              SMALLINT             NOT NULL
   , EngId                SMALLINT             NOT NULL
   , EngType              CHAR(2)              NOT NULL
   , EngDate              CHAR(10)             NOT NULL
   , Quantite             INT                  NOT NULL
, CONSTRAINT ENGAGEMENT_PK PRIMARY KEY (CliId, CdeId, LigneId, EngId)
, CONSTRAINT ENGAGEMENT_LIGNE_FK FOREIGN KEY (CliId, CdeId, LigneId)
      REFERENCES LIGNECDE (CliId, CdeId, LigneId) ON DELETE CASCADE
) ;
CREATE TABLE LIVRAISON 
(
     CliId                INT                  NOT NULL
   , CdeId                SMALLINT             NOT NULL
   , LigneId              SMALLINT             NOT NULL
   , EngId                SMALLINT             NOT NULL
   , LivrId               SMALLINT             NOT NULL
   , LivrDate             CHAR(10)             NOT NULL
   , LivrStatut           CHAR(2)              NOT NULL
   , Quantite             INT                  NOT NULL
   , CamionId             INT                  NOT NULL
   , CONSTRAINT LIVRAISON_PK PRIMARY KEY (CliId, CdeId, LigneId, EngId, LivrId)
   , CONSTRAINT LIVRAISON_ENG_FK FOREIGN KEY (CliId, CdeId, LigneId, EngId)
         REFERENCES ENGAGEMENT (CliId, CdeId, LigneId, EngId) ON DELETE CASCADE
   , CONSTRAINT LIVRAISON_CAMION_FK FOREIGN KEY (CamionId)
      REFERENCES CAMION (CamionId)
) ;			


L'outil a évidemment correctement interprété les clés étrangères, et il sait repérer les clés alternatives, par exemple la clé {CdeNo} figurant dans la contrainte COMMANDE_AK1 :

 
Sélectionnez

    CONSTRAINT COMMANDE_AK1 UNIQUE (CdeNo)			
			



La clé alternative {CdeNo} est bien prise en compte (case « UQ » cochée) :

Image non disponible
Figure 9.8 - Rétro-conception, clé alternative en place

9.3. A partir de DBDesigner 4



Modèle DBDesigner 4 à rétro-concevoir (la hiérarchie des fournisseurs est discutable, mais bon...) :

Image non disponible
Figure 9.9 - Rétro-conception, modèle DBDesigner 4 source



Faire : « File > New Model », puis « Import » et « Import DBDesigner4 Model » :

Image non disponible
Figure 9.10 - Rétro-conception, import d'un modèle DBDesigner 4



Saisie du nom du ficher au format XML :

Image non disponible
Figure 9.11 - Rétro-conception, import d'un modèle DBDesigner 4, nom du fichier XML



Au résultat :

Image non disponible
Figure 9.12 - Rétro-conception, modèle DBDesigner 4 converti



N.B. L'association réflexive portée par la table S peut être aménagée, comme dans le cas de la hiérarchie figurant au paragraphe 7.2.


précédentsommairesuivant

  

Copyright © 2014 - François de Sainte Marie. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.