À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 :

1
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
1
Pays (#nom:varchar, pib:integer)
2
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é)
1
Machine (#nom:string)
2
Spécialité (#machine=>Machine, #spécialité:string)
ComplémentDécomposition (si on considère plutôt une association N:M)
1
Machine (#nom:string)
2
Spécialité (#nom:string)
3
SpécialitéMachine (#machine=>Machine, #spécialité=>Spécialité)