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 :

Parrainage d'un individu


Sujet :

Schéma

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Parrainage d'un individu
    Bonjour à tous,

    Je travaille sur une notion simple de parrainage et je ne suis pas sûr de la manière de modéliser un certain aspect…

    Voici mes règles de gestion:

    Un individu peut parrainer un ou plusieurs autre(s) individu(s)
    Un individu ne peut être parrainé que par un seul autre individu
    Un individu ne peut se parrainer lui même
    Un individu peut ne pas être parrainé

    j’ai écrit le MCD suivant:

    Individu –0,n– parrainer –0,1– Individu
    (difficile en mode texte de l’écrire mais c’est une relation réflexive)

    Ma question : Comment modéliser le fait qu’un individu ne peut se parrainer lui même ? mon MCD autorise ceci je pense…

    Merci pour vos remarques et propositions !

  2. #2
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    7 945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 7 945
    Points : 30 716
    Points
    30 716
    Billets dans le blog
    16
    Par défaut
    Bonjour Allabon,


    Vous pouvez faire votre miel du contenu du document de référence en matière de contraintes dans les MCD :

    afcet - Le formalisme de données Merise - Extensions du pouvoir d’expression - Journée d’étude organisée par le Groupe de Travail 135 « Conception des systèmes d’information » (Collège AFCET-GID) - Jeudi 15 novembre 1990, Paris.

    Extrait :


    Je ne sais pas si ce que je propose ci-dessous est correct (au moins ça attire l’attention, c’est toujours ça de pris ). Si JPhi33 passe par là, lui saura vous donner un avis vraiment pertinent.



    En tout cas, c’est au niveau SQL qu’il ne faudra pas se rater (R y faisant l’objet d’une une table, avec présence dans cette table d’une contrainte garantissant l’exclusion).
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  3. #3
    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 Précisions.
    [Edit]Nous somme recroisés, Fsmrel...[/Edit]

    Bonjour Allabon,

    Intéressant...

    Suggestion :



    donnant :
    Individu(IdIndividu, Nom, ...)
    Individu_IndividuParraine(#IdIndividu, #IdIndividuParraine, ...)
    ==> index unique sur IdIndividuParraine
    ==> trigger #IdIndividu <> #IdIndividuParraine
    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 !

  4. #4
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    7 945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 7 945
    Points : 30 716
    Points
    30 716
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par Richard_35 Voir le message
    Individu(IdIndividu, Nom, ...)
    Individu_IndividuParraine(#IdIndividu, #IdIndividuParraine, ...) ==> trigger #IdIndividu <> #IdIndividuParraine
    Vous modélisez une 0,N / 0,N...


    Quoi qu’il en soit, au niveau SQL on aura quelque chose ressemblant à ceci (noter la contrainte PARRAINAGE_EXCLUSION) :


    TABLE INDIVIDU
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE INDIVIDU (
       IndivId              Int                  NOT NULL,
       IndivNom             Varchar(64)          NOT NULL,
       CONSTRAINT INDIVIDU_PK PRIMARY KEY (IndivId)
    ) ;

    TABLE PARRAINAGE
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TABLE PARRAINAGE (
       IndivId              Int                  NOT NULL,
       ParrainId            Int                  NOT NULL,
       CONSTRAINT PARRAINAGE_PK PRIMARY KEY (IndivId),
       CONSTRAINT PARRAINAGE_EXCLUSION CHECK (IndivId <> ParrainId),
       CONSTRAINT PARRAINAGE_FK_1 FOREIGN KEY (IndivId)
          REFERENCES INDIVIDU,
       CONSTRAINT PARRAINAGE_FK_2 FOREIGN KEY (ParrainId)
          REFERENCES INDIVIDU
    ) ;

    Un bout de jeu d’essai :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    INSERT INTO INDIVIDU (IndivId, IndivNom) VALUES (1, 'Fernand') ;
    INSERT INTO INDIVIDU (IndivId, IndivNom) VALUES (2, 'Raoul') ;
    INSERT INTO INDIVIDU (IndivId, IndivNom) VALUES (3, 'Patricia') ;
     
    SELECT  '' AS INDIVIDU, * FROM INDIVIDU ;
     
    INSERT INTO PARRAINAGE (IndivId, ParrainId) VALUES (2, 2) ; -- Rejeté !
    INSERT INTO PARRAINAGE (IndivId, ParrainId) VALUES (3, 1) ; -- Accepté
     
    SELECT  '' AS PARRAINAGE, * FROM PARRAINAGE ;
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  5. #5
    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 Fsmrel
    Vous modélisez une 0,N / 0,N...
    ==> j'ai ajouté (après coup, il est vrai) :
    ==> index unique sur IdIndividuParraine
    qui devrait résoudre, en final, ce problème.
    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 !

  6. #6
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    7 945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 7 945
    Points : 30 716
    Points
    30 716
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par Richard_35 Voir le message
    ==> j'ai ajouté (après coup, il est vrai) :
    ==> index unique sur IdIndividuParraine
    qui devrait résoudre, en final, ce problème.
    Au plan de la modélisation, je persiste, vous représentez bien une 0,N / 0,N et un index ne résout rien ès matière : c'est de la plomberie, c'est du niveau physique, c'est hors du champ qui nous intéresse.

    La clé de la table PARRAINAGE est le singleton {IndivId}, la paire {IndivId, ParrainId} ne représente pas une clé candidate, seulement une surclé.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

Discussions similaires

  1. Mise à jours des points de parrainage un peu compliquée
    Par piere33 dans le forum Requêtes
    Réponses: 5
    Dernier message: 25/10/2006, 19h35
  2. Calcul de l'âge d'un individu
    Par vhunter dans le forum Langage
    Réponses: 8
    Dernier message: 22/02/2005, 19h02

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