Au sujet de l'identification relative
Bonsoir,
Considérez le bordereau de saisie des commandes ci-dessous :
http://www.fsmwarden.com/developpez_...eau_saisie.png
Fin des années soixante-dix, avec Merise (1re génération) on modélisait les lignes de commande au moyen d’une association (Commander dans l’exemple) :
http://www.fsmwarden.com/developpez_...se)OldTime.jpg
Ou en appelant un chat, un chat :
http://www.fsmwarden.com/developpez_...dTime_Lcde.jpg
Sémantiquement parlant, la ligne de commande peut être néanmoins considérée non pas comme une association entre la commande et le produit, mais, à l’image de ce qu’on perçoit dans le bordereau de saisie, plutôt comme une propriété multivaluée de la commande : LigneCommande est une entité-type faible (weak entity-type) au sens de Chen, Codd et tutti. Avec Merise 2e génération, on a eu la possibilité d’utiliser l’identification relative pour implémenter cela. Avec PowerAMC :
http://www.fsmwarden.com/developpez_...rise)IdRel.png
Avec WinDesign (noter la dépendance fonctionnelle merisienne LigneCommande -> Commande) :
http://www.fsmwarden.com/developpez_...e)IdRel_WD.png
Les AGL transforment ainsi le MCD en MLD :
http://www.fsmwarden.com/developpez_...)IdRel_MLD.png
La clé de la table est la paire {CommandeId, NoLigne}. L’attribut CommandeId de la table LigneCommande est par construction hérité de l’attribut CommandeId de la table Commande. Par convention (mais ça n’est pas un impératif), pour une valeur C de l’attribut CommandeId de la table LigneCommande, si la commande C comporte Nc lignes de commande, l’attribut NoLigne est numéroté de 1 à N, ligne de commande par ligne de commande. Même principe pour chaque commande.
Mais attention, pour une commande et un produit donnés il n’y a qu’une quantité et un montant (ce qui est garanti quand la ligne de commande fait l’objet d’une association, comme dans les exemples ci-dessus faisant référence à Merise 1re génération). Il faut donc définir une contrainte sous forme de clé alternative {CommandeId, ProduitId} pour la table LigneCommande :
http://www.fsmwarden.com/developpez_...Rel_MLD_AK.png
Quoi qu’il en soit, Pour mettre en œuvre la numérotation des lignes de commande (attribut NoLigne), voyez le billet Trigger pour incrémentation relative proposé par CinePhil.