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 :

Employé


Sujet :

Schéma

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 30
    Points : 22
    Points
    22
    Par défaut Employé
    Bonjour tout le monde,
    je suis un débutant dans le domaine de conception des S.I et j’espère avoir vos avis concernant ce MCD que j'ai réalisé.

    voila ce qui est demandé :
    on veut avoir des informations sur un employé à partir d'une base de données.

    exemples des informations personnelles :
    nom, prénom, date de naissance,
    CIN(numéro carte d'identité), adresse postale, email, téléphone,
    nom du ou des conjoints (polygamie possible- informations sur femme 1, femme 2...),
    informations sur les enfants s'il y'en a...
    exemples des informations professionnelles :
    date de recrutement,
    grade - et la date d'obtention de ce grade,
    fonction - date d'obtention,
    affectation actuelle - et sa date d'obtention,
    échelle - et sa date d'obtention,
    échelon - et sa date d'obtention,
    position - date d'obtention,
    diplômes et formations...
    et voila mon mcd :


  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 966
    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 966
    Points : 30 778
    Points
    30 778
    Billets dans le blog
    16
    Par défaut
    Bonsoir minosys,


    Prenons le cas de la situation administrative :




    Il est d’usage de remplacer l’association quinquénaire (5 pattes) AVOIR par quatre binaires, comme le recommande Y. Tabourier (De l'autre côté de Merise, page 88), je cite :

    « Manque d’intérêt des cardinalités maximum à 1 pour les relations à plus de deux pattes ».

    Pour ma part, la quinquénaire ne me dérange pas, puisque lors de la partie importante qui consiste à produire le MLD (modèle logique des données), un AGL normalement constitué produit les tables suivantes (cas de DB-Main) :



    A ceci près que les tables AGENT et AVOIR peuvent ne faire qu’une. En revanche, vous utilisez PowerAMC, lequel malheureusement procède comme si, dans le MCD, la patte connectant l’entité-type AGENT et l’association AVOIR était porteuse d’une cardinalité 1,N (en fait 0,N), c'est-à-dire que la clé primaire de la table AVOIR qui — comme dans le MLD produit par DB-Main — doit être le singleton {AgentId}, devient à tort le quintuplet {AgentId, IdFonction, IdAffectation, IdPosition, IdGrade}.

    Par ailleurs, l’identifiant de l’entité-type AGENT doit être non significatif, je cite une fois de plus Yves Tabourier : (De l’autre côté de MERISE, page 80), et c’est un e règle d’or malheureusement trop souvent méconnue :

    « ... la fonction d’une propriété est de décrire les objets (et les rencontres), alors que l’identifiant ne décrit rien. Son rôle fondamental est d’être sûr de distinguer deux jumeaux parfaits, malgré des descriptions identiques.
    L’expérience montre d’ailleurs que l’usage des “identifiants significatifs” (ou “codes significatifs”) a pu provoquer des dégâts tellement coûteux que la sagesse est d’éviter avec le plus grand soin de construire des identifiants décrivant les objets ou, pis encore, leurs liens avec d’autres objets... »

    Et ce qu’a écrit Y. Tabourier, je l’ai souvent constaté, c'est-à-dire que j’ai vu des applications devant être réécrites car prises dans le béton avec ce genre d’affaire...

    Le CIN des personnes est significatif, il doit donc être défini seulement en tant qu’identifiant alternatif, permettant ainsi aux utilisateurs d’accéder aux données des agents, alors que l’identifiant doit leur être caché.


    Concernant la date portée par l’association AVOIR :

    Hum... Selon votre MCD, la date d’affectation d’un agent doit être égale à celle à laquelle il a été nommé à son grade, ainsi qu’à la date à laquelle il a pris sa fonction et la date à laquelle il a eu sa position. Ceci est pour le moins étonnant, ce qui justifie cette fois-ci l’éclatement de la quinquénaire en quatre binaires. j'observe que vous vous intéressez à la date depuis laquelle l'agent a été affecté, etc., mais que vous ne gérez pas son passé (l'historique de ses affectations et autres), néanmoins ça n'est qu'une remarque de ma part.


    Notez que les identifiants sont plutôt du type ENTIER (INTEGER) que CARACTÈRE (CHARACTER).


    J'examinerai le reste plus tard.
    (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 à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    je tiens d'abord a vous remercier énormément pour votre temps et effort .


    Le CIN des personnes est significatif, il doit donc être défini seulement en tant qu’identifiant alternatif, permettant ainsi aux utilisateurs d’accéder aux données des agents, alors que l’identifiant doit leur être caché.
    je pense que CIN est effectivement un identifiant alternatif puisque l'entité Agent hérite de Personne son identifiant primaire (idPersonne), ai je tort ?



    Concernant la date portée par l’association AVOIR :

    Hum... Selon votre MCD, la date d’affectation d’un agent doit être égale à celle à laquelle il a été nommé à son grade, ainsi qu’à la date à laquelle il a pris sa fonction et la date à laquelle il a eu sa position. Ceci est pour le moins étonnant, ce qui justifie cette fois-ci l’éclatement de la quinquénaire en quatre binaires. j'observe que vous vous intéressez à la date depuis laquelle l'agent a été affecté, etc., mais que vous ne gérez pas son passé (l'historique de ses affectations et autres), néanmoins ça n'est qu'une remarque de ma part.
    Vous avez raison ,c'était mon intention dès le départ j'ai corrigé et voila le résultat :
    Nom : 22e0cc.png
Affichages : 2440
Taille : 33,6 Ko

    Notez que les identifiants sont plutôt du type ENTIER (INTEGER) que CARACTÈRE (CHARACTER).
    c'est ce que je pensais moi aussi jusqu'à ce qu'un prof nous a dis qu'il vaut mieux de les faire CARACTERE pour utilisation postérieure dans VisualStudio(dataset,binding etc.)
    Images attachées Images attachées  

  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 966
    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 966
    Points : 30 778
    Points
    30 778
    Billets dans le blog
    16
    Par défaut
    Bonsoir minosys,


    Citation Envoyé par minosys
    je pense que CIN est effectivement un identifiant alternatif puisque l'entité Agent hérite de Personne son identifiant primaire (idPersonne), ai je tort ?
    Vous n’avez pas tort du tout ! Simplement, la recommandation faite par Yves Tabourier vaut évidemment à nouveau pour l’identifiant de l’entité-type PERSONNE, « toutes choses égales » comme dit l’autre.

    Pour définir une clé alternative, voyez le message où je traite de la chose.



    Citation Envoyé par minosys
    un prof nous a dit qu'il vaut mieux de les faire CARACTERE pour utilisation postérieure dans VisualStudio(dataset,binding etc.)
    On aura tout vu. Je préfère ne pas commenter...



    A propos des données temporelles

    Manifestement vous prenez en compte le suivi dans le temps des affectations, grades, etc., c’est bien. Un petit bémol quand même... Supposons que l’agent A1 ait eu l’affectation F1 à la date D1, puis l’affectation F2 à la date D2, tout va bien. Mais si à la date D3 on l’affecte à nouveau à F1, soit les règles de l’entreprise disent que ça n’est pas possible, tout va bien une fois de plus. Par contre, si les règles de l’entreprise disent que c’est possible, attention : on aura bien le triplet <A1, F1, D3>, mais on perdra la trace du triplet <A1, F1, D1> puisqu'il aura été remplacé, c'est-à-dire qu’on ne peut pas mettre en œuvre un suivi, un historique des affectations, à moins de faire participer la date à l’identification, voyez à ce sujet la discussion avec wafwafi : dans le contexte de Merise, on est amené à déguiser la date en entité-type (hélas !), car Merise interdit que les attributs (date dans votre cas) d’une association participent à l’identification de celle-ci, interdiction parfaitement absurde et qui, depuis la naissance de Merise, est source de problème qui ne devraient pas exister. PowerAMC est conforme au diktat, mais un AGL comme DB-MAIN n’en tient heureusement aucun compte, voyez un peu plus loin dans la même discussion.

    Plus important : selon votre MCD, rien n’interdit qu’à une date donnée un agent ait deux affectations : si c’est autorisé, tout va bien. Par contre qu’il puisse avoir deux grades simultanément, cela m’étonnerait fort... Vous êtes alors confronté au problème de la modélisation de la contrainte interdisant cette situation, ce dont je traite avec les histoires de jockeys qui monteraient deux chevaux dans la même course...

    En passant : si une réponse a pu vous apporter quelque chose, n'hésitez pas à voter...
    (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 éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    7 966
    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 966
    Points : 30 778
    Points
    30 778
    Billets dans le blog
    16
    Par défaut
    Je vais regarder la partie « situation familiale ».

    A propos des diplômes : l’entité-type DIPLOME est forte, c'est-à-dire autonome, et l’association DISPOSER est là pour brancher un agent sur les diplômes qu’il a obtenus. Dans ces conditions, l’attribut anneeDelivrance ne concernerait-il pas un tantinet l’agent qui a obtenu un (ou plusieurs) diplômes ? Pourquoi la cardinalité portée par la patte connectant DIPLOME et DISPOSER est-elle 1,N ? 0,N ne suffit pas ?

    Mêmes remarques en ce qui concerne les formations.
    (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.

  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 966
    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 966
    Points : 30 778
    Points
    30 778
    Billets dans le blog
    16
    Par défaut
    Examinons la partie « situation familiale » de votre MCD :






    On peut y observer que chaque personne doit participer au moins une fois à l’association SeMarier_H et au moins une fois à l’association SeMarier_F, ce qui est excessif (surtout pour les enfants)... Autrement dit, les cardinalités 1,N concernées sont au minimum à remplacer par 0,N. Par ailleurs, si une personne participe à l’association SeMarier_H, elle ne peut pas participer à l’association SeMarier_F, et pour des raisons de symétrie, si une personne participe à l’association SeMarier_F, elle ne peut donc pas participer à l’association SeMarier_H (à moins d’être hermaphrodite, mais on va admettre que tel n’est pas le cas...) Disons qu’il y a une contrainte d’exclusion à mettre en place entre les associations SeMarier_H et SeMarier_F, symbolisée ci-dessous (en rouge) par référence à la définition Afcet (ajout à la main, avec PAINT...) :




    A ce propos, voici ce que dit la « norme » (journée Afcet du 15 novembre 1990) :




    Le problème est qu’avec Power AMC, vous ne pouvez pas définir cette contrainte , alors que c’est possible avec WinDesign . Au stade SQL, cette contrainte devra faire l’objet d’une assertion, en fait d’un trigger dans l’état des SGBDR à ce jour...



    Si l’on traite de la situation familiale à l’instant T (absence d’historisation), si une femme est mariée, elle n’a qu’un mari, la patte connectant PERSONNE et SeMarier_F doit être porteuse d’une cardinalité 0,1 :





    Je note encore que l’entité-type MARIAGE n’a pas d’identifiant :

    1) Soit vous définissez cet identifiant, par exemple idMariage, mais au stade du MLD, si la polygamie est admise, la clé étrangère {IdPersonne_F} devra être néanmoins clé alternative, sinon une femme pourrait avoir en même temps plusieurs maris :


    MLD



    Attention, PowerAMC crée une contrainte référentielle dans le sens PERONNE -> MARIAGE, il faut la supprimer.


    2) Soit vous identifiez MARIAGE relativement à PERSONNE via SeMarier_F (ce qui fera faire des économies d’index au niveau SQL) :


    MCD




    MLD




    Je note aussi que l’entité-type ENFANT est porteuse d’un attribut nomMere, représentant je suppose le nom de la mère d’un enfant. Il s’agit là d’une redondance (à éliminer) dans la mesure où via les associations Avoir2 et SeMarier_F on sait retrouver le nom de la mère.


    Souhaitez-vous prendre en compte la monoparentalité ?
    (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 à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    Salut fsmrel, je vous remercie encore pour tout ce que vous faites...
    alors j'ai généré ce MPD et je pense que ça va mieux , n'est ce pas ?



    avec ce warning que je n'ai pas compris.
    (Catégorie Vérifier Objet Emplacement
    Entité Existence d'un lien de relation ou d'association Entité 'Personne' <Modèle>)

    je commence maintenant la correction de la partie "situation familiale".

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


    La table AGENT a hérité de tous les attributs de la table PERSONNE : c’est redondant, inutile... Pour éviter cela, cliquez sur la demi-lune de l’héritage, ouvrez l’onglet « Génération » et cochez « N’hériter que des attributs primaires », comme ci-dessous :





    On avait défini l’attribut CIN comme source d’une clé alternative de la table AGENT : dans votre MLD il ne l’est plus...
    En fait, il est préférable d’agir au niveau MCD, en conséquence de quoi, lors de la dérivation du MCD, l’identifiant alternatif {CIN} de l’entité-type AGENT fera automatiquement l’objet de la clé alternative {CIN} de la table AGENT.

    Dans le MCD, cliquer sur l’entité-type AGENT pour accéder à la fenêtre « Propriétés de l’entité » et à l’onglet « Identifiants » :




    En supposant que l’entité-type AGENT soit déjà dotée d’un identifiant {AgentId} nommé Identifiant_1 :





    Cliquer sur une ligne en dessous de celle qui contient « Identifiant_1 », AMC créera un nom supplémentaire, par exemple « Identifiant_2 » :





    Cliquer sur le bouton « Appliquer » :




    Puis double-cliquer sur la ligne « Identifiant_2 » :





    Il en résulte l’ouverture de la fenêtre « Propriétés de l’identifiant » :





    Cliquer sur l’onglet « Attributs » de cette fenêtre pour sélectionner le(s) attribut(s) participant à cet identifiant alternatif, AMC vous en offre l’occasion grâce à une icône ad-hoc (« Ajouter des attributs ») :





    Après avoir cliqué sur l’icône en question, on a droit à la liste des attributs parmi lesquels on peut sélectionner ceux qui doivent composer la clé alternative :




    Y a plus qu’à cocher (ouf !), puis entériner avec le bouton « OK ».




    A propos de l’attribut AgentId de l’entité-type AGENT : comme AGENT hérite de l’identifiant {idPersonne} de l’entité-type PERSONNE, l’identifiant {AgentId} n’a plus de raison d’être, il faut supprimer l’attribut AgentId.

    Suite à une nouvelle dérivation du MCD, dans le MLD l’en-tête de la table AGENT doit se résumer à {IdPersonne, CIN, DateRecrutement}.


    A propos de l’entité-type DATE

    Dans le respect de Merise, PowerAMC nous force à mette en œuvre une entité-type DATE, parce qu’en l’occurrence c’est le seul moyen que la date participe à l’identification d’une association (alors qu’avec DB-MAIN le problème ne se pose pas). Mais au niveau du MLD, il n’y a pas à avoir de table DATE ! Sinon, pour chaque table qui y fait référence (par le biais d’une clé étrangère), prenons par exemple le cas de la table AvoirFonction, à chaque fois qu’on crée une ligne, il faudra s’assurer que la date de prise de fonction est bien une date, or l’attribut Date (à renommer en quelque chose comme DateFonction, car « Date » est un mot réservé du langage SQL) est du type Date (plutôt que Datetime soit dit en passant), le SGBD effectue donc les contrôles nécessaires et suffisants. Au stade MCD, on demande donc à PowerAMC de ne pas générer cette table à l’occasion du passage au MLD :





    Et votre MLD sera bigrement allégé !

    Autres considérations sur la participation de la date à la clé d’une table


    Prenons le cas de la table AvoirGrade :



    Elle a pour clé primaire le triplet {idPersonne, idGrade, date}, autrement dit la personne P1 a pu obtenir le grade G1 au dates D1 et D2. De même, P1 peut avoir le grade G1 et le grade G2 à la date D1 : c’est quand même laxiste !
    Avec Merise, on peut définir une CIF (contrainte d’intégrité fonctionnelle) pour faire en sorte qu’une personne n’ait qu’un seul grade G1 à une date donnée. De toute façon, avec PowerAMC vous devrez rectifier le tir au niveau du MLD en modifiant la clé primaire et en ajoutant une clé alternative :

    1) Modification de la clé primaire : on décoche la case P dans l’onglet « colonnes »de la fenêtre « Propriétés de la table », la clé primaire se résume alors à la paire {idPersonne, DateGrade} :




    2) On ajoute la clé alternative {idPersonne, idGrade}, comme on l’a fait pour le CIN (à ceci près qu’on n’est plus au niveau MCD, mais MLD) :





    Voilà pour les remarques du jour... Ce fut utile ?



    Sinon, quel est votre SGBD ?
    (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
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    7 966
    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 966
    Points : 30 778
    Points
    30 778
    Billets dans le blog
    16
    Par défaut
    J'avais oublié ceci :


    Citation Envoyé par minosys
    avec ce warning que je n'ai pas compris.
    (Catégorie Vérifier Objet Emplacement
    Entité Existence d'un lien de relation ou d'association Entité 'Personne' <Modèle>
    Pas grave. Vous avez sans doute supprimé les liens avec la partie « situation familiale », et PowerAMC trouve bizarre qu’une entité-type ne soit associée à aucune autre entité-type, mais il oublie qu’il existe une relation d’héritage avec AGENT...
    (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.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    Bonjouurnoooo
    Voilà pour les remarques du jour... Ce fut utile ?
    très utile même , merci beaucoup beaucoup !!

    Sinon, quel est votre SGBD ?
    je pense que j'utiliserai SQL SERVER 2008 !!

    Souhaitez-vous prendre en compte la monoparentalité ?
    oui en effet on vient de me le dire !
    et si un agent s'est remarier après un divorce sachant qu'il a déjà 2 enfants par exemple, est ce que dans ce cas on peut savoir qui est la mère de ces 2 derniers ?
    est ce que ce mcd le permet ?


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


    Concernant la monoparentalité, on devrait y arriver avec un sous-type de plus : ENFANT_A_UN_PARENT (pour différentier, j’ai renommé ENFANT en ENFANT_DU_MARIAGE).





    Pour les enfants issus d’un parent divorcé, vous pourriez sans doute réutiliser l’entité-type MARIAGE, en ajoutant un attribut pour préciser s’il s’agit d’un divorce.


    J’ai constaté que le type CARACTERE(5) a été remplacé par le type ENTIER

    Vous utiliserez MS SQL Server : tout va bien.
    (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.

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    saluuuut !!!
    Citation Envoyé par fsmrel Voir le message
    Concernant la monoparentalité, on devrait y arriver avec un sous-type de plus : ENFANT_A_UN_PARENT (pour différentier, j’ai renommé ENFANT en ENFANT_DU_MARIAGE).
    en fait pour la monoparentalité dans le cas d'une personne célibataire ce n'est pas permis mais pour d'autres cas si (divorcée,veuve) x).

    Pour les enfants issus d’un parent divorcé, vous pourriez sans doute réutiliser l’entité-type MARIAGE, en ajoutant un attribut pour préciser s’il s’agit d’un divorce.
    est ce que dans ce cas on peut garder trace de la mère des enfants même si elle a été "remplacée" après un divorce?


    J’ai constaté que le type CARACTERE(5) a été remplacé par le type ENTIER
    ouiii ! vous m'avez eu XD .

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


    Citation Envoyé par minosys
    En fait pour la monoparentalité dans le cas d'une personne célibataire ce n'est pas permis mais pour d'autres cas si (divorcée, veuve) x).
    Il faudra donc contrôler lors de la mise à jour de la base de données (table ENFANT_A_UN_PARENT) que, pour la personne parente, l’attribut SituationFamiliale (table PERSONNE) contient une valeur compatible (veuve ou divorcée).


    Citation Envoyé par minosys
    est ce que dans ce cas on peut garder trace de la mère des enfants même si elle a été "remplacée" après un divorce?
    Comme je l’avais évoqué dans mon précédent message, si on dote l’entité-type d’n attribut, appelons-le Statut (ou ce que vous préférez), prenant la valeur 'MAR' ou 'DIV', on peut garder la trace du mariage (Statut = 'MAR') de Monsieur A et de Madame B (à condition bien sûr que ces deux personnes figurent dans la table PERSONNE), ce qui n’empêche pas que Monsieur A divorce d’avec Madame B, auquel cas leur statut passe à la valeur 'DIV', et s’il se remarie avec Madame C, le statut pour ce nouveau couple prenne la valeur 'MAR'...





    Exemple avec MS SQL Server, Monsieur A et ses épouses


    TABLE PERSONNE
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    CREATE TABLE PERSONNE 
    (
       idPersonne           INT                NOT NULL,
       Nom                  VARCHAR(64)        NOT NULL,
       Prenom               VARCHAR(64)        NOT NULL,
       SiutationFamiliale   VARCHAR(16)        NOT NULL,
       CONSTRAINT PERSONNE_PK PRIMARY KEY (idPersonne)
    ) ;
     
    INSERT INTO PERSONNE (idPersonne, Nom, Prenom, SiutationFamiliale) VALUES (1, 'A', 'PA', 'marié') ;
    INSERT INTO PERSONNE (idPersonne, Nom, Prenom, SiutationFamiliale) VALUES (2, 'B', 'PB', 'divorcée') ;
    INSERT INTO PERSONNE (idPersonne, Nom, Prenom, SiutationFamiliale) VALUES (3, 'C', 'PC', 'mariée') ;
    INSERT INTO PERSONNE (idPersonne, Nom, Prenom, SiutationFamiliale) VALUES (4, 'D', 'PD', 'mariée') ;
     
    SELECT *, '' AS '<= PERSONNE' FROM PERSONNE ;


    TABLE MARIAGE
    Code SQL : 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
    CREATE TABLE MARIAGE 
    (
       idPersonne_F         INT                NOT NULL,
       idPersonne_H         INT                NOT NULL,
       Statut               CHAR(3)            NOT NULL,
       CONSTRAINT MARIAGE_PK PRIMARY KEY (idPersonne_F),
       CONSTRAINT MARIAGE_STATUT_CHK CHECK (STATUT IN ('MAR', 'DIV')),
       CONSTRAINT MARIAGE_PERSONNE_H_FK FOREIGN KEY (idPersonne_H)
          REFERENCES PERSONNE (idPersonne),
       CONSTRAINT MARIAGE_PERSONNE_F_FK FOREIGN KEY (idPersonne_F)
          REFERENCES PERSONNE (idPersonne)
    ) ; 
     
    INSERT INTO MARIAGE (idPersonne_F, idPersonne_H, Statut) VALUES (2, 1, 'DIV') ;
    INSERT INTO MARIAGE (idPersonne_F, idPersonne_H, Statut) VALUES (3, 1, 'MAR') ;
    INSERT INTO MARIAGE (idPersonne_F, idPersonne_H, Statut) VALUES (4, 1, 'MAR') ;
     
    SELECT *, '' AS '<= MARIAGE' FROM MARIAGE ;


    TABLE ENFANT_DU_MARIAGE
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TABLE ENFANT_DU_MARIAGE 
    (
       idPersonneEnfant     INT                NOT NULL,
       idPersonneMere       INT                NOT NULL,
       CONSTRAINT ENFANT_DU_MARIAGE_PK PRIMARY KEY (idPersonneEnfant),
       CONSTRAINT ENFANT_DU_MARIAGE_MARIAGE_FK FOREIGN KEY (idPersonneMere)
          REFERENCES MARIAGE (idPersonne_F),
       CONSTRAINT ENFANT_DU_MARIAGE_PERSONNE_FK FOREIGN KEY (idPersonneEnfant)
          REFERENCES PERSONNE (idPersonne)
    ) ;


    TABLE ENFANT_A_UN_PARENT
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TABLE ENFANT_A_UN_PARENT 
    (
       idPersonneEnfant     INT                NOT NULL,
       idPersonneParent     INT                NOT NULL,
       CONSTRAINT ENFANT_A_UN_PARENT_PK PRIMARY KEY (idPersonneEnfant),
       CONSTRAINT ENFANT_A_UN_PARENT_PERSONNE_P_FK FOREIGN KEY (idPersonneParent)
          REFERENCES PERSONNE (idPersonne),
       CONSTRAINT ENFANT_A_UN_PARENT_PERSONNE_E_FK FOREIGN KEY (idPersonneEnfant)
          REFERENCES PERSONNE (idPersonne)
    ) ;
    (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.

  14. #14
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    bonjouur,
    j'ai fait comme vous avez dis pour le MPD (avoir grade)

    Nom : snip.PNG
Affichages : 2242
Taille : 47,5 Ko

    je ne sais pas si c'est là ou il faut aller mais la clé alternative n’apparaît pas dans la table..

    Nom : avoirgrade.PNG
Affichages : 2110
Taille : 4,3 Ko

    une autre question x) : est ce qu'on peut modifier les noms d'attributs générés dans le MPD sans rien à craindre ?

    Nom : mariage.PNG
Affichages : 2361
Taille : 31,6 Ko

    dans cet exemple je voudrai bien femmeID hommeID (des noms significatifs ).
    ---------
    et pour ces messages ? je les ignores ? x)

    Nom : warnings.PNG
Affichages : 2199
Taille : 9,0 Ko

    merci beaucoup pour votre encadrement ça fait vraiment plaisir !

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


    Citation Envoyé par minosys
    je ne sais pas si c'est là où il faut aller mais la clé alternative n’apparaît pas dans la table...
    Ben non, forcément... Ça n’est pas là où il faut aller ! Mauvaise pioche, vous êtes parti dans la soute, du côté des index, c'est-à-dire du côté de la quincaillerie, des fichiers. Une clé candidate (alternative en l’occurrence) est un ensemble au sens de la théorie des ensembles ! Son rôle est d’exprimer l’unicité (et la minimalité) au niveau stratosphérique, l’index (« unique ») n’étant là que pour garantir physiquement cela dans les couches bassement matérielles...

    Dans le cas du CIN, on a défini un identifiant alternatif au niveau du MCD parce que c’était possible, mais il est des situations dans lesquelles, comme ici, il faut attendre d’être au niveau MLD ou MPD. A ce stade, comme dans la discussion avec Petit Rasta à laquelle je vous ai renvoyé, ça n’est pas l’onglet « index » qui nous intéresse, mais l’onglet « clés », nuance !








    Citation Envoyé par minosys
    une autre question x) : est-ce qu'on peut modifier les noms d'attributs générés dans le MPD sans rien à craindre ?
    Aucun problème, à condition que le nouveau nom ne fasse pas partie des mots réservés de SQL.


    Citation Envoyé par minosys
    et pour ces messages ? je les ignores ? x)
    Tant que ce sont des warnings, pas de problème, à condition quand même de s’assurer qu’il n’y a pas de loup caché... Et là il y en a un ! Cet abruti d’AMC vous a créé un lien dans le sens PERSONNE -> MARIAGE, à cause de la cardinalité 0,1 : prière de supprimer de lien et de vérifier que cela fait disparaître l’attribut Mar_PersonneID de la table PERSONNE, c’est une incongruité.

    Comme un bon coup d’œil vaut mieux qu’une mauvaise impasse, je vérifierai vote MPD...


    Citation Envoyé par minosys
    merci beaucoup pour votre encadrement ça fait vraiment plaisir !
    C’est le rôle des anciens d’essayer de donner un coup de main quand ils le peuvent... Ça sera votre tour dans 40 ans... ^^
    (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.

  16. #16
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    bonjour
    voila j'ai corrigé le problème de lien personne-> mariage + les clés alternatives ...
    Nom : MPDfin.PNG
Affichages : 2428
Taille : 117,8 Ko

  17. #17
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    salut ,
    j'ai besoin de rendre personneID incrémentable automatiquement lors de l'ajout d'un agent, conjoint ou enfant... dois je cocher la case "identity" dans la clé primaire de l'entité PERSONNE?

    j'ai supposé que c'est oui et testé dans sql server :

    en créant une vue (jointure entre "PERSONNE" et "AGENT" ) pour représenter la situation personnelle de l'agent:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE VIEW [dbo].[situation_personnelle]
    AS
    SELECT     dbo.AGENT.PERSONNEID, dbo.PERSONNE.NOM, dbo.PERSONNE.PRENOM, dbo.AGENT.CIN, dbo.PERSONNE.SITUATIONFAMILIALE, dbo.PERSONNE.DATENAISSANCE, dbo.PERSONNE.ADRESSE, 
                          dbo.PERSONNE.TELEPHONE, dbo.PERSONNE.EMAIL, dbo.AGENT.DATERECRUTEMENT
    FROM         dbo.AGENT INNER JOIN
                          dbo.PERSONNE ON dbo.AGENT.PERSONNEID = dbo.PERSONNE.PERSONNEID
    
    GO
    ensuite un déclencheur "instead of insert" pour ajouter un nouveau agent :

    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
    CREATE TRIGGER IO_insert_sitPerso ON situation_personnelle
    INSTEAD OF INSERT
    AS
    BEGIN
    SET NOCOUNT ON
    
     -- Check for duplicate Employee. If no there is duplicate, do an INSERT.     
          IF (NOT EXISTS (SELECT A.CIN
          FROM AGENT A, inserted
          WHERE A.CIN = inserted.CIN))
          
    			   INSERT INTO dbo.PERSONNE(NOM,PRENOM,DATENAISSANCE,ADRESSE,TELEPHONE,SITUATIONFAMILIALE)
    				  SELECT NOM,PRENOM,DATENAISSANCE, ADRESSE, TELEPHONE, SITUATIONFAMILIALE
    				  FROM inserted ;
    
    			   INSERT INTO AGENT(CIN,DATERECRUTEMENT)
    				  SELECT  CIN, DATERECRUTEMENT
    				  FROM inserted;
         
    
    END
    go
    mais je fais comment pour insérer le même PERSONNEID généré par l’incrémentation dans la table AGENT ??

    ps: mon mpd est correcte ???

  18. #18
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    7 966
    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 966
    Points : 30 778
    Points
    30 778
    Billets dans le blog
    16
    Par défaut Bonne question...
    Bonsoir minosys,



    Citation Envoyé par minosys
    j'ai besoin de rendre personneID incrémentable automatiquement lors de l'ajout d'un agent, conjoint ou enfant... dois je cocher la case "identity" dans la clé primaire de l'entité PERSONNE?
    Dans ces conditions, oui.


    Citation Envoyé par minosys
    je fais comment pour insérer le même PERSONNEID généré par l’incrémentation dans la table AGENT ??
    Problème épineux...

    1er scénario

    Si vous faites les INSERT un par un, dans le trigger vous pouvez utiliser la fonction MAX :


    Code SQL : 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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    CREATE TABLE PERSONNE 
    (
       idPersonne           INT               IDENTITY,
       Nom                  VARCHAR(64)       NOT NULL,
       CONSTRAINT PERSONNE_PK PRIMARY KEY (idPersonne)
    ) ;
     
    CREATE TABLE AGENT 
    (
       idPersonne           INT               NOT NULL,
       CIN                  CHAR(10)          NOT NULL,
       DateRecrutement      DATE              NOT NULL,
       CONSTRAINT AGENT_PK PRIMARY KEY (idPersonne),
       CONSTRAINT AGENT_AK UNIQUE (CIN),
       CONSTRAINT AGENT_PERSONNE_FK FOREIGN KEY (idPersonne) REFERENCES PERSONNE
          ON DELETE CASCADE
    ) ;
    GO
    CREATE VIEW PERSONNE_AGENT (Nom, CIN, DateRecrutement) 
    AS 
    SELECT Nom, CIN, DateRecrutement
    FROM   PERSONNE AS x JOIN AGENT AS y ON x.idPersonne = y.idPersonne
    ;
    GO
    CREATE TRIGGER PERSONNE_AGENT_TR ON PERSONNE_AGENT INSTEAD OF INSERT
    AS
    BEGIN
        INSERT INTO PERSONNE 
            SELECT Nom
            FROM   INSERTED ;
        INSERT INTO AGENT (CIN, DateRecrutement, idPersonne)
            SELECT CIN, DateRecrutement, (SELECT MAX(idPersonne) from PERSONNE)
            FROM   INSERTED ;
    END
    GO
     
    INSERT INTO PERSONNE_AGENT (Nom, CIN, DateRecrutement) values ('Raoul', '1234567890', '2000-01-01') ;
    INSERT INTO PERSONNE_AGENT (Nom, CIN, DateRecrutement) values ('Fernand', '2345678901', '2001-01-01') ;
     
    SELECT '' as PERSONNE,* FROM PERSONNE ;
     
    SELECT '' as AGENT,* FROM AGENT ;
     
    SELECT '' as PERSONNE_AGENT, * FROM PERSONNE_AGENT ;

    Vous noterez que dans la vue que j’utilise, l’attribut idPersonne ne figure pas : je pars du principe que les attributs identifiants de ce genre sont cachés à l’utilisateur et servent pour les opérations de jointure : de même que le CIN sert à identifier les agents du point de vue de l’utilisateur, il serait bien que l’entité-type PERSONNE ait aussi un identifiant « naturel » (accessible à l’utilisateur), autre que idPersonne. Mais que vous mettiez ceci en œuvre ou non ce nouvel identifiant, ce n’est qu’une remarque de ma part et c’est indépendant du problème que vous posez.

    2e scénario

    Vous faites des inserts de masse : là on est coincés, car pour N lignes à insérer, on aura N fois la valeur de MAX(idPersonne)...

    On s’en rend compte en remplaçant ainsi les inserts unitaires, à titre d’exemple : :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    DECLARE @T AS TABLE 
    (
       CIN                  CHAR(10)          NOT NULL,
       DateRecrutement      DATE              NOT NULL,
       Nom                  VARCHAR(64)       NOT NULL
    ) ;
    INSERT INTO @T (Nom, CIN, DateRecrutement) values ('Raoul', '1234567890', '2000-01-01') ;
    INSERT INTO @T (Nom, CIN, DateRecrutement) values ('Fernand', '2345678901', '2001-01-01') ;
     
    INSERT INTO PERSONNE_AGENT  (Nom, CIN, DateRecrutement)
        SELECT Nom, CIN, DateRecrutement
        FROM   @T ;

    3e scénario :

    Je n’ai pas essayé, mais dans le cas d’un insert de masse pour récupérer les lignes une par une et pouvoir utiliser la fonction MAX, toute honte bue, mettre en œuvre un curseur (horresco referens!) et imiter ainsi le comportement des SGBD avec lesquels les lignes à insérer nous sont présentées une par une.


    4e scénario :

    Sur le forum SQL Server, soumettre le problème aux cracks de SQL, il y en a !




    Citation Envoyé par minosys
    mon mpd est correct ?
    Ça a l’air bon tout ça.

    Peut-être pourriez-vous renommer certains attributs. Par exemple, dans l’en-tête de la table ENFANT_A_UN_PARENT les attributs Per_PersonneID et personneID pourraient être avantageusement renommés respectivement en idPersonneEnfant et idPersonneParent (comme je l’avais fait de mon côté, cf. message #13).

    La table avoirGrade sert à la fois pour le grade actuel de l’agent et l’historique de ses grades, même principe pour ses petites sœurs, avoirFonction, etc. Du point de vue théorique, on sépare les données actuelles et les données historisées, et il se trouve que du point de vue des requêtes ça sera profitable.

    Si on procède à la séparation, (on dit qu’on normalise en sixième forme normale ^^) on obtiendra ceci :





    La table GRADE_DEPUIS permet de connaître le grade actuel d’un agent et la date à laquelle ce grade a été effectif (attribut GradeDepuis), tandis que la table GRADE_DURANT permet de connaître les périodes correspondant à ses grades précédents. Mais je vous sens frémir vu le nombre de jointures à effectuer pour connaître la situation actuelle complète d’un agent, aussi vous pouvez vous contenter de « n’être qu’en cinquième forme normale », en expédiant les attributs de GRADE_DEPUIS dans AGENT (donc exit GRADE_DEPUIS) :


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

  19. #19
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2013
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    Bonjouur,

    je n'ai pas pu réaliser ce MPD en passant par le MCD :'( ...
    est ce qu'il y'a moyen de faire la modification directement a mon MPD sans devoir le regénérer par un MCD?
    en tout cas voila ce que j'ai fait
    Nom : Capture.PNG
Affichages : 2430
Taille : 44,0 Ko

    et pour le "GradeDepuis" ce n'est pas une référence du "gradeDebut (gradeVal)" de la table "grade_durant"? sinon je n'ai pas compris comment manipuler ça en sql, je galère pour comprendre avec toutes ces nouvelles notions xD

    j'essayerai de refaire le trigger de la vue PERSONNE AGENT pour voir qu'est ce que ça donne x).

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


    Faut pas !

    Si avant d’être au grade où il se trouve, un agent a pu avoir d’autres grades, on le saura par l’entité-type faible GRADE_DURANT (DATE_DURANT chez vous), dentifiée relativement à AGENT :




    Auquel cas ça devrait mieux se passer lors de la production du MLD...

    Qu’en est-il ? Quelles zones d'ombre reste-t-il ?
    (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. [JNI]Employer Java dans C++
    Par dinver dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 29/12/2005, 22h09
  2. [VSTO 2] Comment employer avec Office 2003 standard
    Par bootix dans le forum Framework .NET
    Réponses: 4
    Dernier message: 24/12/2005, 16h12
  3. Employer PostGreSQL
    Par daweed74 dans le forum JDBC
    Réponses: 3
    Dernier message: 20/12/2005, 12h48
  4. Réponses: 16
    Dernier message: 06/07/2005, 17h02
  5. termes employé en c++
    Par star_light dans le forum C++
    Réponses: 4
    Dernier message: 15/01/2005, 04h18

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