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