Bonjour Arthur,
Votre effort d’énoncer les règles de gestion est méritoire et à signaler, car bien souvent les forumeurs n’ont pas le courage d'en faire autant.
Quelques petits conseils :
Pensez à numéroter ces règles, par exemple :
RG01 - Une commande possède un seul client.
RG02 - Un client peut posséder plusieurs commandes.
Etc.
Même si ça n’est pas toujours facile, essayez d’utiliser le verbe qui soit le plus pertinent pour établir le lien entre les objets. Par exemple :
RG01 - Une commande est passée par un seul client.
RG02 - Un client peut passer plusieurs commandes.
Mais il ne faut pas non plus s’acharner : si en manque d’inspiration vous modélisiez ainsi, à moins d’être plus royaliste que le roi, on ne saurait vous en tenir rigueur :
[CLIENT]----1,N----(COM_CLI)----1,1----[COMMANDE]
Quitte à passer pour un scripteur au style lourd, utilisez de préférence les termes « exactement » ou « un et un seul » pour exprimer les cardinalités 1-1, l’essentiel est de ne pas être ambigu :
Une commande est passée par exactement un client.
Ou
Une commande est passée par un et un seul client.
En procédant ainsi, on met plus facilement en évidence les éventuelles contradictions entre les énoncés des règles et leur traduction sous forme de cardinalités.
Ainsi, quand vous écrivez :
Un client peut passer plusieurs commandes.
Cela veut dire qu’un client peut ne pas avoir encore passé de commande, mais on se prend à douter, car la cardinalité correspondante dans votre MCD est 1,N signifiant qu’un client a passé au moins une commande...
Question 1
Qu’entendez-vous par « Une commande est archivée une seule fois » ? Je suppose qu’au stade de la base de données rendue opérationnelle, une opération d’archivage consiste d’abord à recopier la commande C dans [la table] HISTORIQUE puis à la supprimer de [la table] COMMANDE, mais s'il en est ainsi, qu’advient-il des lignes de commande ?
Question 2
Pourquoi la patte connectant l’entité-type COMMANDE et l’association Attribuer1 est-elle porteuse d’une cardinalité 0,1 ? Une commande a toujours un statut. Sinon c’est refiler la patate chaude aux requêtes SQL, qui devront interpréter cela comme « statut inconnu » et l’on s’embarque pour les terrae incognitae de la logique trivalente (voire quadrivalente si en plus de la non valeur « inconnu » il faut aussi traiter de la non valeur « sans objet »), terrain glissant s’il en est. Je ne dis pas que 0,1 est interdit dans le cas général, mais alors au niveau tabulaire on doit procéder comme si on avait modélisé ainsi au stade MCD :
STATUT]----0,N----( )----1,1----[COMMANDE_A_STATUT]----1,1----( )----0,1----[COMMANDE]
Où, pour paraphraser Open ModelSphere, 1,1 signifie que COMMANDE_A_STATUT a pour identifiant celui de COMMANDE, il en hérite (possibilité non prévue par AnalyseSI, trop fruste).
Ce qui vaut pour COMMANDE vaut bien sûr pour LIGNE_COMMANDE.
Question 3
Pourquoi la patte connectant l’entité-type ARTICLE et l’association CONCERNE est-elle porteuse d’une cardinalité 1,1 ? Si vous vendez la Tour Eiffel ou Le Louvre, d’accord, sinon s’il s’agit de l’article « Arthur, sa vie son œuvre » ayant fait l’objet d’un million de lignes de commande, alors vous aurez un million de fois cet article dans [la table] ARTICLE, bijection oblige. En l’occurrence un article est une instance (Quantite = 1) alors qu’en général la cardinalité en cause est 0,N ce qui signifie donc qu’on ne s’intéresse pas à une instance en particulier mais à un nombre N d’instances connu grâce à l'attribut Quantite.
Question 4
Pourquoi la patte connectant COMMANDE et TEMP_COMMANDE_OUTIL_EXT (à vos souhaits !) est-elle porteuse d’une cardinalité 1,N ? Vous n’en dites pas assez...
Partager