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 :

Correction d'un modèle [MCD]


Sujet :

Schéma

  1. #1
    Membre régulier
    Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 101
    Points : 80
    Points
    80
    Par défaut Correction d'un modèle
    Bonjour à toutes et à tous.
    J'ai modélisé les données de mon club de vélo, mais je ne suis pas satisfait de ce que j'ai fait concernant les licenciés.
    Voici un extrait du cahier des charges :
    les membres du club se répartissent entre
    - anciens membres "am",
    - adhérents non licenciés "nl" (cotisation club seule),
    - adhérents licenciés à une ou plusieurs fédérations "l" (cotisation club + cotisations et assurances fédération)

    Ce qui donne les relations suivantes :
    - un membre peut ne pas être licencié ou posséder une à 4 licences.
    - une fédération peut ne comporter, dans le club, aucun licencié ou n licenciés.

    J'ai deux tables de références :
    - une table "état" avec 3 attributs "am", "nl", adhérent "l"
    - une table fédération avec 4 attributs FFCT, FFC, FFGT, et UFOLEP

    J'ai deux tables d'entités :
    - une table adherent avec toutes sortes de données dont une clé étrangère sur la table "état".
    - une table de jointure pour récupérer toutes les licences que possède un adhérent.

    Bien que tout fonctionne comme je le souhaite, je ne suis pas sûr de satisfaire à toutes les règles de conception d'une base de données.
    Si vous pouviez consacrer un peu de votre temps à me conseiller et me critiquer, je vous en serai reconnaissant. Si je me suis mal exprimé, n'hésitez pas à me tancer.
    Merci d'avance, Michel.

  2. #2
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut Lien JMerise.
    Bonjour Miflon,

    Citation Envoyé par Miflon
    je ne suis pas sûr de satisfaire à toutes les règles de conception d'une base de données.
    ==> le mieux est de se servir d'un logiciel de modélisation : JMerise, par exemple, est gratuit et très intuitif.

    Citation Envoyé par Miflon
    J'ai deux tables de références :
    - une table "état" avec 3 attributs "am", "nl", adhérent "l"
    - une table fédération avec 4 attributs FFCT, FFC, FFGT, et UFOLEP
    ==> je pense que, par "attributs", tu veux dire "enregistrements". Dans une table, "attribut" (ou "propriété") est un "champ". "enregistrements" => contenu de la table.

    Quoiqu'il en soit, d'après ce que j'ai compris, le MCD serait celui-ci :



    donnant :
    Etat(IdEtat, LibelleEtat, ...)
    Federation(IdFederation , LibelleFederation, ...)
    Adherent(IdAdherent, NomAdherent, #IdEtat, ...)
    Adherent_Federation(#IdAdherent, #IdFederation, ...)
    Images attachées Images attachées  
    Dis-nous et à bientôt,
    Richard.
    ----------------------------------------------------------------------------------------------
    En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
    et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !

  3. #3
    Membre régulier
    Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 101
    Points : 80
    Points
    80
    Par défaut
    Donc dans l'attribut "code" de la table "etat" j'ai trois valeurs "am", "nl", "l".
    Est-ce que JMerise a plus de fonctionnalités que Open ModelSphere et s'installe sur W-XP?
    Le MCD correspond tout à fait à ce que j'ai fait. Je l'ai fait avec Open ModelSphere.
    La relation "appartenir" devenant une table avec deux clés étrangères pointant sur les tables adherent et federation et des attributs numerolicence, datelicence.
    Je me posais la question de savoir si la table "etat", qui contient les renseignement "adherent non licencié" et "ancien adherent" qui correspondent à non licencié, ne duplique pas le renseignement non licencié qui ressortirait de l'interrogation de la table "appartenir"?
    J'ai du mal à m'expliquer car je ne maîtrise pas le vocabulaire des SGBD.

  4. #4
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Citation Envoyé par Miflon
    Donc dans l'attribut "code" de la table "etat" j'ai trois valeurs "am", "nl", "l".
    ==> hum... contenu de la table :
    Etat(IdEtat, Code, ...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    IdEtat  Code
    1       am
    2       nl
    3       l
    ...
    Citation Envoyé par Miflon
    Est-ce que JMerise a plus de fonctionnalités que Open ModelSphere
    ==> je ne connais pas Open ModelSphere.
    Citation Envoyé par Miflon
    et s'installe sur W-XP?
    ==> oui : voir les instructions d'installation.

    Citation Envoyé par Miflon
    Je me posais la question de savoir si la table "etat", qui contient les renseignement "adherent non licencié" et "ancien adherent" qui correspondent à non licencié, ne duplique pas le renseignement non licencié qui ressortirait de l'interrogation de la table "appartenir"?
    ==> actuellement, il n'y a aucune corrélation entre Etat et Federation (ce qui est, peut-être, un tort).

    Mais cette question révèle, sans aucun doute doute, une mise en cause du MCD. Ne devrait-il pas être celui-ci :



    avec :
    • anciens membres ==> pas de couple adhérent/fédération existant ;
    • adhérents non licenciés (cotisation club seule) ==> flag CotisationClub ? ;
    • adhérents licenciés à une ou plusieurs fédérations ==> couple(s) adhérent/fédération existant(s).
    Images attachées Images attachées  
    Dis-nous et à bientôt,
    Richard.
    ----------------------------------------------------------------------------------------------
    En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
    et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !

  5. #5
    Membre régulier
    Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 101
    Points : 80
    Points
    80
    Par défaut
    Un flag, c'est un booléen, placé dans la table "adherent"?
    A ce moment là, flag = NULL -> ancien membre
    flag = false -> adhérent non licencié
    flag = true -> adhérent licencié.
    J'avais envisagé de regrouper les deux tables "etat" et "federation" de manière à obtenir une table "qualite":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    qlt_id      qlt_code 
      1          am
      2          nl
      3          FFCT
      4          FFC
      5          UFOLEP
      6          FSGT
    Comment choisir entre les deux solutions. Il y a entre 150 et 200 membres au club.
    À Richard_35, merci de l'intérêt que tu portes à mon problème.

  6. #6
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Miflon,

    Citation Envoyé par Miflon
    Un flag, c'est un booléen, placé dans la table "adherent"?
    ==> oui.
    Citation Envoyé par Miflon
    A ce moment là, flag = NULL -> ancien membre
    flag = false -> adhérent non licencié
    flag = true -> adhérent licencié.
    ==> non, surtout pas.

    D'après tes règles de gestion, j'avais compris que, soit un adhérent possède une licence fédération, soit il possède une licence club, mais pas les deux. Si c'est bien le cas, ce MCD (simple, non satisfaisant) pourrait convenir :



    donnant :
    Adherent(IdAdherent, NomAdherent, LicenceInterne_O/N, ...)
    Federation(IdFederation, LibelleFederation, ...)
    Adherent_Federation(#IdAdherent, #IdFederation, NumLicence, DateLicence, ...)

    avec :
    • anciens membres ==> pas d'enregistrement dans Adherent_Federation ;
    • adhérents non licenciés (cotisation club seule) ==> enregistrement dans Adherent avec LicenceInterne_O/N=Vrai ;
    • adhérents licenciés à une ou plusieurs fédérations ==> enregistrement(s) existant(s) dans Adherent_Federation.



    Autre suggestion (mieux, sans le flag) :



    donnant :
    Adherent(IdAdherent, NomAdherent, ...)
    Federation(IdFederation, LibelleFederation, ...)
    Adherent_Federation(#IdAdherent, #IdFederation, NumLicence, DateLicence, ...)
    LicenceClub(IdLicenceClub, ...)
    Adherent_LicenceClub(#IdAdherent, #IdLicenceClub, ...)
    Avec la contrainte décrite précédemment symbolisée par "X".
    Images attachées Images attachées  
    Dis-nous et à bientôt,
    Richard.
    ----------------------------------------------------------------------------------------------
    En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
    et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !

  7. #7
    Membre régulier
    Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 101
    Points : 80
    Points
    80
    Par défaut
    Bonjour à Richard_35 et à tout le monde.
    Je reprends les règles de gestion de mon premier message :
    - anciens membres "am",
    - adhérents non licenciés "nl" (cotisation club seule),
    - adhérents licenciés à une ou plusieurs fédérations "l" (cotisation club + cotisations et assurances fédération).
    Les membres du club ont donc tous une cotisation club.Certains membres sont de plus affiliés à une ou plusieurs fédérations.
    La présence des anciens membres dans la base de données n'est là que pour m'éviter d'avoir à saisir à nouveau des données en cas de retour au club (maladie, déménagement, ...) l'année suivante, ou plusieurs années après (guérison, retour au pays...). Là je dois être en infraction avec les règles de la CNIL, qui demande de supprimer les données d'un adhérent qui quitte le club.
    Je pense que tout se simplifie si effectivement il n'y a plus de données concernant les anciens adhérents. Un membre du club a obligatoirement payé sa cotisation. S'il est licencié à une ou plusieurs fédérations, son identifiant est présent dans Adherent_Federation.
    Ce qui me gène un peu c'est que pour avoir la liste des adhérents seuls il va falloir balayer autant de fois que d'adhérents la table Adherent_Federation pour voir qu'il n'y est pas. Est-ce pénalisant en terme de rapidité avec au minimum 150 membres?
    Pour éviter une redondance de données, il serait peut-être possible de faire figurer les adhérents non détenteur d'une licence de fédération dans la table Adherent_Federation avec un IdFederation à NULL. Mais là, il faudrait les regrouper en tête de la table, ce qui n'a aucun sens dans un SGBD.
    Je ne vois pas bien ce que représente ce X et comment le faire intervenir s'il n'y a plus de flag.
    Licencié ne serait-il pas héritier d'adhérent? En quoi cela influera sur le MCD?
    Toutes les questions que je me pose proviennent du fait que j'apprends en même temps que je fais.
    Merci de votre attention.

  8. #8
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Citation Envoyé par Miflon
    Les membres du club ont donc tous une cotisation club.Certains membres sont de plus affiliés à une ou plusieurs fédérations.
    ==> cette règle n'était pas énoncée (ou pas claire, de mon point de vue) dans tes premiers messages. Dans ce cas, ce MCD suffit :



    donnant :
    Adherent(IdAdherent, NomAdherent, LicenceInterne_O/N, ...)
    Federation(IdFederation, LibelleFederation, ...)
    Adherent_Federation(#IdAdherent, #IdFederation, NumLicence, DateLicence, ...)
    Tu n'as pas besoin de gérer un "état" des membres : il est déduit de la présence (ou non) dans Adherent_Federation :
    • "am" : anciens membres ==> pas d'enregistrement dans Adherent_Federation (les anciens membres existent dans Adherent avec LicenceInterne_O/N=N et n'existent pas dans Adherent_Federation) ;
    • "nl" : adhérents non licenciés (cotisation club seule) ==> enregistrement dans Adherent (les adhérents non licenciés existent dans Adherent avec LicenceInterne_O/N=O et n'existent pas dans Adherent_Federation);
    • "l" : adhérents licenciés à une ou plusieurs fédérations ==> enregistrement(s) existant(s) dans Adherent_Federation (les adhérents licenciés à une ou plusieurs fédérations existent dans Adherent avec LicenceInterne_O/N=O et existent dans Adherent_Federation).


    Citation Envoyé par Miflon
    Ce qui me gène un peu c'est que pour avoir la liste des adhérents seuls il va falloir balayer autant de fois que d'adhérents la table Adherent_Federation pour voir qu'il n'y est pas.
    ==> non : il faut une requête extrayant les enregistrements de Adherent non existant dans Adherent_Federation.

    Citation Envoyé par Miflon
    Pour éviter une redondance de données, il serait peut-être possible de faire figurer les adhérents non détenteur d'une licence de fédération dans la table Adherent_Federation avec un IdFederation à NULL.
    ==> surtout pas : éviter le bonhomme NULL !
    Dis-nous et à bientôt,
    Richard.
    ----------------------------------------------------------------------------------------------
    En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
    et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !

  9. #9
    Membre régulier
    Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 101
    Points : 80
    Points
    80
    Par défaut
    Je crois que je vais en rester là. Tes commentaires m'ont été précieux pour y voir plus clair. Et la dernière modélisation me convient. Il ne me reste qu'à déterminer les requêtes qui vont bien pour obtenir les renseignements souhaités.
    Merci de ton aide.
    Michel.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/12/2011, 11h16
  2. Réponses: 3
    Dernier message: 25/02/2011, 23h55
  3. Modèle correcte pour une architecture client-adresse-ville
    Par As2piK dans le forum Diagrammes de Classes
    Réponses: 2
    Dernier message: 03/10/2010, 01h32
  4. [MCD] Mon modèle de réservation de chambres est-il correct?
    Par aurelius91 dans le forum Schéma
    Réponses: 12
    Dernier message: 27/04/2009, 20h24
  5. Réponses: 7
    Dernier message: 10/07/2008, 21h01

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