Bonjour Kyrian,
Voyons voir les entités-types, associations, tables...
INDIVIDU
Votre MCD et votre MLD sont conformes concernant les individus.
DIPLOME
Dans votre MCD, l’entité-type DIPLOME comporte encore un attribut id_individu qui n’a rien à y faire. Par contre ? au niveau du MLD, votre table DIPLOME est correcte :
Envoyé par
Kyrian
Diplôme (id_diplome, code,libelle)
DETENIR
Votre MCD est correct, par contre votre MLD n’est pas valide car la table DETENIR n’a pas de clé :
Envoyé par
Kyrian
Detenir (date_obtention,id_diplome#,id_individu#)
La version correcte est la suivante :
Detenir (date_obtention, id_diplome#, id_individu#)
Je vous fournis la version MySQL Workbench correspondant à cette partie :
LANGUE
L’attribut Niveau n’est pas à sa place, car, il concerne aussi un individu.
PARLER
C’est au sein de la table PARLER que l’attribut Niveau prend son sens :
INTERET
Votre MCD et votre MLD sont conformes concernant les centres d’intérêt.
AVOIR
Votre MCD est correct, par contre votre MLD n’est pas valide car la table AVOIR n’a pas de clé :
Envoyé par
Kyrian
Avoir (id_interets#, id_individu#)
La version correcte est la suivante :
Avoir id_interets#, id_individu#)
EMPLOYEUR
Y a du mou dans la corde à nœuds...
En effet, selon les attributs composant l’en-tête de votre table EMPLOYEUR, un employeur a une raison sociale, un nom, c’est d’accord, mais il exerce aussi une fonction depuis telle date : encore des attributs qui ne sont pas à leur place.
EMBAUCHER
[indent]Selon votre représentation pour une paire {Individu, Employeur} il n’y a qu’en seule date d’embauche : l’association EMBAUCHER ne respecte donc pas la règle :
Envoyé par
Kyrian
Un individu peut éventuellement avoir été embauché plusieurs fois chez le même employeur.
Pour que cette règle soit respectée, dans le contexte de Merise, il faut définir une association ternaire :
Mais comme les employeurs sont successifs, on peut énoncer la règle suivante :
A une date donnée, un individu n'est employé que par un seul employeur.
Ce qui en Merise conduit à définir une CIF (contrainte d’intégrité fonctionnelle), c'est-à-dire une contrainte d’unicité à cet effet :
{INDIVIDU, DATE} -> {EMPLOYEUR}
Symbolisée ci-dessous par la pointe de flèche rouge :
Les choses sont plus simples à représenter au niveau du MLD. Version MySQL Workbench :
Selon votre notation :
Embaucher (id_individu# , date_embauche, id_employeur#, date_depart)
FONCTION_EXERCEE
Il reste donc à définir les fonctions exercées par un individu chez les employeurs. Là encore, on peut faire l’hypothèse qu’un individu n’exerce qu’une fonction à la fois (il ne serait pas difficile de modifier le modèle si cette règle ne valait pas).
Selon votre notation :
Fonction_exercee (id_individu#, date_debut_fonction, id_fonction#, date_embauche#, date_fin_fonction)
La table FONCTION_EXERCEE est en relation avec la table EMBAUCHE, car un individu ne peut exercer de fonction chez un employeur que si celui-ci l’a embauché.
Par ailleurs, on peut considérer qu’un individu a pu exercer une certaine fonction chez un certain employeur, le quitter, puis revenir pour exercer à nouveau cette même fonction chez cet employeur.
Exemples :
L’individu Bastien, embauché [chez l’employeur Volfoni] le 01/01/1954, a exercé la fonction de conseiller technique du 01/01/1954 au 31/12/1955 ;
L’individu Bastien, embauché [chez l’employeur Volfoni] le 01/01/1954, a exercé la fonction de bras droit du 03/01/1954 au 31/12/1956 ;
L’individu Bastien, embauché [chez l’employeur Naudin] le 11/01/1957, a exercé la fonction de consultant du 11/01/1957 au 14/07/1957 ;
L’individu Bastien, embauché [chez l’employeur Naudin] le 11/01/1957, a exercé la fonction de conseiller commercial du 15/07/1957 au 23/09/1957 ;
L’individu Bastien, embauché [chez l’employeur Volfoni] le 01/10/1957, a exercé la fonction de chef d’équipe du 07/10/1957 au 25/09/1958 ;
L’individu Bastien, embauché [chez l’employeur Volfoni] le 01/01/1957, a exercé la fonction de conseiller technique du 26/09/1958 au 30/03/1959 ;
Etc.
L’expression entre crochets : [chez l’employeur Volfoni] est simplement là pour rappeler que par jointure des tables FONCTION_EXERCEE et EMBAUCHE, on sait qui est l’employeur de Bastien.
Envoyé par
Kyrian
Par contre je n'arrive pas à comprendre comment faire pour passer de 1FN en 2FN puis en 3FN ?
Dois-je le faire sur tout mon schéma ou seulement où c'est possible ?
Il ne s’agit pas de passer en 1FN, 2FN, 3FN, en FNBC, etc., mais de vérifier que ces formes normales ne sont pas violées. La vérification doit être effectuée pour chaque table.
Bon courage, et n'hésitez pas à voter pour les réponses qui ont pu vous aider...
Partager