Vous êtes sur la page 1sur 3

§

Correspondance (mapping) objet-relationnel


Objectif : Écrire le schéma relationnel d'une base de données correspondant à un modèle objet.

Voici le diagramme de classes UML du modèle objet d'une application. Il s'agit de gérer les articles vendus et les factures éditées
par un magasin de détails. Certains des articles sont des lots composés d'un certain nombre d'autres articles. Pour simplifier vous
supposerez qu'il n'y a pas de lots de lots (un des articles qui compose un lot ne peut être un lot).

Chaque article est identifié par une référence qui est un nombre entier. Un lot peut être composé de plusieurs articles ; par
exemple, on peut trouver un lot composé d'une ramette de papier de référence 5678, de 10 stylos de référence 678 et de 5 stylos de
référence 8945. Le prix d'un article unitaire est donné par l'attribut "pu". Le prix d'un lot est le total des prix des articles qu'il
contient, multiplié par un certain pourcentage (attribut de la classe Lot). Un stylo a une couleur et un descriptif ; une ramette a un
grammage (par exemple 80 g/m²) et un descriptif. Le descriptif du lot est calculé automatiquement d'après les articles qu'il
contient.

Toutes les données contenues dans ces tables sont enregistrées dans une base de données relationnelle.

Les différentes stratégies pour traduire l'héritage


Pour cet exercice, vous ignorerez les lots. Donner le schéma relationnel pour traduire l’héritage

1. Avec la stratégie "une seule table par arborescence d'héritage".


2. Avec la stratégie "une table par classe".
3. Avec la stratégie "une table par classe concrète".

Traduction des associations


1. Vous supposerez que la stratégie "une seule table par arborescence d'héritage" a été choisie.
Indiquez ce que vous allez faire pour traduire les associations du modèle objet :
o entre les classes Facture et LigneFacture ;
o entre les classes Lot et Article ;
o entre les classes LigneFacture et Article.
2. Vous supposerez que la stratégie "une table par classe concrète" a été choisie.
Indiquez ce que vous allez faire pour traduire l'association du modèle objet entre les classes LigneFacture et Article.

Schéma relationnel
Écrivez un schéma relationnel correspondant au diagramme de classes donné au début. Choisissez la stratégie "une seule table par
arborescence d'héritage".

Ajout de données dans la base


Donner des instructions SQL qui devront être exécutées par l'application pour ajouter des données dans la base de données.

1. Ajouter un stylo avec les caractéristiques suivantes : référence : 1234, description : Stylo à plume or Tarker noir, prix
unitaire : 58, couleur : noir
o dans le cas où la stratégie "une seule table par arborescence d'héritage" a été choisie ;
o dans le cas où la stratégie "une table par classe" a été choisie.
2. Ajouter un lot de référence 4538, pourcentage 10, composé de 10 stylos de référence 1234 et de 3 ramettes de référence
5678
o dans le cas où la stratégie "une seule table par arborescence d'héritage" a été choisie ;
o dans le cas où la stratégie "une table par classe concrète " a été choisie.

Interrogation de la base
Donner les commandes SQL pour lister

• toutes les informations sur tous les stylos pour les stratégies "une seule table par arborescence d'héritage" et "une table
par classe" ;
• les descriptions des stylos qui ont un prix supérieur à 100 euros pour les stratégies "une seule table par arborescence
d'héritage" et "une table par classe" ;
• les références de tous les articles pour les stratégies "une seule table par arborescence d'héritage" et "une table par classe
concrète".

Modification de la base
Écrivez les commandes SQL pour

• augmenter de 10 % le prix de tous les stylos ;


• supprimer toutes les factures du client Dupond.

dans les cas où

• la stratégie "une seule table par arborescence d'héritage" a été choisie ;


• la stratégie "une table par classe" a été choisie.

Choix d'une Stratégie pour la traduction de l'héritage


Maintenant vous devez avoir votre opinion sur la stratégie de traduction de l'héritage qui convient le mieux pour ce cas particulier.
Donnez votre choix et expliquez vos raisons. Vous pouvez aussi choisir une solution mixte qui mélange plusieurs stratégies

Objectif du TP :
En utilisant le modèle de conception DAO, implémenter en Java une des stratégies de mapping étudiée dans le TP précédent.

Description du problème et création des tables


Il est intéressant d'utiliser des DAO pour séparer la gestion de la persistance du reste d'une application. Il sera ainsi plus facile de
changer de SGBD. Les DAO permettent aussi de factoriser le code lié à la persistance en le plaçant à un seul endroit de
l'application.
Pour simplifier, les lots et les factures ne seront pas pris en compte, ni pour la création des tables de la base de données, ni pour
le code Java.

Utilisez la stratégie de mapping "une seule table par arborescence d'héritage " pour traduire l'héritage du modèle objet.

Créez les tables qui seront utilisées pour la persistance des stylos et des ramettes.

DAO simplifié pour les stylos


1. Ajoutez la classe DaoStylo pour implémenter la persistance des stylos vendus dans le magasin.
Pour commencer, faites simple. Vous pouvez utiliser une nouvelle connexion et transaction pour chaque
méthode du DAO. N'implémentez que les méthodes utiles pour faire exécuter la méthode main.
2. Avez-vous géré les cas où le code essaie d'ajouter un stylo qui existe déjà dans la base ?

DAO pour les ramettes


Ajoutez un DAO pour les ramettes.

1. Comment allez-vous faire pour récupérer tous les articles de la base de données ? Implémentez une
solution.
2. Si vous n'utilisez pas un pool de connexions, comment pourriez-vous faire pour ne pas avoir à créer une
nouvelle connexion pour chaque méthode des DAO ?

Modèle "fabrique abstraite" pour les DAO


Utilisez le modèle de conception "fabrique abstraite" pour permettre de changer facilement de support de persistance.

Vous aimerez peut-être aussi