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
Effectuer le passage au relationnel de ce modèle.
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)
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.
Deux types de maison ont évidemment des quantités d'éléments (m²) et de compétences (h) différentes.
É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
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.
Maison I | Maçon | 500 | 20 |
Maison II | Maçon | 600 | 20 |
Normaliser le modèle en 3NF (justifier, et montrer que la transformation est sans perte).
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)
La décomposition est sans perte car :
Les attributs ont été préservés : JointureNaturelle(Élément,TypeÉlément)
et JointureNaturelle(Compétence,TypeCompétence)
nous permettent de retrouver les relations Élément
et Compétence
d'origine
Les 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
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.