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) :
.png)
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) :

On peut avoir droit à quelques remarques :

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

Et comme dans la chanson, tout finit par s'arranger...
.png)
On a droit à un gros pâté qu'il restera à mettre en forme en déplaçant judicieusement les objets affichés :

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

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 :
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 :
CONSTRAINT COMMANDE_AK1 UNIQUE (CdeNo)
La clé alternative {CdeNo} est bien prise en compte (case « UQ » cochée) :

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

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

Saisie du nom du ficher au format XML :

Au résultat :

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.


