IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Schéma Discussion :

Entité pouvant être associée à une parmi plusieurs autres


Sujet :

Schéma

  1. #1
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut Entité pouvant être associée à une parmi plusieurs autres
    Bonjour.
    Pour une fois, c'est moi qui pose un problème !

    D'un côté, nous avons des utilisateurs :
    - de type "membre" qui peuvent déposer des infos et commenter les infos des autres membres.

    De l'autre côté, nous avons des utilisateurs :
    - de type "modérateur" qui peuvent entreprendre certaines actions sur les infos et les membres ;
    - de type "administrateur" qui peuvent faire les mêmes actions que les modérateurs et qui doivent valider certaines actions des modérateurs.

    Pour commencer, j'ai modélisé un héritage des utilisateurs, en considérant que puisque les administrateurs peuvent faire les mêmes actions que les modérateurs, les administrateurs sont des modérateurs avec plus de pouvoir :
    Administrateur -(1,1)----Etre----0,1- Modérateur -(1,1)----Etre----0,1- Utilisateur
    Membre -(1,1)----Etre----------------------------------------------------------------------|

    Ensuite, modélisons le premier côté du ring :
    Membre -0,n----Déposer-----------------------------------------------------------1,1- Info
    |-------------0,n----Poster----(1,1)- Commentaire -(1,1)----Concerner----0,n---|

    De l'autre côté du ring, nous souhaitons enregistrer les actions entreprises. Je peux commencer à modéliser de cette façon :
    Modérateur -0,n----Lancer-------1,1- Action -1,1----Typer----0,n- Type_action
    Administrateur -0,n----Valider----0,1----|

    Le problème est que l'action pouvant concerner soit un membre, soit une info, soit un commentaire, si j'associe l'entité Action aux trois autres entités Membre, Info et Commentaire, il faut faire trois associations en (0,1 - 0,n), ce qui multipliera les tables associatives :
    Action -0,1----Concerner----0,n- Membre
    |----------0,1----Concerner----0,n- Info
    |----------0,1----Concerner----0,n- Commentaire

    Je trouve ça lourd et je voudrais modéliser ça correctement pour n'avoir que la table issue de l'entité Action qui aurait cette structure :
    Action (act_id, act_id_type_action, act_id_objet, act_ref_objet, act_date, act_id_modérateur, act_validee)
    Avec act_id_objet qui serait une clé étrangère faisant référence à l'identifiant d'une table des objets modérables (Membre, Info, Commentaire, potentiellement d'autres plus tard) et act_ref_objet qui contiendrait l'identifiant du membre ou de l'info ou du commentaire (potentiellement d'autre chose plus tard) modéré. Autrement (et mal) dit, actref_objet serait une clé étrangère faisant référence à une parmi trois tables (potentiellement plus de 3). Le couple {act_id_objet, act_ref_objet} est en quelque sorte une méta-donnée sur ce qui est modéré par l'action.

    Comment modéliser ça correctement et le plus simplement côté implémentation ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  2. #2
    Membre chevronné
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2007
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2007
    Messages : 797
    Points : 2 060
    Points
    2 060
    Par défaut
    Bonjour Philippe,

    Une solution (approximative) consiste à généraliser Membre, Info et Commentaire en une entité "Objet_modérable" (ou toute autre dénomination qui conviendra). Ceci suppose que les identifiants de ces 3 entités aient même nature (même format, pour adopter un langage plus proche du MPD) :

    "Un Membre est un Objet_modérable"
    "Une Info est un Objet_modérable"
    "Un Commentaire est un Objet_modérable"

    [ Objet_modérable ]<===[ Membre ]
    [ Objet_modérable ]<===[ Info ]
    [ Objet_modérable ]<===[ Commentaire ]

    [ Action ]--1,1----( Concerne )----0,n->[ Objet_modérable ]


    Remarques.
    - La généralisation n'est possible qu'avec un certain à-peu-près sémantique : un Membre, ce n'est pas vraiment la même chose qu'une Info ou un Commentaire.
    - Le Commentaire est en réalité une association (entre Membre et Info). Là encore, généraliser une association et des entités en une entité, est périlleux sur le plan sémantique.

    C'est pourquoi je qualifie cette solution d'approximative.
    N'oubliez pas de consulter les Cours Merise et la F.A.Q. Merise
    _______________________________________________________

    Les Règles du Club Developpez.com
    Vous avez votre réponse ? Merci de cliquer sur

Discussions similaires

  1. Réponses: 0
    Dernier message: 12/05/2015, 14h00
  2. Réponses: 4
    Dernier message: 25/08/2014, 23h43
  3. associer 1 id à plusieurs autres id
    Par Overstone dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/04/2008, 15h42
  4. [XSD]noeud pouvant être de plusieurs types
    Par jesus144 dans le forum Valider
    Réponses: 2
    Dernier message: 12/04/2006, 14h03
  5. Réponses: 2
    Dernier message: 24/08/2005, 10h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo