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 :

Modéliser CV et Candidat et Offre [MCD]


Sujet :

Schéma

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2008
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 119
    Points : 70
    Points
    70
    Par défaut Modéliser CV et Candidat et Offre
    bonjour tout le monde.
    j'ai un petit souci a modéliser une situation :
    j'ai 3 entite :
    CV et Candidat et Offre :
    *un candidat peut creer 0 ou plusieurs cv (max 3).
    *un candidat peut postuler a des différentes offre en utilisant un et un seule CV.
    *un candidat peut postuler une et une seule fois a une offre données.
    voila ce que j'ai pu faire
    http://www.adrive.com/public/f985702...6ca0bd75c.html

    dans l'association postule je dois avoir un attribut IdCv qui pressente le cv avec lequel le candidat a postule a cette offre
    merci de m'aider

  2. #2
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    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 : 8 002
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par switch1 Voir le message
    *un candidat peut postuler a des différentes offre en utilisant un et un seule CV.
    *un candidat peut postuler une et une seule fois a une offre données.
    Il y a quelque chose de contradictoire dans cette affaire : un candidat peut-il postuler à plusieurs offres ou bien à une seule ?

    Quoi qu’il en soit, dans les deux cas, si l’on accepte que les associations entre les offres et les candidats soient vues au travers des CV, alors on peut débrancher l’association entre Offre et Candidat et la brancher entre Offre et CV. En effet, comme chaque CV détermine un candidat, on sait retrouver les offres auxquelles celui-ci a répondu ou répondra.

    Exemple :
    [Offre]----0,N----(Postuler)----0,N----[CV]----1,1----(Créer)----0,N----[Candidat]
    Par définition, l’association-type Postuler est alors virtuellement porteuse de l’identifiant du CV.
    (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
    Membre régulier
    Inscrit en
    Juillet 2008
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 119
    Points : 70
    Points
    70
    Par défaut
    bonjour
    svp aidez moi
    j'ai fait des petites modification :
    une association postule entre candidat et offre de type n,n .alors d'après cela la règle un candidat postule a une offre une et une seule fois avec 1 seule CV et respecte.mais comme vous voyez j'ai ajouter manuellement un attribut idCV dans l'association postule qui présente l'id du cv avec lequel le candidat a postule a cette offre .comment je peux procédé pour que cette attribut sera clef étrangère???parce que idCv est une clef primaire de l'entité CV. si non si je relie l'entité CVa l'association postule,j'obtiens une association ternaire alors un candidat peut postuler a la même offre plusieurs fois en utilisant différent CV!
    merci de m'aider
    Images attachées Images attachées  

  4. #4
    Membre régulier
    Inscrit en
    Juillet 2008
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 119
    Points : 70
    Points
    70
    Par défaut
    merci de votre réponse fsmrel :
    Il y a quelque chose de contradictoire dans cette affaire : un candidat peut-il postuler à plusieurs offres ou bien à une seule ?
    en fait :
    *un candidat peut postuler a des différentes offres.pour chaque postulation il choisit un seule cv.
    offreA CV1 c'est ok
    offreB CV1 c'est ok
    offreC CV2 c'est ok
    *un candidat peut postuler une et une seule fois a une offre données.autrement il peut pas postuler plusieurs fois a la même offre
    offreA CV1 c'est ok
    offreA CV1 erreur( il a déjà postule a cette offre)
    offreA cv2 erreur (il a déjà postule a cette offre avec un cv différent plutôt il peut modifier les cv mais il peut pas postuler a la même offre plusieurs fois )

    Exemple :

    [Offre]----0,N----(Postuler)----0,N----[CV]----1,1----(Créer)----0,N----[Candidat]
    ici un cv peut etre utiliser pour postuler a la même offre plusieurs fois.
    ca ve dire que au niveau de l'association Postuler je peux avoir :
    (on suppose que CV1 et CV2 appartiennent au monsieur X)
    CV1 offreA c'est ok
    CV2 offreA erreur erreur!!! parce que dans les règles de gestion un candidat ne peux pas postuler a la même offre plusieurs fois
    merci de m'aider

  5. #5
    Membre régulier
    Inscrit en
    Juillet 2008
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 119
    Points : 70
    Points
    70
    Par défaut
    je croix que la seule façon pour obtenir l'idCV comme clef étrangère dans l'association postule c'est de relier l'association postule a l'entité CV.d'apres cela on obtient une association ternaire reliant CV CANDIDAT OFFRE.
    le souci ici c'est que puisque l'identifiant de l'association postule sera{idCv ,idCand,IdOffr} il est possible qu'un candidat postule a une offre plusieurs fois en utilisant des CV différents !
    alors j'ai pensé de retirer IdCv de l'identifiant de l'association au niveau MLD,de cette façon l'identifiant de l'association sera {idCand,idOffr}.
    si il faut pas faire ça ou bien si il ya d'autre façons pour réaliser cela merci de les poster.
    merci de votre aide
    Images attachées Images attachées  

  6. #6
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    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 : 8 002
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonjour,


    Je comprends mieux ce que vous vouliez dire.

    Votre dernier MLD peut laisser passer des erreurs. En effet, le problème est cette fois-ci, qu’un candidat peut postuler à une offre avec un CV appartenant à un autre candidat...

    Il faut donc que le couple (IdCand, IdCv) de votre table Postule fasse référence à son homologue de la table CV, ce qui revient à dire que ce couple doit être clé primaire de la table CV, donc qu’au niveau du MCD, l’entité-type CV y soit identifiée relativement à l’entité-type Candidat.

    Le MLD doit ressembler à ceci (j'ai un peu changé les noms et ôté les attributs non impliqués dans cette affaire) :


    D’où le code généré :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    create table Offre (   
       Oid                            Int                    not null,
       primary key (Oid)) ;
    
    create table Candidat (
       Cid                            Int                    not null,
       primary key (Cid)) ;
    
    create table CV (
       Cid                            Int                    not null,
       Vid                            Int                    not null,
       primary key (Cid, Vid)
    );
    
    create table Postuler
    (
       Oid                            Int                    not null,
       Cid                            Int                    not null,
       Vid                            Int                    not null,
       primary key (Oid, Cid)) ;
    
    alter table CV add constraint FK_Relation_1 foreign key (Cid)
          references Candidat (Cid) on delete cascade on update cascade;
    
    alter table Postuler add constraint FK_Relation_2 foreign key (Oid)
          references Offre (Oid) on delete cascade on update cascade;
    
    alter table Postuler add constraint FK_Relation_3 foreign key (Cid)
          references Candidat (Cid) on delete cascade on update cascade;
    
    alter table Postuler add constraint FK_Relation_4 foreign key (Cid, Vid)
          references CV (Cid, Vid) on delete cascade on update cascade;
    Ce MLD présente un cycle, mais sa résolution dépend du SGBD. A vous de voir lorsque vous implanterez le code.

    Le MCD doit ressembler à ceci, avec identification relative de CV relativement à Candidat :



    Mais une fois dérivé en MLD, il faudra modifier le lien entre les tables Postuler et CV. En effet, l’attribut CV_Cid (schéma ci-dessous) doit disparaître, au bénéfice de l’attribut Cid.

    Ce que génère Power AMC :


    MLD à aménager manuellement pour aboutir à celui que j'ai proposé ci-dessus : cliquer sur le lien entre Postuler et CV, puis cliquer sur l’onglet « Jointures », puis pour la « Colonne de la table parent » (qui vaut "Cid" dans mon exemple), remplacer "CV_Cid" par "Cid" pour la « Colonne de la table Enfant).
    Ensuite, supprimer la colonne CV_Cid dans la table Postuler. Et bien sûr, comme vous l’avez fait, interdire que Vid fasse partie de la clé primaire de Postuler.
    (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.

  7. #7
    Membre régulier
    Inscrit en
    Juillet 2008
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 119
    Points : 70
    Points
    70
    Par défaut
    merci fsmrel
    dsl mais j'ai pas compris la dernière étape
    MLD à aménager manuellement pour aboutir à celui que j'ai proposé ci-dessus : cliquer sur le lien entre Postuler et CV, puis cliquer sur l’onglet « Jointures », puis pour la « Colonne de la table parent » (qui vaut "Cid" dans mon exemple), remplacer "CV_Cid" par "Cid" pour la « Colonne de la table Enfant).
    Ensuite, supprimer la colonne CV_Cid dans la table Postuler. Et bien sûr, comme vous l’avez fait, interdire que Vid fasse partie de la clé primaire de Postuler.
    comme essai au niveau mld j'ai modifier :
    dans l'entité CV j'ai ajouter la clef étrangère l'idCand dans l'idenifiant de l'entite CV, automatiquement un attribut est ajoute dans l'association postule cv idcandidat(FK PK).
    après j'ai modifier idCV en lui retirant de l'identifiant de l'entité Postule.
    alors j'ai effectuer une insertion au niveau de la base de donnees
    Candidat : deux ligne ayant comme identifiant: 001 et et 002
    CV: deux ligne ayant comme identifiant: CV1/001 et CV2/002
    Offre: offre1 et offre2
    au niveau de l'entité Postule lorsque j'ai tenter d'insérer une ligne comme suit :
    idCand | idOffre | idCV | cv__idCand
    --001---offre1---CV2----001 ==> erreur puisque CV2 n'appartient pas a 001
    --001---offre1---Cv1---001 ==> oki
    --002---offre1---CV1---001===> ok !!!!!!!!!!!pouvez vous m'expliquez?
    bon en fin c'est pas grave puisque c'est moi qui va inserer
    merci de votre aide
    Images attachées Images attachées  

  8. #8
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    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 : 8 002
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonjour switch1,


    Citation Envoyé par switch1 Voir le message
    --001---offre1---Cv1---001 ==> oki
    --002---offre1---CV1---001===> ok !!!!!!!!!!!pouvez vous m'expliquez?
    Je peux vous expliquer. Dans mon précédent message, j’ai écrit que l’entité-type CV devait être identifiée relativement à l’entité-type Candidat. Cela veut dire que chaque candidat peut avoir plusieurs CV, numérotés relativement au candidat.
    Si la valeur de la clé primaire (table Candidat) du candidat Antoine est "c1", la valeur de la clé primaire de chacun de ses CV (table CV) est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    "c1, 1"    -- 1er candidat, son 1er CV
    "c1, 2"    -- 1er candidat, son 2e CV
    "c1, 3"    -- 1er candidat, son 3e CV
    Si la valeur de la clé primaire (table Candidat) du candidat Bernard est "c2", la valeur de la clé primaire de chacun de ses CV (table CV) est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    "c2, 1"    -- 2e candidat, son 1er CV
    "c2, 2"    -- 2e candidat, son 2e CV
    etc...
    J’ai procédé pour les candidats et les CV comme on procède pour les factures et les lignes de facture. Il s’agit de distinguer chaque CV d’un candidat comme on distingue chaque ligne de facture d’une facture, à l’aide d’une numérotation qui recommence à 1 pour chaque candidat (ou chaque facture, toutes choses égales par ailleurs).

    Maintenant, Observez le MLD que je vous ai proposé :


    Et comparez avec votre MLD :


    Vous voyez que nous n’avons pas la même clé primaire pour la table Postule. Dans mon MLD, elle est limitée à la paire {Oid, Cid}. Dans votre MCD, la clé primaire {IdOffre, IdCand, CV_IdCand} comporte un attribut de plus : CV_IdCand, ce qui revient à dire que l’on peut mélanger les candidats et les offres, faire postuler plus d’une fois le même candidat à la même offre (par exemple, avoir les valeurs de clés "o1, c1, c2", "o1, c1, c3", "o1, c1, c1", etc. Votre clé primaire est réductible à {IdOffre, IdCand}, c'est-à-dire que l’attribut CV_IdCand doit disparaître de la clé et même de la table, puisqu’il fait double emploi avec l’attribut IdCand. C’est pourquoi je réitère ma recommandation que vous dites n’avoir pas comprise. Le but est bien non seulement de supprimer l’attribut CV_IdCand, mais aussi de faire en sorte que la clé étrangère établissant un pont entre Postuler et CV soit correcte.

    Pour cela, je clique sur la flèche qui lie Postule et CV, et Power AMC ouvre une fenêtre :



    Je clique ensuite sur l’onglet « Jointures », d’où ouverture de la fenêtre :



    Dans la colonne « Colonne de la table enfant », il faut remplacer "CV_IdCand" par "IdCand". Je clique sur CV_IdCand :



    Et je procède au remplacement :



    Ça n’est seulement maintenant que je peux effectuer la dernière opération qui consiste à supprimer l’attribut CV_IdCand de la table Postule. Au résultat :

    (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.

  9. #9
    Membre régulier
    Inscrit en
    Juillet 2008
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 119
    Points : 70
    Points
    70
    Par défaut
    je vous remercie infiniment Monsieur fsmrel .

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

Discussions similaires

  1. Quels logiciels de modélisation pour une base de données ?
    Par octopus dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 11/06/2023, 16h20
  2. Les possibilité que C++ offre par rapport à Pascal Objet
    Par Riko dans le forum Langages de programmation
    Réponses: 13
    Dernier message: 01/02/2003, 21h38

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