ÀDeuxMains
[30 min]
Une entreprise de maintenance de matériel industriel
La société ÀDeuxMains est en charge de la maintenance de machines industrielles. La société gère plusieurs agences ; chaque agence est affectée à exactement une région dans le monde.
Agences
On dispose d'un fichier CSV region.csv
correspondant au schéma suivant :
Agence (numéro_agence:integer, nom_région:varchar, population_région:integer, surface_région:integer, densité_région:real, nom_pays:varchar, pib_pays:integer)
On dispose des informations complémentaires suivantes :
numéro_agence est unique et non null
nom_région est unique et non null
densité_région = population_région / surface_région
nom_pays détermine pib_pays
On ne fera aucune hypothèse de dépendance fonctionnelle complémentaire.
Question
Montrez que ce modèle n'est pas en 3NF (rappelez les clés candidates et énoncez la liste des DFE sous la forme d'une F+). Proposez une solution de normalisation en relationnel (sans perte).
Proposez un modèle UML correspondant à la version normalisée.
Solution
Les clés sont numéro_agence et nom_région.
F+
numéro_agence → nom_région, population_région, surface_région, densité_région, nom_pays, pib_pays
nom_région → numéro_agence, population_région, surface_région, densité_région, nom_pays, pib_pays
population_région, surface_région → densité_région
population_région, densité_région → surface_région
surface_région, densité_région → population_région
nom_pays → pib_pays
Forme normale
Le modèle n'est pas en 3NF, des attributs non-clés (nom_pays, population_région, surface_région) déterminent des attributs non-clés.
Le modèle est en 2NF (les deux clés ne sont composées que d'un seul attribut).
Décomposition
Pays (#nom:varchar, pib:integer)
Agence (#numero:integer, region:varchar, population:integer, surface:integer, pays=>Pays) avec région clé
On remarque que l'on peut calculer la densité à partir de de population et surface, on décide donc de supprimer cet attribut, qui sera calculé dynamiquement au sein d'une vue.
Machines
On dispose de la liste des types de machines gérés par ÀDeuxMains dans un fichier de tableur types.ods.
On sait que les noms des machines sont des clés.
Question
Montrez que ce modèle n'est pas en 3NF. Proposez une solution de normalisation en relationnel (sans perte).
Proposez un modèle UML correspondant à la version normalisée.
Solution
Ce n'est pas en 1NF à cause de la non-atomicité de l'attribut spécialités.
Décomposition (on considérera que spécialité est un attribut multivalué)
Machine (#nom:string)
Spécialité (#machine=>Machine, #spécialité:string)
Complément : Décomposition (si on considère plutôt une association N:M)
Machine (#nom:string)
Spécialité (#nom:string)
SpécialitéMachine (#machine=>Machine, #spécialité=>Spécialité)