Bonjour,
Je vous présente une modélisation pour assurer la facturation des bons de livraison. Mon inquiétude se situe sur l'entité calcul de la facture sachant que les règles de gestion sont les suivantes :
R1 - un bon de livraison peut comporter une ou plusieurs lignes ;
R2 - Les bons de livraison sont émis au cours du mois au fur et à mesure des expéditions ;
R3 - Les bons de livraisons du mois sont facturés en fin de mois (En principe dernier jour du mois) ;
R5 - Une facture comporte obligatoirement un bon de livraison, mais pour un client elle peut comprendre tous ceux émis dans la mois.
Pour la modélisation, j'ai utilisé PowerAMC version 15.1
Le MCD que j'ai construit est présenté ci-dessous (Entité / association)
J'aurais eu la possibilité d'utiliser une version (Entité / Relation) ce qui aurait conduit au même résultat mais en plus simple dans la modification du MPD.
La construction du MPD doit permettre de répondre aux règles ci-après :
- Ne pas créer des colonnes comportant le bonhomme NULL
- Éviter, dans la mesure du possible, de recourir à un trigger
- Une facture doit comporter obligatoirement un ou plusieurs bons de livraison
- Une livraison doit être facturée à la bonne entité
- Un bon de livraison ne doit pas être facturé plusieurs fois
- Un bon de livraison ne doit pas être attaché à une facture dont le n° n'existe pas
De mon MCD ci-dessus, j'ai obtenu le MPD brut
Après contrôle, j'ai remarqué que la clé entité était présente deux fois, je l'ai éliminé
Puis, pour contrôle qu'un bon n'était facturé qu'une fois, j'ai mis en place une clé alternative {ENTITE_PK, LIVR_PK}
Le MPD final est
Sa traduction en SQL sera
Est-il possible de me confirmer que la table SQL peut répondre à toutes les contraintes indiquées.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 create table CALCUL ( ENTITE_PK D_INDEX not null, LIVR_PK D_INDEX not null, FACT_PK D_INDEX not null, constraint PK_CALCUL primary key (ENTITE_PK, LIVR_PK, FACT_PK), constraint AK_AK_CALCUL unique (ENTITE_PK, LIVR_PK) ); alter table CALCUL add constraint FK_CALCUL_R1_LIVRAISO foreign key (ENTITE_PK, LIVR_PK) references LIVRAISON (ENTITE_PK, LIVR_PK); alter table CALCUL add constraint FK_CALCUL_R3_FACTURE foreign key (ENTITE_PK, FACT_PK) references FACTURE (ENTITE_PK, FACT_PK);
Merci également de m'indiquer les erreurs commises et les améliorations possibles.
Partager