9 Une Etude de Cas

Transcription

9 Une Etude de Cas
9
Une Etude de Cas
On va modéliser un même ensemble d’informations à l’aide des 3 modèles : relationnel,
à objet, et semi-structuré.
But : illustrer analogies et différences entre les trois approches, limites respectives, etc.
208
La BD des BD
Une bande dessinée a un ou plusieurs auteurs, qui sont scénaristes ou/et dessinateurs
et/ou coloristes de l’ouvrage en question. Elle a un unique éditeur, un unique titre, un
unique ISBN, un unique format et un unique prix.
Les mangas sont des bandes dessinées particulières, qui n’ont pas de coloriste mais ont
un attribut supplémentaire, sens de lecture, qui vaut gauche droite ou droite gauche.
Un auteur a un nom, parfois un prénom, une ou plusieurs adresses, parfois une
thématique, et parfois il est sous contrat d’exclusivité avec un éditeur.
Un éditeur a un nom, une adresse et parfois a des auteurs sous contrats.
Les adresses sont constituées d’un numéro, d’un nom de rue, d’une ville et d’un pays.
209
Une Modèlisation Relationnelle
Une parmi les modèlisations possibles crée un schéma avec 9 tables : BD pas Mangas,
Mangas, Editeur, Infos Auteur, Auteur Adresses, Auteur Oeuvres Pas Mangas
Auteur Oeuvres Mangas, Contrats.
Chaque schéma de table est en BCNF (Forme Normale de Boyce Codd).
⇒
210
BD pas M angas :
titre
ISBN
long
larg
prix
Idente dit
Dépendances Fonctionnelles F :
{ISBN → titre, long, larg, prix, Ident edit}
Clé : ISBN
Ce schéma de table est en BCNF : les seules dépendances fonctionnelles significatives
sont celles à partir de la clé.
211
Editeur
Ident edit
Nom edit
num rue ed
rue ed
ville ed
pays ed
Dépendances Fonctionnelles F :
{Ident edit → N om edit, num rue ed, rue ed, ville ed, pays ed}
Clé : Ident edit.
Ce schéma de table est en BCNF.
212
Inf os Auteur :
NSS
nom
prenom
thematique
Dépendances Fonctionnelles F : {N SS → nom, prenom, thematique}
Clé : NSS
Ce schéma de table est en BCNF.
213
M angas : même table que pour BD pas Mangas, avec, en plus, l’attribut
sens de lecture, dont le domaine est {“GD ′′ , “DG′′ } (de gauche à droite, de droite à
gauche).
Dépendances Fonctionnelles F : les mêmes que pour BD pas Mangas, plus
ISBN → sens de lecture.
Clé : ISBN
Ce schéma de table est en BCNF.
214
Inf os Auteur :
NSS
nom
prenom
thematique
Dépendances Fonctionnelles F : {N SS → nom, prenom, thematique}
Clé : NSS
Ce schéma de table est en BCNF.
215
Auteur Adresses :
NSS
num rue aut
rue aut
ville aut
pays aut
Dépendances Fonctionnelles F : seulement la dépéndance banale :
N SS, num rue aut, rue aut, ville aut, pays aut → N SS, num rue aut, rue aut, ville aut,
Clé : {N SS, num rue aut, rue aut, ville au, pays aut}.
Ce schéma de table est en BCNF.
NB : Le fait qu’il faut tous les attributs dans la clé est du à l’hypothèse qu’un auteur peut
avoir plusieurs adresses, au fait que 2 adresses distinctes peuvent contenir le même
numéro, où la même rue, où la même ville, ou le même pays (mais pas coincider sur
tout), et, enfin, à l’hypothèse (implicite) que deux auteurs peuvent vivre à la même
adresse.
216
Auteur Oeuvres P as M angas :
NSS
ISBN
scen
col
dessin
où le domaine est le même pour les attributs scen, col et dessin : l’ensemble des booléens
{True, False} (l’auteur est scénariste ou pas, coloriste ou pas, déssinateur ou pas, pour la
bd en question).
Dépendances Fonctionnelles F : {N SS, ISBN → N SS, ISBN, scen, col, dessin}
Clé : {N SS, ISBN }.
Ce schéma de table est en BCNF.
NB : il faut les 2 attributs dans la clé, car un auteur peut avoir réalisé plusieurs oeuvres,
et une oeuvre peut avoir plusieurs auteurs. Et puis, un auteur donné peut être juste
scénariste pour une bande déssinnée, mais scénariste et déssinateur pour une autre, etc.
217
Auteur Oeuvres M angas :
NSS
ISBN
scen
dessin
où le domaine est le même pour les attributs scen, dessin : l’ensemble des booléens
{True, False} (l’auteur est scénariste ou pas, déssinateur ou pas, pour la manga en
question).
Dépendances Fonctionnelles F : {N SS, ISBN → N SS, ISBN, scen, dessin}
Clé : {N SS, ISBN }.
Ce schéma de table est en BCNF.
NB : On a juste enlévé col de la table Auteur Ouvres P as M angas. Mais il faudrait
de quelque façon séparer les ISBN des mangas des ISBN des pas mangas... Passons.
218
Contrats :
NSS
Ident ed
Dépendances Fonctionnelles F : {N SS ⇒ Ident ed} car un auteur est sous contrat
exclusivement avec un éditeur (tandis qu’un éditeur peut avoir plusieurs auteurs sous
contrat).
Clé : {N SS}.
Ce schéma de table est en BCNF.
219
On n’a pas exprimé la contrainte qu’un auteur a forcement au moins une adresse, sauf si
on pose la contrainte (naturelle) :
πN SS (Inf os Auteur) = πN SS (Auteur Adresses)
=
πN SS (πN SS (Auteur Oeuvres P as M angas) ∪ πN SS (Auteur Oeuvres P as M angas))
N.B. Grâce à la table Auteur Oeuvres P as M angas, on peut reperer pour quelle bd
un auteur est seulement scénariste et pour quelle autre est aussi déssinateur, par exemple,
et idem pour Auteur Oeuvres M angas. Et on a exprimé aussi la contrainte que les
mangas n’ont pas de coloriste.
220
On n’exprime pas les “parfois”, non plus :
– On n’a pas exprimé qu’un auteur a parfois une thématique (donc il peut aussi ne pas en
avoir) ;
– On n’a pas exprimé qu’un auteur a parfois un prénom.
Pour pallier ces problème, il faudrait admettre des valeurs nulls. Remarquer que le
modèle relationnel “propre” ne veut pas de valeurs nuls ! Cette limite est vraiment
intrinséque au modèle relationnel.
221
N.B. Si jamais on pose aussi les contraintes :
πIden edit (BD pas M angas) ⊆ πIden edit (Contrats)
et
πIden edit (BD pas M angas) ⊆ πIden edit (Contrats)
on n’exprimera pas non plus la contrainte qu’un éditeur a parfois un contrat avec un
auteur (donc il peut ne pas en avoir).
Problème analogue si on pose :
πN SS (Auteur Oeuvres pas M angas) ⊆ πN SS (Contrats)
et
πN SS (Auteur Oeuvre M angas) ⊆ πN SS (Contrats)
222
Une Modèlisation Objet
Une parmi les modèlisations possibles crée un schéma avec 5 classes : BD, Auteur,
Editeur, Adresse, Mangas, où Mangas est une sous-classe de la classe BD.
NB : pas de correspondance exacte avec les tables relationnelles (mais on aurait pu faire
autrement, et ne pas utiliser de sous-classes, par exemple).
⇒
223
class BD (key ISBN extent les_bd) {
attribute string titre;
attribute integer ISBN;
attribute format struct dimensions{float long, float larg} format;
attribute float prix;
relationship <Auteur> a_scénariste inverse Auteur::scénariste_de;
relationship <Auteur> a_déssinateur inverse Auteur::scénariste_de;
relationship <Auteur> a_coloriste inverse Auteur::coloriste_de;
relationship Editeur a_éditeur inverse Editeur édite}
class Mangas extends BD (extent les_mangas)
attribute enum directions{GD,DG} sense_lecture
224
class Auteur (key NSS extent les_auteurs) {
attribute integer NSS
attribute string nom;
attribute string prénom;
attribute string thématique;
relationship Set<BD> scénariste_de inverse BD::a_scénariste
relationship Set<BD> déssinateur _de inverse BD::a_déssinateur
relationship Set<BD> coloriste_de inverse BD::a_coloriste
relationship Set<Adresse> a_adresse inverse Adresse::adresse_de;
relationship Editeur contrat_avec_ed inverse Editeur contrat_avec_aut}
class Editeur (key Ident\_edit extent les_editeurs) {
attribute integer Ident\_edit
attribute string nom;
relationship Adresse éd_a_adresse inverse Adresse::adresse_de_éd;
relationship Set<Auteur> contrat_avec_aut inverse Auteur contrat_avec_ed;
relationship Set<BD> edite inverse BD a_éditeur}
225
class Adresse (key (num, rue, ville, pays) extent les_addresses) {
attribute integer num;
attribute string rue;
attribute string ville;
attribute string pays;
relationship Set<Editeur> adresse_de_éd inverse Editeur::éd_a_adresse;
relationship Set<Auteur> adresse_de inverse Auteur::a_adresse;
relationship Set<Auteur> contrat_avec_aut inverse Auteur contrat_avec_ed}
226
On n’a pas exprimé :
1. La contrainte qu’un auteur a forcement au moins une adresse (notre déclaration
permet qu’un auteur ait un ensemble vide d’adresses ; pourquoi ?).
2. La contrainte qu’une Manga n’a jamais de coloriste (à cause de la relation de
sous-classe ; mais on aurait pu l’éviter).
N.B. On peut reperer pour quelle bd un auteur est seulement scénariste et pour quelle
autre est aussi déssinateur, par exemple.
227
On n’exprime pas les “parfois”, non plus :
– on n’a pas exprimé qu’un auteur a parfois une thématique (comme pour le relationnel).
– on n’a pas exprimé qu’un auteur a parfois un prénom (comme pour le relationnel).
– on n’a pas exprimé qu’un auteur a parfois un contrat.
Comme pour le relationnel, cette mauvaise gestion des “parfois” est intrinséque :
ODL ne permet pas de faire la différence entre :
- la contrainte qu’un objet o d’une classe C1 est lié à un nombre indeterminé n d’objets
de C2 (n ≥ 0)
- la contrainte qu’un objet o d’une classe C1 est lié à un nombre n d’objets de C2 où
n ∈ {0, 1}.
Pourquoi ?
228
Une modèlisation semi-structurée
Un DTD que l’on peut écrire : ⇒
229
<!ELEMENT (bande_dessinnée)+, auteur+,editeur+>
<!ELEMENT bande_dessinée (manga|pas-manga)>
<!ELEMENT pas_manga (titre,format,prix)>
<!ATTLIST pas_manga ISBN ID #REQUIRED a_scénariste IDREF #REQUIRED
a_déssinateur IDREF #REQUIRED a_coloriste IDREF #IMPLIED
a_editeur IDREF #REQUIRED>
<!ELEMENT manga (titre,format,prix)>
<!ATTLIST ISBN ID #REQUIRED a_scénariste IDREF #REQUIRED
a_déssinateur IDREF #REQUIRED a_editeur IDREF #REQUIRED
sens_lecture (GD|DG)>
<!ELEMENT titre PCDATA>
<!ELEMENT titre CDATA>
<!ELEMENT format (long,larg)>
<!ATTLIST format unité_més CDATA #REQUIRED>
<!ELEMENT prix CDATA>
<!ATTLIST prix dévise CDATA #REQUIRED>
<!ELEMENT long CDATA>
230
<!ELEMENT larg CDATA>
<!ELEMENT auteur (nom,prenom?, (adresse)+,thématique?)>
<!ATTLIST auteur NSS_aut ID #REQUIRED réalise IDREFS #REQUIRED
contrat_avec_ed IDREF #IMPLIED>
<!ELEMENT nom PCDATA>
<!ELEMENT prenom PCDATA>
<!ELEMENT thématique PCDATA>
<!ELEMENT adresse (numéro, rue, ville, pays)>
<!ELEMENT numéro CDATA>
<!ELEMENT rue PCDATA>
<!ELEMENT ville PCDATA>
<!ELEMENT pays PCDATA>
<!ELEMENT editeur (nom,adresse)>
<!ATTLIST editeur NSS_ed ID #REQUIRED édite IDREFS #REQUIRED
contrat_avec_aut IDREFS #IMPLIED>
231
On exprime :
– Les mangas sont des BD ;
– La contrainte qu’un auteur a forcement au moins une adresse (on a le + !)
– La contrainte qu’une Manga n’a jamais de coloriste.
– Pour une bd un auteur est seulement scénariste et pour une autre est aussi déssinateur,
par exemple.
232
On exprime les “parfois” :
– Un auteur a parfois une thématique (fils thématique ? de auteur) ;
– Un auteur a parfois un prénom (prénom ?).
– Un auteur a parfois un contrat (L’attribut contrat avec ed de auteur est
optionnel)
N.B. La possibilité de déclarer balise ? dans le DTD permet d’exprimer qu’une
relation lie un individu x à 0 ou 1 individus, chose qui ni le relationnel ni l’objet
permettent de faire.
233
At-on exprimé la contrainte qu’un cible d’un lien a scénariste doit forcement être
un noeud auteur ? (Même question pour a déssinateur et a coloriste).
Non : on peut écrire un document xml où, pour une bd, a scénariste pointe à une
autre bd, par exemple, et le document sera validé !
En général, dans un DTD on ne peut pas spécifier la balise attendue pour la cible d’un
attribut de type IDREF ou IDREFS !
En XML-schéma non plus, d’ailleurs.
234