dimanche 10 avril 2011

Exercice Corrigé Passage Conceptuel au relationnel (MCD au MLD) : MCD et UML d'une gestion des revues

Soit le modèle Entité-Association et Le Modèle UML suivant :
 
On souhaite construire une base de données gérant des revues et les articles de ces revues. Une revue est caractérisée par un nom et une périodicité. Chaque revue parait sous la forme de numéros, chaque numéro étant identifié par un nombre relatif à la revue et à l'année en cours (ex. le numéro N◦12 de Linux Magazine en 2003 est différent du numéro N◦12 de Linux Magazine en 2004). Un numéro est également caractérisé par un nombre de pages. Chaque numéro contient des articles écrits par un ou plusieurs auteurs. Un auteur est caractérisé par un nom, un prénom, ainsi qu'un email. Chaque article possède un titre et un contenu. Un même article peut apparaître dans plusieurs plusieurs numéros d'une même revue ou de différentes revues. Lorsqu'un article apparaît dans un numéro d'une revue, il a une page de début et une page de n. Un article peut faire référence à d'autres articles, en précisant le numéro et la revue dans lesquels l'article référencé a été publié.


 Figure 2: Modélisation E/A et UML d'une base de données gérant des revues.

La base de données doit permettre de répondre à des requêtes telles que "Combien de numéros de Linux Magazine sont parus en 2004 ?", "Quels sont les titres des articles parus dans au moins deux revues différentes ?", "Quels sont les auteurs ayant publiés dans le numéro 3 de la revue L'histoire en 2004 ?" etc.

La figure 2 présente la modélisation Entité/Association (format Merise) et la modélisation UML de l'énoncé. Les explications ne sont données que pour le schéma E/A mais peuvent être adaptées au schéma UML. Pour une compréhension de la différence entre une modélisation E/A ou UML et le passage au relationnel. Les schémas de modélisation ci-avant sont sémantiquement clairs. Néanmoins, quels points nécessitent d'être précisés.

  • L'ensemble d'entités Numéro est un ensemble d'entités faibles de Revue au format Merise (ou une association qualifiée en UML). En effet, ce choix de modélisation a été fait pour représenter le fait que l'identificateur d'un numéro est relatif à la revue à laquelle le numéro appartient. Un numéro d'une revue donnée étant identifié par un nombre et une année, ces deux attributs (ID et Année) sont soulignés.
  • Les cardinalités de l'association entre les ensembles d'entités Numéro et Article sont 1:N-1:M, car un article peut apparaître dans plusieurs numéros et un numéro contient plusieurs articles. Le principe est le même pour les cardinalités de l'association entre Auteur et Article.
  • Les attributs PageDébut et PageFin caractérisent l'association entre Article et Numéro (un numéro étant relatif à une revue, il est inutile de faire une association avec Revue). En effet, la page de début et la page de n peuvent varier, pour un même article, lorsqu'il paraît dans plusieurs numéros différents.
  • Un article peut faire référence à un autre article. Le numéro et la revue dans lesquels l'article référencé apparaît doivent être précisés dans l'article référençant. Par exemple, l'article intitulé "Correction d'exercices en bases de données" peut faire référence à l'article "Concepts généraux en BD relationnelle" du numéro 12 de l'année 2004 de la revue "Informatique magazine". A cet effet, les ensembles d'entités Numéro et Article ont été regroupés au sein d'un agrégat au format Merise (ou d'une classe-association en UML). Cet agrégat (ou cette classe-association) représente l'article référencé, c'est-à-dire l'article et le numéro de la revue où il a été publié (il est inutile d'ajouter la revue à l'agrégat puisque Numéro est un ensemble d'entités faibles de Revue). Cet agrégat (ou cette classe-association) est associée à Article, c'est-à-dire à l'article référençant, dont on ne précise pas le numéro et la revue. Les cardinalités ont pour borne inférieure 0 car un article peut ne référencer aucun autre article et un article peut ne jamais être référencé.
Déduisez le schéma relationnel de la base de données correspondante.

