Literie

[20 min]

Un revendeur de matelas et de sommier a besoin de créer une base de données, afin de générer son catalogue des produits. Pour cela, il fait appel à vous, afin de concevoir une base de données qui puisse prendre en compte ses besoins. Voici des extraits du document qui retrace les besoins, rédigé par le client :

« Le fonctionnement actuel est relativement simple, nous souhaitons juste l'automatiser pour éviter les erreurs et les pertes de temps. Nous avons des types de produits, qui sont des matelas ou des sommiers. Chaque type de produit est caractérisé par des références uniques que nous créons en plus du nom posé par le fabricant (ce nom reprend parfois un plus ancien d'un concurrent) ; nous ajoutons souvent une description textuelle et précisons toujours la couleur. »

« Un type de produit est toujours lié à un fabricant, caractérisé par son nom (sa marque), et nous avons toujours au minimum une adresse et un numéro de téléphone. Un type de matelas a en plus une épaisseur, nécessaire pour l'ajouter dans les catalogues et les publicités. Un matelas est aussi catégorisé en fonction du matériau utilisé : ressort, latex ou mousse. Un type de sommier possède toujours une hauteur. »

« Chaque type de produit est proposé en une ou plusieurs dimensions (longueur et largeur, qui sont souvent des dimensions standardisées). »

Diagramme UML

Un stagiaire a déjà proposé le diagramme UML ci-après.

Literie

Question

Vérifiez que le diagramme est correct par rapport à l'énoncé.

Solution

Le diagramme est correct.

Question

Proposez un modèle relationnel à partir de l'UML de la question précédente

Solution

  • Pour la transformation de PRODUIT, on note :

    • classe mère abstraite,

    • héritage presque complet,

    • association N:M sur la classe mère.

    L'héritage par les classes filles est exclu, on peut choisir l'héritage par référence ou par la classe mère. On choisir l'héritage par la classe mère.

  • En ce qui concerne MATELAS, nous sommes dans un cas simple, avec une classe mère abstraite et un héritage complet, nous choisirons l'héritage par la classe mère.

Solution par les classes filles pour PRODUIT :

1
FABRICANT (#nom:string, adresse:string, telephone:string) WITH adresse, telephone NOT NULL
2
3
PRODUIT (#reference:string, nom:string, description:string, couleur:string, fabricant => FABRICANT) WITH nom, couleur, fabriquant NOT NULL
4
5
MATELAS (#reference => PRODUIT, epaisseur:integer, type:{'L','M','R'}) WITH epaisseur, type NOT NULL
6
7
SOMMIER (#reference => PRODUIT, hauteur:integer) WITH hauteur NOT NULL
8
9
DIMENSION (#longueur:integer, #largeur:integer) (toute clé)
10
11
TAILLE (#reference => PRODUIT, #longueur => DIMENSION, #largeur => DIMENSION) (toute clé)
ComplémentVues induites par la transformation de relation d'héritage
1
Contraintes PROJ(PRODUIT, reference) IN (PROJ(MATELAS, reference) XOR PROJ(SOMMIER, reference))
2
vRESSORT = RESTRICTION(JOINTURE(PRODUIT, MATELAS, PRODUIT.reference = MATELAS.reference), type='R')
3
vMOUSSE = RESTRICTION(JOINTURE(PRODUIT, MATELAS, PRODUIT.reference = MATELAS.reference), type='M')
4
vLATEX = RESTRICTION(JOINTURE(PRODUIT, MATELAS, PRODUIT.reference = MATELAS.reference), type='L')
5
vSOMMIER = JOINTURE(PRODUIT, SOMMIER, PRODUIT.reference = SOMMIER.reference)
6