Bonsoir,
Une remarque préliminaire :
Envoyé par
BLJ.CHAUVIN
...pour ce MCD j'ai une table 'PRODUITS'
Le concept de table relève de SQL. Le MCD (disons merisien) relève du niveau conceptuel, et le concept correspondant est l’entité-type (ou type d’entité, ou individu-type, ou type d’individu, selon les chapelles).
Votre phrase est à reformuler ainsi :
...pour ce MCD j'ai une entité-type PRODUIT.
Notez que PRODUIT n’est pas une valeur mais le nom d’une entité-type, donc on supprime les guillemets et autres apostrophes. En outre, le nom d’une entité-type s’écrit au singulier, car elle est l’abstraction d’une entité concrète telle que l’œuf mayonnaise ou le prince des mers en sa nage (la sardine à l’huile si vous préférez). Ceux qui ont théorisé sur Merise procèdent ainsi (Tardieu, Nanci, Tabourier, etc.)
Envoyé par
BLJ.CHAUVIN
Je voulais donc savoir si quelqu'un avait une idée (à part bidouiller les cardinalités pour que enlever les FK de ma table 'produits' ) ?
Prenons l’exemple des entités-types PRODUIT et PLAT :
Pour l’AGL, PRODUIT et PLAT sont des entités-types que vous mettez en relation, au même titre qu’on met en relation des fournisseurs et des produits. A chaque fois qu’il détecte une cardinalité maximum 1, l’AGL applique consciencieusement ce qui est écrit dans tous les ouvrages sur Merise : il génère une clé étrangère au niveau logique. Comme on a deux fois la situation, vous avez donc une clé étrangère de part et d’autre, ce qui graphiquement est représenté par un cycle au niveau MLD :
Pour éviter de bidouiller, vous avez plusieurs possibilités.
1re possibilité :
Utilisez la représentation Entité/Relation, ou mieux, un mix Merise et Entité/Relation :
Supprimez l’attribut Id_Plat de l’entité-type PLAT.
Établissez la relation entre les deux entités-types, après avoir cliqué sur l’icône Relation dans la barre des symboles d'objets.
Puis, dans la fenêtre Propriétés de la relation, onglet Détails, choisissez le rôle dominant PRODUIT -> PLAT, et cochez la case Dépendant (l’identifiant Id_Prod devient implicitement identifiant de l’entité-type PLAT).
Au niveau MCD, cela donne :
Au résultat, vous devez obtenir ceci lors de la dérivation du MCD en MLD :
En notant que Id_Prod participe à la fois à la clé primaire de la table PLAT et à la clé étrangère établie entre les deux tables. Le cycle a disparu, car l’AGL a compris que PRODUIT joue le rôle de dominant, que les deux entités-types ne sont pas sur un pied d’égalité.
2e possibilité :
Utilisez les liens d’héritage.
Considérons que l’entité-type PRODUIT est une généralisation des entités-types BOISSON, INGREDIENT, PLAT, VIN, c'est-à-dire qu’elle regroupe les propriétés communes à ces dernières (Lib_x, Def_x, Id_Parent_x, Id_Fils_x), lesquelles constituent des entités-types spécialisées (qu’on appelle encore sous-types) et conservent leurs attributs propres. Je vais supposer que Lib_Prod fait double emploi avec les libellés des entités-types spécialisées (sinon il faudra définir un attribut supplémentaire).
On pourra discuter de l’absence d’attributs spécifiques dans les entités-types autres que VIN (ça inspire la mise en oeuvre d'un attribut Type de Produit...)
Notez les options concernant les propriétés de l’héritage :
MLD correspondant :
3e possibilité :
Utilisation d'un type de produit et d'une d’une association-type réflexive, laquelle vous permet de réparer la faute que vous avez commise en ayant défini des attributs IdParent_x et Id_Fils_x, mais il se fait tard et l’on verra cela ultérieurement.
Partager