Bonsoir Keizone,
Associations SHARE_G, LIKE_G, RATE_G
Pour récapituler, le but est de savoir, non pas quels, mais combien d’invités ont partagé et/ou aimé et/ou voté pour un article.
Reprenons votre modélisation du 23/10/2013 (message #14). Je vous cite :
« le guest n'est pas membre et donc absent de la BDD »
Pourtant vous modélisez ainsi :
[GUEST{id_guest}]----0,N---- (SHARE_G {nb_share})----0,N----[ARTICLE{id_art}]
Alors en toute logique, au niveau de la base de données (disons SQL), la table GUEST ne peut contenir qu’une seule ligne. Si 15 invités ont partagé l’article 12, si 67 invités ont aimé cet article et si 24 invités ont partagé l’article 31, on aura la représentation tabulaire correspondante suivante (clés primaires soulignées) :
GUEST (id_guest) SHARE_G (id_guest, id_art, nb_share) ARTICLE (id_art)
1 1 12 15 12
1 1 31 24 31
LIKE_G (id_guest, id_art, nb_like)
1 12 67
L’entité-type GUEST n’est au fond qu’une constante, id_guest ne prendra jamais que la valeur 1 (ou tout autre nombre qui aura votre faveur). En fait, cette constante n’offre strictement aucun intérêt, au contraire : il faudra définir une contrainte de table pour garantir que la table ne contiendra qu'une ligne ; il faudra établir une contrainte référentielle entre les tables SHARE_G et GUEST, pour rien...
La conclusion s’impose : la table GUEST doit passer au fil du rasoir d’Ockham, et la représentation tabulaire devient :
SHARE_G (id_art, nb_share) ARTICLE (id_art)
12 15 12
31 24 31
LIKE_G (id_art, nb_like)
12 67
Structure qui est celle obtenue à partir des MCD/MLD que j’ai proposés dans les messages #15 et rappelés dans le message #20.
Passons à votre dernière représentation (message #21). La représentation tabulaire donne à peu près ceci :
GUEST (id_guest, nb_like, nb_share, nb_rate, val_rate) SHARE_G (id_guest, id_art) ARTICLE (id_art)
1 67 15 0 0 1 12 12
1 31 31
LIKE_G (id_guest, id_art)
1 12
Ainsi, on sait seulement qu’il y a eu au moins 15 (ou 24 après tout, ou encore 15+24) partages pour les articles 12 et 31, même principe pour les like...
=> Il n'est jamais mauvais d’illustrer et valider le travail de modélisation conceptuelle en cours au moyen d’une représentation tabulaire...
La question est, comment savoir qui l'a supprimé, ne dois-je pas associer USERS à l'entité sous-type ARTICLES_DELETED ?
Si vous procédez ainsi, vous autorisez à nouveau n’importe quel membre à supprimer (logiquement) les articles des autres. Comme vous avez précisé que seul l’auteur d’un article ou un modérateur est habilité à effectuer la suppression, vous pouvez établir une association du genre :
[ADMIN]----0,N----(R1)----0,1----[ARTICLE_SUPPRIMÉ]
Cas de l’association UPLOAD :
En l’état, n’importe quel membre peur ajouter une image à un article d’un autre membre. Cette association doit disparaître puisque seul l’auteur de l’article peut y ajouter une image.
Ils migreront ou je dois les mettre de suite dans ARTICLES au stade MCD ?
Ne dois je pas mettre dans l'association les attributs qui justifient la création de cette même association ?
Etant donné qu’au niveau du MLD le résultat sera le même, si vous préférez (comme moi) placer les attributs dans l’association, n’hésitez pas, quitte à faire tiquer certains merisiens.
La FAQ Merise prend position, mais sans argumenter, sans dire pourquoi ça serait peccamineux de faire porter des propriétés dans des associations-types binaires. Je cite par ailleurs l’ouvrage de référence de Dominique Nanci et Bernard Espinasse. Ingénierie des systèmes d’information Merise Deuxième génération. Sybex 1996. :
Toute relation binaire avec cardinalité 1,1 ne peut être porteuse de propriété. En effet, une telle propriété migre alors obligatoirement dans l’entité portant cette cardinalité 1,1.
Il s’agit là d’un raisonnement circulaire, un argument d’autorité qui ne prouve rien, propre à instaurer un dialogue de sourds à la Fernand Raynaud... Si je pose la question : « Pourquoi donc une telle association ne pourrait-elle être porteuse de propriétés ? » Réponse : « Parce que ces propriétés doivent migrer ! »
Partager