L’objet de l'étude de cas est de construire un système d’information et sa gestion des articles, nomenclature de fabrication, postes de charge, gammes de fabrication, mouvements de stock et inventaires d’une entreprise manufacturière.
L'application de type Create – Read - Update - Delete -CRUD- doit permettre de créer, lire, modifier et supprimer toutes les données du système d’information.
Enterprise Architect
Enterprise Architect
Enterprise Architect
Les articles de type « Pièce » et « Matière Première (« -MP- ») n'ont pas de gamme de fabrication.
context Article inv: self.oclIsTypeOf(Piece) implies self.gamme de fabrication->isEmpty() and self.oclIsTypeOf(MP) implies self.gamme de fabrication->isEmpty()
Design
⇝Manage -Package-
⇝Validate -Tools-
⇝Configure Validation Rules
⤳Element: (OCL) Conformance
Design
⇝Manage -Package-
⇝Validate -Tools-
⇝Validate Current Package
create table Article( reference varchar(30), designation varchar(30) not null, -- autres propriétés ici... constraint Article_pk primary key(reference), constraint Article_unique unique(designation), constraint Article_check check(PF_ou_MP_ou_Piece_ou_SE = 'PF' or PF_ou_MP_ou_Piece_ou_SE = 'MP' or PF_ou_MP_ou_Piece_ou_SE = 'Pi' or PF_ou_MP_ou_Piece_ou_SE = 'SE')); create table Lien_de_nomenclature( compose varchar(30), composant varchar(30), quantite_de_composition float not null, constraint Lien_de_nomenclature_pk primary key(compose,composant), constraint Lien_de_nomenclature_fk_1 foreign key(compose) references Article(reference) on delete cascade, constraint Lien_de_nomenclature_fk_2 foreign key(composant) references Article(reference) on delete cascade, constraint Lien_de_nomenclature_check check(compose <> composant));
Exercise
- Display OCL constraints within compartments of constrained classes in UML Class Diagram
- OCL: si le lien
machine
d'une opération vers son poste de charge est non vide (cardinalité haute à 1) alors le lienmain d'oeuvre
est vide (cardinalité basse à 0)- OCL: si le lien
machine
d'une opération vers son poste de charge est non vide (cardinalité haute à 1) alors la valeur de l'attributest machine
du poste de charge esttrue
- SQL, question 2. avec
CHECK
- SQL, question 3. avec
CHECK
-- Q4 -- Plus simple : un seul attribut ('machine' et 'main_d_oeuvre' fusionnent) clef étrangère vers la table 'Poste_de_charge' ? CONSTRAINT CHECK(machine IS NULL OR main_d_oeuvre IS NULL) -- Peu de RDBMS supportent…
-- Q5 -- Procédure stockée ?
Model-Driven Architecture -MDA-
- Computational-Independent Model -CIM-
- Platform-Independent Model -PIM-
- Platform-Specific Model -PSM-
Data Definition Language -DDL- built-in transformation ☛
Notation for Data engineering ☛
Develop
⇝Datatypes -Data Modeling-
⇝ (Oracle)Set as Default
⤳ set RDBMS platformStart
⇝Preferences -Appearance-
⇝Preferences…
⇝Code Editors -Source Code Engineering-
⤳ (Oracle)Default Database:
⤳ set RDBMS platformDesign
⇝Transform -Package-
⇝Apply transformation… -Transform-
⤳ run transformation- Note: checking
Generate Code on result
does not seem to enact the generation of SQL source code?UML Class Diagram ⤳ Platform-Specific Model -PSM-
SQL code generation (Oracle) from Platform-Specific Model -PSM- (Oracle SQL script )
Develop
⇝Generate -Data Modeling-
⤳ SQL code generationCREATE TABLE "Article"( "ArticleID" NUMBER(8,2) NOT NULL, "Reference" VARCHAR2(50) NULL, -- {id} UML constraint put aside... "Designation" VARCHAR2(50) NULL, -- autres propriétés ici... ); CREATE TABLE "LienDeNomenclature"( "LienDeNomenclatureID" NUMBER(8,2) NOT NULL, "ArticleID" NUMBER(8,2) NULL -- WHAT A BIG MISTAKE! "QuantiteDeComposition" FLOAT(126) NULL ); ALTER TABLE "Article" ADD CONSTRAINT "PK_Article" PRIMARY KEY ("ArticleID") USING INDEX; ALTER TABLE "LienDeNomenclature" ADD CONSTRAINT "PK_LienDeNomenclature" PRIMARY KEY ("LienDeNomenclatureID") USING INDEX; ALTER TABLE "LienDeNomenclature" ADD CONSTRAINT "FK_Lien de nomenclature_Article" FOREIGN KEY ("ArticleID") REFERENCES "Article" ("ArticleID");
Develop
⇝Database Builder -Data Modeling-
UML Class Diagram ⤳ Platform-Specific Model -PSM-*
CREATE TABLE "Article_DB"( "REFERENCE" VARCHAR(30) NOT NULL, "DESIGNATION" VARCHAR(30) NOT NULL, -- autres propriétés ici...); CREATE TABLE "Lien_de_nomenclature_DB"( "COMPOSE" VARCHAR(30) NOT NULL, "COMPOSANT" VARCHAR(30) NOT NULL, "QUANTITE_DE_COMPOSITION" FLOAT(10) NOT NULL); ALTER TABLE "Article_DB" ADD CONSTRAINT "ARTICLE_PK" PRIMARY KEY ("REFERENCE") USING INDEX; ALTER TABLE "Article_DB" ADD CONSTRAINT "ARTICLE_UNIQUE" UNIQUE ("DESIGNATION") USING INDEX; ALTER TABLE "Article_DB" ADD CONSTRAINT "ARTICLE_CHECK" CHECK (PF_ou_MP_ou_Piece_ou_SE = 'PF' or PF_ou_MP_ou_Piece_ou_SE = 'MP' or PF_ou_MP_ou_Piece_ou_SE = 'Pi' or PF_ou_MP_ou_Piece_ou_SE = 'SE'); ALTER TABLE "Lien_de_nomenclature_DB" ADD CONSTRAINT "LIEN_DE_NOMENCLATURE_PK" PRIMARY KEY ("COMPOSE","COMPOSANT") USING INDEX; ALTER TABLE "Lien_de_nomenclature_DB" ADD CONSTRAINT "LIEN_DE_NOMENCLATURE_CHECK" CHECK (COMPOSE <> COMPOSANT); ALTER TABLE "Lien_de_nomenclature_DB" ADD CONSTRAINT "LIEN_DE_NOMENCLATURE_FK_1" FOREIGN KEY ("COMPOSE") REFERENCES "Article_DB" ("REFERENCE"); ALTER TABLE "Lien_de_nomenclature_DB" ADD CONSTRAINT "LIEN_DE_NOMENCLATURE_FK_2" FOREIGN KEY ("COMPOSANT") REFERENCES "Article_DB" ("REFERENCE");
Exercise
- Provide SQL scheme for Barbados Crisis Management System -BCMS- case study (
Data
UML Class Diagram) by means of Data Definition Language -DDL- built-in transformation (MariaDB)
Develop
⇝Import XSD -Schema Modeling-
Original XSD PLM_1.xsd
<?xml version="1.0"?> <!-- Espace de nom 'xs' doit être utilise dans la def. du schema : --> <xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <!-- Type deporte pour element 'Lien_de_nomenclature' : --> <xs:complexType name="Type_lien_de_nomenclature"> <!-- Note that attributes have no order : --> <!-- DTD-like : --> <!-- <xs:attribute name="compose" type="xs:IDREF" use="required"/> --> <!-- <xs:attribute name="composant" type="xs:IDREF" use="required"/> --> <xs:attribute name="compose" type="xs:string" use="required"/> <xs:attribute name="composant" type="xs:string" use="required"/> <!-- Attention, certaines quantites de composition sont decimales ! => "xs:decimal" : --> <xs:attribute name="quantite_de_composition" type="xs:decimal" use="required"/> </xs:complexType> <xs:element name="PLM"> <xs:complexType> <!-- 'xs:all' si pas d'ordre : --> <xs:sequence> <!-- Au moins 1 voire plusieurs (1-N) '<Article ... />' ('minOccurs="1"' par defaut) : --> <xs:element name="Article" minOccurs="1" maxOccurs="unbounded"> <!-- Type *NON* deporte : --> <xs:complexType> <!-- DTD-like ('xs:ID' signifie "primary key") : --> <!-- <xs:attribute name="reference" type="xs:ID" use="required"/> --> <xs:attribute name="reference" type="xs:string" use="required"/> …
Exercise
- Add
Type_poste_de_charge
andType_operation
within XML Schema Definition -XSD- (XML Schema
perspective)
Add Diagram…
(package within browser) ⇝Extended
⇝XML Transform
Model
XSLT transformation code
XSLT transformation execution
XSLT transformation execution result
Validation