Product Lifecycle Management -PLM- case study

  Copyright
Resources
Topics
Requirements

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.

Articles
Nomenclature de fabrication
Articles et nomenclature de fabrication ⤳ UML Class Diagram

Enterprise Architect

Postes de charge
Gammes de fabrication
Postes de charge et gammes de fabrication ⤳ UML Class Diagram

Enterprise Architect

Mouvements de stock et inventaire
Mouvements de stock et inventaire ⤳ UML Class Diagram

Enterprise Architect

OCL (Enterprise Architect) here

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()
  1. Design Manage -Package- Validate -Tools- Configure Validation RulesElement: (OCL) Conformance
  2. Design Manage -Package- Validate -Tools- Validate Current Package
SQL
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

  1. Display OCL constraints within compartments of constrained classes in diagrams
  2. OCL: si le lien machine d'une opération vers son poste de charge est non vide (cardinalité haute à 1) alors le lien main d'oeuvre est vide (cardinalité basse à 0)
  3. 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'attribut est machine du poste de charge est true
  4. SQL, question 2. avec CHECK
  5. 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 transformation (Enterprise Architect) here

Model-Driven Architecture -MDA-

Data Definition Language -DDL- built-in transformation here

Notation for Data engineering here

  1. Start Preferences -Appearance- Preferences… Code Editors -Source Code Engineering-Default Database: Oracle ⤳ set platform
  2. Design Transform -Package- Apply transformation… -Transform- ⤳ run transformation
  3. Check Generate Code on result and Write Always to get SQL generated source code

UML Class DiagramPlatform-Specific Model -PSM-

SQL code generation (Oracle) from Platform-Specific Model -PSM- (Oracle SQL script )

CREATE TABLE "Article"(
    "ArticleID" NUMBER(8,2) NOT NULL,
    "Reference" VARCHAR2(50) NULL,
    "Designation" VARCHAR2(50) NULL,
    -- autres propriétés ici...
);

CREATE TABLE "LienDeNomenclature"(
    "LienDeNomenclatureID" NUMBER(8,2) NOT NULL,
    "ArticleID" NUMBER(8,2) NULL -- QUELLE GROSSE ERREUR !
    "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");
Data engineeringDatabase Builder (Enterprise Architect) here

UML Class DiagramPlatform-Specific Model -PSM-*

*Crow's Foot notation

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

Data engineeringXML (Enterprise Architect) here

Exercise

Data engineeringXSLT (Enterprise Architect) here

Model creation ⤳ -drag & drop- files and next link to «xmlTransform»

Code

Execution