Jeu de construction
[30 min]
Soit le diagramme UML ci-après décrivant des constructions composées d'éléments et faisant appel à des compétences pour leur montage.
Par exemple une "Maison de type I" contiendra :
100 m² de "Brique traditionnelle" (Type de l'élément), pour un prix de 2 euros par unité (Prix/U), 12 briques par m² (U/m²) et 100g / brique (Poids/U)
125 m² de "Tuile plate" (Type de l'élément), pour un prix de 4 euros par unité (Prix/U), 24 tuile par m² (U/m²) et 75g / tuile (Poids/U)
et fera appel à :
500h de travail de "Maçon" (Type de compétence), pour un tarif horaire de 20€/h
425h de travail de "Couvreur" (Type de compétence), pour un tarif horaire de 30€/h
75h de "Chef de chantier" (Type de compétence), pour un tarif horaire de 45€/h
Question
Effectuer le passage au relationnel de ce modèle.
Solution
Construction (#Nom:String)
Élément (#Type:String, #Construction=>Construction, m²:Integer, Prix/U:Integer, U/m²:Integer, Poids/U:Integer)
Compétence (#Type:String, #Construction=>Construction, h:Integer, Prix/h:Integer)
Question
Sachant que deux mêmes types d'élément ont toujours les mêmes caractéristiques (Prix/U, U/m², Poids/U) et que deux mêmes types de compétence ont toujours les mêmes prix (Prix/h), établir la fermeture transitive des DFE et la forme normale de ce modèle (justifier).
Donner un exemple de données redondantes.
Indice
Deux types de maison ont évidemment des quantités d'éléments (m²) et de compétences (h) différentes.
Solution
Fermeture transitive des DFE
Élément.Construction, Élément.Type → m²
Élément.Type → Prix/U
Élément.Type → U/m²
Élément.Type → Poids/U
Compétence.Construction, Compétence.Type → h
Compétence.Type → Prix/h
Complément :
Forme normale
Le modèle est en 1NF, les attributs sont atomiques et les relations ont des clés.
Elle n'est pas en 2NF car des parties de clé (Élément.Type
et Compétence.Type
) déterminent des attributs.
Complément :
Exemple :
Maison I | Maçon | 500 | 20 |
Maison II | Maçon | 600 | 20 |
Question
Normaliser le modèle en 3NF (justifier, et montrer que la transformation est sans perte).
Solution
Construction (#Nom:String)
Élément (#Type=>TypeÉlément, #Construction=>Construction, m²:Integer)
TypeÉlément (#Type:String, Prix/U:Integer, U/m²:Integer, Poids/U:Integer)
Compétence (#Type=>TypeCompétence, #Construction=>Construction, h:Integer)
TypeCompétence (#Type:String, Prix/h:Integer)
Complément :
La décomposition est sans perte car :
Les attributs ont été préservés :
JointureNaturelle(Élément,TypeÉlément)
etJointureNaturelle(Compétence,TypeCompétence)
nous permettent de retrouver les relationsÉlément
etCompétence
d'origineLes DFE ont été préservées : la fermeture transitive du modèle décomposé est exactement la même que celle du modèle d'origine
Question
En repartant de la forme normalisée en 3NF, rétro-concevoir un modèle UML qui aurait permis d'aboutir directement à ce schéma non redondant.