Vous préciserez les clés primaires des relations en les soulignant ainsi que les clés étrangères en les signalant par un # et en précisant à quoi elles font référence.
Dans votre schéma relationnel, chaque relation doit être spécifiée de la manière suivante :
RN om(att1,...,attn) où RNom est le nom de la relation et att1, ..., attn sont des noms d'attributs.
Le nom de la relation doit obligatoirement avoir un lien avec les noms des ensembles d'entités
(classes) ou des associations du schéma de modélisation de la question 1.
Vous donnerez des explications claires et concises du passage au relationnel. Vous préciserez notamment pourquoi et comment vous créez ou modifiez certaines relations (1 ligne maximum par relation).

----------------------------------------------------------------------------------------------------
Correction
----------------------------------------------------------------------------------------------------

Le modèle relationnel déduit de la modélisation ci-dessus est le suivant. Les clés primaires sont soulignées. Les clés étrangères sont précédées d'un '#'.

Revue(Nom, Périodicité)


Cette relation est déduite du passage au relationnel de l'ensemble d'entités (ou classe) Revue.

Numéro(ID, Année, #NomRevue, NbPages)

Cette relation est issue du passage au relationnel de l'ensemble d'entités (classes) Numéro, qui est un ensemble d'entités faibles (ou une association qualiée) de Revue. La clé primaire de la relation Numéro est donc composée du couple (ID, Année) qui identie un numéro pour une revue donnée et de l'attribut #NomRevue, clé étrangère faisant référence à la clé primaire de la relation Revue (c'est-à-dire faisant référence à la revue à laquelle le numéro est relatif).

Auteur(ID, Nom, Prénom, Email)

Cette relation est déduite du passage au relationnel de l'ensemble d'entités (ou classe) Auteur.

Article(Titre, Contenu)

Cette relation est déduite du passage au relationnel de l'ensemble d'entités (ou classe) Article.

Ecriture(#Titre, #IDAuteur)

Cette relation est déduite du passage au relationnel de l'association entre Article et Auteur.
En eet, un article peut être écrit par plusieurs auteurs et un auteur peut écrire plusieurs articles. L'attribut #Titre est une clé étrangère qui fait référence à la clé primaire de la relation Titre. L'attribut #IDAuteur est une clé étrangère qui fait référence à la clé primaire de la relation Auteur.

Publication(#Titre, #NomRevue, #IDNuméro, #AnnéeNuméro, PageDébut, PageFin)


Cette relation est déduite du passage au relationnel de l'association entre Article et Numéros.
La clé primaire de la relation est composée du titre de l'article publié (identié par #Titre) et du numéro dans lequel l'article apparaît (identié par le triplet #NomRevue, #IDNuméro, #AnnéeNuméro). L'attribut #Titre est une clé étrangère qui fait référence à la clé primaire de la relation Titre. Les attributs (#NomRevue, #IDNuméro, #AnnéeNuméro) forment une clé étrangère qui fait référence à la clé primaire de la relation Numéro. Il faut bien noter, ici, qu'une clé étrangère fait toujours référence à la clé primaire d'une autre relation. Or, dans cet exemple, la clé primaire de la relation Numéro est composée de trois attributs qui doivent également apparaître dans toutes clés étrangères y faisant référence. Il ne faut pas non plus oublier d'ajouter dans la relation Publication les attributs PageDébut et PageFin qui caractérise l'association est_publié_dans.

Référence(#TitreArticleRéférençant, #TitreArticleRéférencé, #NomRevueArticleRéférencé,
#IDNuméroArticleRéférencé, #AnnéeNuméroArticleRéférencé
)


Cette relation est déduite du passage au relationnel de l'association entre l'ensemble d'entités (ou la classe) Article et l'agrégat (ou la classe-association) regroupant Numéro et Article. Les noms des attributs sont particulièrement longs pour que la sémantique soit claire. L'attribut #TitreArticleRéférençant est une clé étrangère qui fait référence à la clé primaire de la relation Article. Cet attribut représente le titre de l'article référençant (contenant une référence à un article publié dans un numéro). L'attribut #TitreArticleRéférencé est une clé étrangère qui fait référence à la clé primaire de la relation    Article. Cet attribut représente le titre de l'article référençé. Les attributs (#NomRevueArticleRéférencé, #IDNuméroArticleRéférencé,
#AnnéeNuméroArticleRéférencé) forment une clé étrangère qui fait référence à la clé primaire de la relation Numéro. Ils représentent le numéro de la revue dans lequel a été publié l'article référencé.

0 commentaires:

Enregistrer un commentaire

Share

Twitter Delicious Facebook Digg Stumbleupon Favorites

 

IP