Vous êtes sur la page 1sur 128

Ce document constitue lannexe A de louvrage "Bases de donnes", J-L Hainaut, Dunod, 2012

Date de dernire modification : 8/6/2012

Annexe A A1

Exercices et solutions

Cette annexe propose une collection dexercices, certains assortis


dune suggestion de solution, et classs selon les chapitres de
louvrage. Elle reprend intgralement les exercices qui apparaissent en
fin de chapitres.
Les solutions sont donnes titre indicatif et de bonne foi. Lauteur ne
peut en aucune manire garantir quelles sont ni correctes ni, quand
bien mme elles le seraient, quelles sont les meilleures ou quelles
sont appropries aux besoins spcifiques du lecteur.

A.1 CHAPITRE 1 - MOTIVATION ET INTRODUCTION


Nant

A.2 CHAPITRE 2 - CONCEPTS DES BASES DE DONNES

2.1 On considre le bon de commande papier de la figure 1, quon se propose


dencoder sous la forme de donnes introduire dans la base de donnes de la
figure 2.8. Quen pensez-vous ?
Solution
Les donnes de ce bon de commande prsentent plusieurs anomalies qui en
empcheront lintroduction dans la base de donnes.
Numro de commande dj prsent dans la BD. Violation dune contrainte
dunicit.
2 Annexe A Exercices et solutions

Date de commande invalide. Violation du domaine de valeurs.


Numro de client inexistant. Violation dune contrainte rfrentielle.
Adresse du client manquante. Violation du caractre obligatoire dune
colonne.

Commande N : 30186 Date : 30/2/2009

Numro client B516


Nom ASSRAN
Adresse
Localit Cassis

N PRODUIT LIBELLE PRODUIT PRIX QUANTITE SOUS-TOTAL

PA45 POINTE ACIER 45 (20K) 105 un 105


PA45 POINTE ACIER 45 (20K) 95 trois 285

TOTAL COMMANDE 422

Figure A.1 - Un bon de commande curieux

Deux dtails rfrencent le mme produit. Violation dune contrainte


dunicit (identifiant de DETAIL).
Les quantits sont exprimes en caractres. Violation du domaine de valeurs.
Le produit PA45 possde deux prix. Violation dune dpendance
fonctionnelle.
Le montant total est incorrect. Sans importance, il sagit dune donne
calcule non enregistre.

2.2 Vrifier si le schma ci-dessous est normalis. Si ncessaire, le dcomposer


en tables normalises.

CLIENT ADRESSE, DELEGUE


DELEGUE REGION

Solution
La colonne REGION dpend dune colonne qui nest pas un identifiant. La
table nest pas normalise. On la dcompose en deux tables VENTE(NPRO,
CLIENT, DATE, QUANTITE, ADRESSE, DELEGUE) et REP(DELEGUE,
REGION). Ensuite, dans la nouvelle table VENTE, les colonnes ADRESSE et
DELEGUE dpendent dune colonne qui nest pas un identifiant. Par
dcomposition, on obtient le schma ci-dessous :
VENTE(NPRO, CLIENT, DATE, QUANTITE)
A.2 Chapitre 2 - Concepts des bases de donnes 3

CLI(CLIENT, ADRESSE, DELEGUE)


REP(DELEGUE, REGION)
Deux cls trangres : CLIENT de VENTE et DELEGUE de CLI.

2.3 Dcomposer si ncessaire la table ci-dessous.

NCLI NOM
NPRO LIBELLE

Solution
La colonne NOM dpend dune colonne qui nest pas un identifiant. La table
nest pas normalise. On la dcompose en deux tables COMMANDE(NCOM,
NCLI, DATE, NPRO, LIBELLE) et CLIENT(NCLI, NOM). Ensuite, dans la
nouvelle table COMMANDE, la colonnes LIBELLE dpend dune colonne qui
nest pas un identifiant. Par dcomposition, on obtient le schma ci-dessous :
COMMANDE(NCOM, NCLI, DATE, NPRO)
CLIENT(NCLI, NOM)
PRODUIT(NPRO, LIBELLE)
Deux cls trangres : NCLI de COMMANDE et NPRO de COMMANDE.

2.4 Dcomposer si ncessaire la table ci-dessous.

DATE_INTRO, IMPORTATEUR AGREATION

Solution
La colonne AGREATION dpend de colonnes qui ne forment pas un identifiant.
La table nest pas normalise. On la dcompose en deux tables
PRODUIT(NPRO, DATE_INTRO, IMPORTATEUR) et AGRE(DATE_INTRO,
IMPORTATEUR, AGREATION). Une cl trangre : (DATE_INTRO,
IMPORTATEUR) de PRODUIT.
J-L Hainaut - 2009
4 Annexe A Exercices et solutions

A.3 CHAPITRE 3 - MODLE RELATIONNEL ET NORMALISATION

3.1 Dcomposer si ncessaire la relation ACHAT.


ACHAT(NCOM, NPRO, PRIX)
NCOM NPRO
NPRO PRIX

Solution
Lidentifiant de ACHAT est {NCOM}. La DF NPRO PRIX est donc
anormale. Par dcomposition selon cette DF, on obtient le schma relationnel
normalis :
ACHAT(NCOM, NPRO); PRODUIT(NPRO, PRIX);
ACHAT[NPRO] PRODUIT[NPRO]

3.2 Dcomposer si ncessaire la relation COMMANDE.


COMMANDE(NCOM, NCLI, NOM, DATE, NPRO, LIBELLE)
NCOM NCLI, DATE, NPRO
NCLI NOM
NPRO LIBELLE

Solution
Lidentifiant de COMMANDE est {NCOM}. Les DF NCLI NOM et NPRO
LIBELLE sont donc anormales. Par dcomposition selon chacune de ces
DF, on obtient le schma relationnel normalis :
COMMANDE(NCOM, NCLI, DATE, NPRO);
CLIENT(NCLI, NOM); PRODUIT(NPRO, LIBELLE);
COMMANDE[NCLI] CLIENT[NCLI]
COMMANDE[NPRO] PRODUIT[NPRO]

3.3 Dcomposer si ncessaire la relation ACHAT2.


ACHAT2(CLI, PRO, MAG, PRIX)
PRO, MAG PRIX

Solution
Lidentifiant de ACHAT2 est {CLI, PRO, MAG}. La DF PRO, MAG PRIX
est donc anormale. On obtient par dcomposition :
ACHAT2(CLI, PRO, MAG); TARIF(PRO, MAG, PRIX));
ACHAT2[PRO, MAG] TARIF[PRO, MAG]

3.4 Dcomposer si ncessaire la relation ACHAT3.


ACHAT3(CLI, PRO, MAG, PRIX)
CLI, PRO, MAG PRIX
A.3 Chapitre 3 - Modle relationnel et normalisation 5

Solution
Lidentifiant de la relation ACHAT3 est {CLI, PRO, MAG}. Celle-ci est donc
normalise.

3.5 Dcomposer si ncessaire la relation ECRIT (POSITION indique la position de


lauteur dans la liste des auteurs).
ECRIT(AUTEUR, OUVRAGE, POSITION)
AUTEUR, OUVRAGE POSITION
OUVRAGE, POSITION AUTEUR

Solution
Le graphe ADF comporte un circuit. Les identifiants de la relation ECRIT
sont {AUTEUR, OUVRAGE} et {OUVRAGE, RANG}. Celle-ci est normalise.

3.6 Calculer les identifiants de la relation CINE. Dcomposer cette relation si


ncessaire.
CINE(FILM, VILLE, SALLE, DISTRIBUTEUR, DELEGUE)
SALLE VILLE
FILM, VILLE SALLE, DISTRIBUTEUR
DISTRIBUTEUR DELEGUE

Solution
Le graphe ADF comporte un circuit. Les identifiants sont {FILM, VILLE} et
{SALLE, FILM}. Les deux DF suivantes sont donc anormales : SALLE
VILLE et DISTRIBUTEUR DELEGUE. Cette dernire tant externe, elle
permet une premire dcomposition :
CINE(FILM, VILLE, SALLE, DISTRIBUTEUR);
DIS(DISTRIBUTEUR, DELEGUE);
CINE[DISTRIBUTEUR] DIS[DISTRIBUTEUR]
SALLE VILLE
FILM, VILLE DISTRIBUTEUR
La DF FILM, VILLE DISTRIBUTEUR, non anormale, est externe et ne
fait pas partie du noyau irrductible. Elle peut donc faire lobjet dune
dcomposition :
CINE(FILM, VILLE, SALLE);
DISTR(FILM, VILLE, DISTRIBUTEUR);
DIS_DEL(DISTRIBUTEUR, DELEGUE);
CINE[FILM, VILLE] DISTR[FILM, VILLE]
DISTR[DISTRIBUTEUR] DIS_DEL[DISTRIBUTEUR]
SALLE VILLE
Le noyau rsiduel {FILM, VILLE, SALLE} est irrductible et non normalis.
J-L Hainaut - 2009

Selon le canevas 3.8.5, la dernire relation CINE peut tre remplace par un
des trois schmas ci-dessous :
1. CINE(FILM, VILLE, SALLE); SALLE VILLE
2. CINE(FILM, SALLE); LOC(SALLE, VILLE);
6 Annexe A Exercices et solutions

CINE[SALLE] = LOC[SALLE]
CINE*LOC: FILM, VILLE SALLE
3. CINE(FILM, VILLE, SALLE); LOC(SALLE, VILLE);
CINE[SALLE, VILLE] = LOC[SALLE, VILLE]

3.7 Cet exercice est une extension de lnonc 3.7 de louvrage (3.7 Dmontrer
que la rgle de pseudo-transitivit est drivable des autres).
La version populaire des rgles dArmstrong en comporte six. En ralit, trois
dentre elles (rflexivit, augmentation, transitivit) sont suffisantes car elle
permettent de driver les trois autres (additivit, dcomposabilit, pseudo-
transitivit). Dmontrer cette drivation.

Solution
Rappel des trois rgles de base (sous une forme un peu plus gnrale que dans
louvrage)
rflexivit : L K K L
augmentation : K L KM LM
transitivit : K L L M K M
Dmonstrations
additivit : K L M N KM LN
1. Par rflexivit, on a M M
2. Par additivit, K L et M M donnent KM LM
1. Par rflexivit, on a L L
2. Par additivit, M N et L L donnent LM LN
3. Par transitivit, KM LM et LM LN donnent KM LN
Application intressante : K L K N K LN
dcomposabilit : K LM K L K M
1. Par rflexivit, on a L L
2. Par augmentation de L L par M on obtient LM L
3. Par transitivit, K LM et LM L donnent K L
De mme pour, K M
pseudo-transitivit : K L LM N KM N
1. Par rflexivit, on a M M
2. Par additivit, K L et M M donnent KM LM
3. Par transitivit, KM LM et LM N donnent KM N

3.8 Dcomposer si ncessaire la relation VENTE.


VENTE(NPRO, CLIENT, DATE, QUANTITE, ADRESSE, DELEGUE, REGION)
NPRO, CLIENT, DATE QUANTITE
CLIENT ADRESSE, DELEGUE
DELEGUE REGION
A.3 Chapitre 3 - Modle relationnel et normalisation 7

3.9 Dcomposer si ncessaire la relation PRODUIT.


PRODUIT(NPRO, DATE-INTRO, IMPORTATEUR, AGREATION)
NPRO IMPORTATEUR
NPRO DATE-INTRO
DATE-INTRO, IMPORTATEUR AGREATION

3.10 Dcomposer si ncessaire la relation VOYAGE.


VOYAGE(NUMV, NUMC, DATE, MODELE, NOM)
NUMC NOM
NUMV MODELE

3.11 Calculer les identifiants de la relation PROJET. Dcomposer cette relation si


ncessaire.
PROJET(CODE, TITRE, NUM-CONTRAT, BUDGET, RESPONSABLE, UNITE)
CODE TITRE, BUDGET
NUM-CONTRAT CODE, RESPONSABLE
TITRE NUM-CONTRAT, UNITE

Solution
Le graphe ADF comporte un circuit comprenant les attributs {CODE, NUM-
CONTRAT, TITRE}. Les identifiants sont {CODE}, {NUM-CONTRAT} et
{TITRE}. Chacun des dterminants est un identifiant. La relation PROJET est
donc normalise.

3.12 Calculer les identifiants de la relation ACHAT4. Dcomposer cette relation si


ncessaire.
ACHAT4(CLIENT, FOURN, ADR-F, ARTICLE, PRIX, DELAI)
CLIENT, ARTICLE FOURN, PRIX
FOURN ARTICLE, ADR-F
ARTICLE, FOURN DELAI

Solution
Identifiants : {CLIENT, ARTICLE} et {CLIENT, FOURN}. Il existe des DF
anormales rendant la relation ACHAT4 non normalise.
Dpendances de base : on observe que la DF ARTICLE, FOURN DELAI
n'est pas minimale; il faut la rduire FOURN DELAI, ce qui va
simplifier les choses. On rcrit donc lnonc comme suit :

ACHAT4(CLIENT, FOURN, ADR-F, ARTICLE, PRIX, DELAI)


CLIENT, ARTICLE FOURN, PRIX
J-L Hainaut - 2009

FOURN ADR-F, ARTICLE, DELAI

On conserve des contraintes d'galit lors des dcompositions. On rectifiera


la fin si ncessaire.
8 Annexe A Exercices et solutions

0) Premire passe

R1(CLIENT, ARTICLE, PRIX)


R2(FOURN, ADR-F)
R3(FOURN, DELAI)
R4(CLIENT, ARTICLE, FOURN)
R4: FOURN ARTICLE
R2[FOURN] = R3[FOURN] = R4[FOURN]
R4[CLIENT, ARTICLE] = R1[CLIENT, ARTICLE]

R4 constitue un noyau irrductible non normalis.

1) La peste (3FN)

R23(FOURN, ADR-F, DELAI)


R14(CLIENT, ARTICLE, PRIX, FOURN)
R14: FOURN ARTICLE
R14[FOURN] = R23[FOURN]

2) Le cholra (FNBC)

R1(CLIENT, ARTICLE, PRIX)


R2(FOURN, ADR-F)
R3(FOURN, DELAI)
R4'(FOURN, ARTICLE)
R4"(CLIENT, FOURN)
R4'*R4": CLIENT, ARTICLE FOURN
R2[FOURN] = R3[FOURN] = R4'[FOURN] = R4"[FOURN]
R4'*R4"[CLIENT, ARTICLE] = R1[CLIENT, ARTICLE]
Cette dernire contrainte drive directement de celle du cas (1)
Les contraintes dgalit nous autorisent simplifier ce schma comme suit :
R1(CLIENT, ARTICLE, PRIX)
R234'(FOURN, ADR-F, DELAI, ARTICLE)
R4"(CLIENT, FOURN)
R4'*R234": CLIENT, ARTICLE FOURN
R234'[FOURN] = R4"[FOURN]
R234'*R4"[CLIENT, ARTICLE] = R1[CLIENT, ARTICLE]

3) La peste et le cholra (FNCE)

R23(FOURN, ADR-F, DELAI)


R14(CLIENT, ARTICLE, PRIX, FOURN)
R4'(FOURN, ARTICLE)
R14[FOURN] = R23[FOURN]
R14[FOURN, ARTICLE] = R4'[FOURN, ARTICLE]

Les contraintes dgalit nous autorisent simplifier ce schma comme suit :


R234'(FOURN, ADR-F, DELAI, ARTICLE)
R14(CLIENT, ARTICLE, PRIX, FOURN)
A.3 Chapitre 3 - Modle relationnel et normalisation 9

R14[FOURN, ARTICLE] = R234'[FOURN, ARTICLE]

4) Clture
Il reste attribuer des noms significatifs aux relations et prciser les contraintes
dinclusion.

3.13 En vous servant des proprits des contraintes dinclusion, affinez les
dfinitions suivantes :
OFFRE(PRODUIT, FOURN)
COMMANDE(CLIENT, PRODUIT, FOURN, DATE, QTE)
COMMANDE[PRODUIT, FOURN] LIVRE[PRODUIT, FOURN]

3.14 On considre une base de donnes comportant les deux relations


PAYS(NOM, CAPITALE)
VILLE(NOM, PAYS)
PAYS reprend pour chaque pays son nom et celui de sa capitale tandis que
VILLE reprend pour chaque ville son nom et celui de son pays. Sachant qu'il
n'y a pas deux pays de mme nom, ni deux villes de mme nom dans un
mme pays, compltez le schma de cette base de donnes.

3.15 Selon les proprits des contraintes dinclusion, la relation CLIENT(NCLI,


NOM, ADRESSE, LOCALITE) ne contient-elle pas une cl trangre ?

3.16 Lorsque vous aurez matris le langage SQL DDL (chapitre 6), si par hasard
vous repassez par ici, essayez de traduire en SQL les structures de la solution
c (La peste et le cholra) de la section 3.8.5.

3.17 En analysant les donnes de la relation ci-dessous, dterminer les


dpendances fonctionnelles dont elle est le sige. Parmi celles-ci, quelles sont
celles qui semblent pertinentes ?

NumPiece Description Fournisseur AdresseFournisseur Prix


10010 750 GB Disk Seagate Washington 120
10010 750 GB Disk Samsung Versailles 120
10220 2 GB RAM card Kensington Londres 95
10220 2 GB RAM card Samsung Versailles 100
10220 2 GB RAM card Sun Microsystems Palo Alto 100
10440 21" LCD Monitor Samsung Versailles 310

3.18 Un jeune lecteur de Carpentras nous crit pour nous faire part de ses doutes
sur le procd de normalisation dcrit la section 3.8.4. Il estime par exemple
J-L Hainaut - 2009

que le schma suivant :


FAB(USINE, PRODUIT, ADRESSE, DESCRIPTION)
USINE ADRESSE
PRODUIT DESCRIPTION
10 Annexe A Exercices et solutions

peut tout aussi bien se dcomposer comme suit1 :


U(USINE, ADRESSE)
P(PRODUIT, DESCRIPTION)
U*P: USINE, PRODUIT ADRESSE, DESCRIPTION
Quen pensent les autres lecteurs ?

3.19 La version populaire des rgles dArmstrong en comporte une sixime, la


pseudo-transitivit, qui snonce comme suit.
Si on a K L et LA M, on a aussi KA M.
Dmontrez que cette rgle est drivable des autres.

Solution
Par rflexivit, on a A A. Par additivit, K L et A A donnent KA
LA. Par transitivit, KA LA et LA M donnent KA M. CQFD

1. La jointure U*P, pour laquelle on ne prcise pas les colonnes de jointure, est un produit rela-
tionnel. Cet oprateur, qui sera dcrit la section 8.4, correspond une jointure naturelle dans
laquelle il nexisterait pas de condition de jointure. Chaque n-uplet de U est associ chaque n-
uplet de P.
A.4 Chapitre 4 - Implmentation des structures de donnes 11

A.4 CHAPITRE 4 - IMPLMENTATION DES STRUCTURES DE


DONNES

4.1 On considre une table dont les lignes sont ranges dans un espace qui lui est
exclusivement rserv et constitu de pages de 4 Ko. Chaque ligne occupe
une seule page. Cet espace est implant sur un disque de notre modle de
rfrence (figure 4.6). La table contient 1 000 000 lignes dune longueur de
200 octets. Le taux doccupation moyen des pages est de 75%. Calculer le
volume minimal de cet espace de stockage et le temps de lecture squentielle
de toutes les lignes de cette table.

Solution
Capacit dune page : Mrpp = Lp / Lr = 20 enregistrements par page.
Contenu effectif dune page : Nrpp = x Mrpp = 15 enregistrements par page.
Volume minimal de lespace : Np = Nr / Nrpp = 66 667 pages ou 261 Mo.
Temps de lecture squentielle de la table (hypothse de lecture anticipe
dune piste, soit tls1 = 0,145 ms par page) : tls = tls1 x Np = 9,67 s.

4.2 Une table APPEL, reprsentant des appels tlphoniques, comporte 6 000 000
lignes dune longueur fixe de 200 octets. Elle dispose dun identifiant
constitue de la colonne ID de 40 caractres, sur laquelle on dfinit un index.
La table est stocke dans un espace qui lui est rserv, implant sur un disque
du modle de rfrence, dcompos en pages de 8 Ko. On envisage trois
techniques dimplmentation de lindex sur ID : index primaire en squentiel
index, index primaire en calcul, index secondaire sur fichier en vrac.
Calculer dans chaque cas le volume minimal de lespace de stockage et le
temps daccs via ID.

Solution
On admet que dans les trois organisations le taux doccupation moyen du
fichier de base est b = 0,8. La capacit dune page est Mrpp = Lp / Lr = 40
enregistrements. Son contenu effectif moyen est Nrpp = b x Mrpp = 32
enregistrements. La taille du fichier de base est donc Npb = Nr / Nrpp =
187 500 pages.
Index primaire en squentiel index (SI).
Compte tenu dun taux de remplissage des pages dindex de i = 0,8 et de
pointeurs de page de 4 octets, on calcule Li = 44 octets, Mipp = Lp / Li = 186
entres par page et Nipp = i x Mipp = 148,8 entres par page. On en dduit Npi
= Npi(3) + Npi(2) + Npi(1) = 1 261 + 9 + 1 = 1 271 pages et n = 3 (aussi
J-L Hainaut - 2009

calculable par n = logNippNpb = ln Npb / ln Nipp = 2,427 = 3). Taille du


fichier Np = Npb + Npi. = 187 500 + 1 271 = 188 771 pages. Le calcul simplifi
Npi Npi(n) conduit une erreur totalement ngligeable de 10 pages, soit
0,0053%.
12 Annexe A Exercices et solutions

Le temps daccs via lidentifiant est celui de 4 lectures de pages, soit 49,2
ms. Compte tenu dun verrouillage des deux premiers niveaux dindex (10
pages) dans le tampon, ce temps tombe 2 lectures de pages, soit 24,6 ms. Si
le tampon peut en outre accueillir 1 261 pages supplmentaires, le temps
daccs nest plus que de 12,3 ms.
Index primaire en calcul.
Lespace occup par le fichier calcul se limite celui du fichier de base, soit
187 500 pages. Labaque nous donne, pour la courbe Mrpp = 40 et un taux
doccupation de 80% un cot daccs de 1,01 1,02 accs physique, soit 1,015
x 12,3 = 12,5 ms. Laccs ne ncessite pas plus dune page dans le tampon.
Index secondaire sur fichier en vrac.
Le dictionnaire de valeurs de lindex contient Nv = 6 000 000 entres de
Lv = 46 octets (un pointeur denregistrement de 6 octets par entre). On a
donc Mvpp = Lp / Lv = 178 entres par page et Nvpp = v x Mvpp = 142,4
entres par page (v = 0,8). On en dduit la taille du dictionnaire : Npv = Nv /
Nvpp = 42 135 pages. On traite ensuite ce dictionnaire comme un fichier de
base organis en squentiel index. Son index primaire se calcule de manire
classique. On reprend les grandeurs dont nous disposons dj : Li = 44; Mipp =
186; Nipp = 148,8. On a aussi Npi = Npi(3) + Npi(2) + Npi(1) = 284 + 2 + 1 = 287
pages et n = 3. Le volume de lindex secondaire est Nps = Npv + Npi = 42 442
pages. La taille totale du fichier est de Np = Npb + Nps. = 187 500 + 42 442 =
229 942 pages.
Le temps daccs via lidentifiant est de 5 lectures de pages (3 pour lindex du
dictionnaire + 1 pour le dictionnaire + 1 pour le fichier de base), soit 61,5 ms.
Si on verrouille des deux premiers niveaux dindex du dictionnaire (3 pages)
dans le tampon, ce temps est de 3 lectures de pages, soit 36,9 ms. Si le tampon
contient la totalit de lindex du dictionnaire (287 pages), le temps daccs est
de 2 lectures de pages, soit de 24,6 ms. Il est difficile de diminuer ce temps.
En rsum

volume index volume tampon temps daccs


Primaire SI 10 Mo 0,08 ou 10 Mo 24,6 ou 12,3 ms
Primaire calcul 0 0,008 Mo 12,5 ms
Secondaire 332 Mo 0,024 ou 2,25 Mo 36,9 ou 24,6 ms

4.3 Soit un fichier calcul dont Lr = 400 octets, Lp = 4 Ko et rempli 90%.


Combien de lectures par cl peut-on raliser par seconde ?

Solution
La capacit des pages est de Mrpp = Lp / Lr = 5 enregistrements. Labaque
nous donne, labscisse 90, le nombre daccs nk = 1,29, soit un temps
daccs de nk x tla1 = 15,9 ms. La vitesse de lecture est donc de 1/0,0159 = 62
enregistrements par seconde.
A.4 Chapitre 4 - Implmentation des structures de donnes 13

4.4 Quel est le taux doccupation partir duquel il convient de rorganiser un


fichier calcul dont Mrpp = 20 si le temps moyen daccs par cl ne peut
dpasser 15 ms ?

Solution
Un temps de 15 ms correspond 0,015 / tla1 = 1,22 accs physique alatoires.
Pour Mrpp = 20 et nk = 1,22 labaque nous donne un taux doccupation de
96%.

4.5 Quelle taille de page minimum prconiser pour un fichier calcul dont le
temps daccs ne peut dpasser 1,15 accs physiques au taux de remplissage
de 90% ?

Solution
Pour ces donnes, labaque nous indique une valeur Mrpp comprise entre 10
et 20 mais plus proche de 20. La fonction nk = f(Mrpp) prsentant une allure
logarithmique inverse, on estime la taille recherche 15 enregistrements par
page.

4.6 On considre un fichier squentiel FS de 5 000 000 enregistrements de 200


octets. Ces enregistrements sont en dsordre sur les valeurs de lidentifiant.
On se propose de les ranger dans un fichier FC organisation calcule sur
lidentifiant avec gestion des dbordements en zone indpendante.
Ladministrateur de la base de donnes hsite entre deux procdures :
1. lecture squentielle de FS et insertion dans FC des enregistrements succes-
sifs selon la procdure standard,
2. constitution dun 2e fichier squentiel FS constitu des enregistrements de
FS auxquels on ajoute ladresse de base Ab calcule par la fonction f; on
trie FS selon le champ Ab, ce qui produit le fichier squentiel FS"; enfin,
on poursuit selon la procdure 1) partir du fichier FS".
Quelle serait la procdure la plus rapide ?

Solution
Essayons dabord de nous convaincre que la procdure 2, en apparence plus
complexe, est nanmoins tout fait pertinente. Les enregistrements de FS" se
prsentent par ordre croissant de leurs adresses de base. Lors de linsertion
dun enregistrement r dans FC par le SGBD, son adresse de base p est
calcule 2. Si cette adresse est identique celle de lenregistrement prcdent,
ce qui sera le plus souvent le cas, la page de base se trouve dj dans le
tampon. Linsertion de r dans cette page ne demandera donc pas daccs au
J-L Hainaut - 2009

disque. Concrtement, le chargement du fichier calcul se comportera comme

2. Mme si elle est fournie par le champ Ab. Il serait imprudent (et dailleurs illgal) de court-
circuiter la procdure interne de gestion des index du SGBD.
14 Annexe A Exercices et solutions

lcriture des enregistrements successifs dun fichier squentiel lexception


de la gestion des dbordements, mais qui seront relativement rares3.
Nous pouvons prsent calculer le temps dexcution des deux procdures.
On choisit les paramtres suivants pour le fichier calcul en cration : Lp = 4
Ko (donc Mrpp = 20) et ch = 0,9. On en dduit Nrpp = 0,9 x 20 = 18, le
nombre de pages de base Npb = 5 000 000 / 18 = 277 778, le taux
daugmentation des pages ap = 1,27 (donn par le graphique de la figure
4.25 pour Mrpp = 20 et ch = 0,9) et la taille totale du fichier aprs chargement
Np = 1,27 x 277 778 = 352 778 pages.

Procdure standard
Le fichier comporte Nr = 5 000 000 enregistrements dont chacun ncessite (1)
la lecture de sa page de base, (2) la lecture des pages de dbordement
ventuelles, (3) la rcriture de la page de lenregistrement et (4) lorsquune
nouvelle page de dbordement doit tre cre, sa rservation et son lien avec
la page prcdente. Le graphique de la figure 4.26 nous donne, pour Mrpp =
20 et ch = 0,9, la valeur nlp = 1,05, qui indique que moins de 5% des
enregistrements sont en dbordement. Nous pouvons sans risque ignorer
leffet des dbordements au moment du chargement en considrant que
chaque enregistrement ncessite une lecture et une criture de page. Le temps
de chargement est donc :
tch1 = Nr x 2 x tla1 = 5 000 000 x 2 x 0,0123 = 123 000 s (> 34 heures)

Procdure tri pralable


Avec les paramtres Nr = 5 000 000, Lr = 200 , Lp = 4 096 , v = 6 voies, un
tampon de tri initial de 1 000 pages, la feuille de calcul sort.xls nous donne
une estimation du temps de tri de 336 secondes.
Le chargement proprement dit consiste lire squentiellement le fichier FS"
puis crire les enregistrements dans le fichier FC. Cette dernire opration
correspond physiquement au garnissage des pages de base dans lordre de
leurs adresses dans le fichier, cest--dire lcriture squentielle du fichier
(toujours en ignorant leffet des dbordements au moment du chargement,
jug ngligeable). En rsum, le chargement comprend la lecture squentielle
de FS" et lcriture squentielle de FC (attention, les pages de base
prexistant, lcriture exige la lecture dune page puis sa rcriture). On
suppose une lecture anticipe dune piste et la recopie des pages ds quelles
atteignent le contenu dune piste dans le tampon.
La taille de FS" est de 250 000 pages et celle de FC est de 352 778 pages. La
lecture de FS" cote 250 000 x 0,000184 = 46 secondes et lcriture dans FS"

3. Petite inefficacit facile rsoudre par une lecture anticipe et une criture retarde dune piste
(section 4.3.3) puisque tant lespace de base que lespace de dbordement se comportent comme
des (sous-)fichiers squentiels. Ces paramtres de gestion des accs au disque sont gnralement
disponibles au niveau de lespace de stockage.
A.4 Chapitre 4 - Implmentation des structures de donnes 15

cote 2 x 352 778 x 0,000184 = 130 secondes. Au total, le chargement cote


tch2 = 176 secondes soit prs de 3 minutes.
La conclusion simpose delle-mme !

4.7 Lors de la sortie de lUNIVAC I, en 1951, on annonait les performances


suivantes : mmoire centrale de 1 000 mots de 72 bits ou 12 caractres, vitesse
des lecteurs de bande de 500 mots par seconde. On estimait que cette machine
serait capable de trier 100 millions denregistrements de 10 mots en 9 000
heures4. Quel serait le temps dun tel tri aujourdhui, en supposant
lutilisation de 2 voies ?

Solution
Avec les paramtres suivants :
Nr = 100 000 000
Lr = 120 octets
Lp = 4 096
v=6
taille de lespace de tri initial de 2 000 pages
la feuille de calcul donne un temps de 1 heure 30 minutes.

4.8 Limage ci-dessous est celle de ltiquette dun composant dun ordinateur de
bureau. Quelles informations peut-on en tirer ? Il nest pas interdit de faire
appel des sources additionnelles.
J-L Hainaut - 2009

4. Source [Knuth, 1998]. Une telle opration aurait ncessit de nombreuses manipulations, les
bandes magntiques de cette poque ayant une capacit de quelques mga-octets seulement.
16 Annexe A Exercices et solutions

A.5 CHAPITRE 5 - LES SYSTMES DE GESTION DE BASES DE


DONNES
Nant
A.6 Chapitre 6 - Le langage SQL DDL 17

A.6 CHAPITRE 6 - LE LANGAGE SQL DDL

6.1 crire le code SQL DDL correspondant au schma ci-dessous.

CLIENT LOCATION IMMEUBLE


IMM_STORE
NUM_CLI: char (12) NUM_IM: num (8) NUM_IM: num (8)
NOM: char (30) DATE_SIGN: date (8) TYPE: char (6) IMMEUBLE
TITRE: char (7) DATE_RESIL[0-1]: date (8) ADRESSE: varchar (100) LOCATION
ADRESSE: varchar (100) NUM_CLI: char (12) VILLE: char (60)
VILLE: char (60) id: NUM_IM TAXE: num (2)
id: NUM_CLI DATE_SIGN id: NUM_IM CLI_STORE
acc acc acc
ref: NUM_CLI acc: VILLE CLIENT
acc
ref: NUM_IM

Solution
Le code ci-dessous a t gnr par latelier DB-MAIN selon le style Stan-
dard SQL. A noter que ce schma nest pas strictement conforme au standard
SQL2.

-- *********************************************
-- * Standard SQL generation *
-- *-------------------------------------------*
-- * Generator date: Apr 14 2003 *
-- * Generation date: Sun Dec 28 18:17:20 2008 *
-- *********************************************

-- Database Section
-- ________________

create database DUNOD_2009_Ch06;

-- DBSpace Section
-- _______________

create dbspace IMM_STORE;

create dbspace CLI_STORE;

-- Table Section
-- _____________

create table CLIENT (


NUM_CLI char(12) not null,
NOM char(30) not null,
J-L Hainaut - 2009

TITRE char(7) not null,


ADRESSE varchar(100) not null,
VILLE char(60) not null,
primary key (NUM_CLI))
in CLI_STORE;
18 Annexe A Exercices et solutions

create table IMMEUBLE (


NUM_IM numeric(8) not null,
TYPE char(6) not null,
ADRESSE varchar(100) not null,
VILLE char(60) not null,
TAXE numeric(2) not null,
primary key (NUM_IM))
in IMM_STORE;

create table LOCATION (


NUM_IM numeric(8) not null,
DATE_SIGN date not null,
DATE_RESIL date,
NUM_CLI char(12) not null,
primary key (NUM_IM, DATE_SIGN))
in IMM_STORE;

-- Constraints Section
-- ___________________

alter table LOCATION add constraint GRLOCATION


foreign key (NUM_CLI)
references CLIENT;
alter table LOCATION add constraint GRLOCATION_1
foreign key (NUM_IM)
references IMMEUBLE;

-- Index Section
-- _____________
create unique index IDCLIENT
on CLIENT (NUM_CLI);
create unique index IDIMMEUBLE
on IMMEUBLE (NUM_IM);
create index GRIMMEUBLE
on IMMEUBLE (VILLE);
create index GRLOCATION
on LOCATION (NUM_CLI);
create unique index IDLOCATION
on LOCATION (NUM_IM, DATE_SIGN);
A.7 Chapitre 7 - Le langage SQL DML (1) 19

A.7 CHAPITRE 7 - LE LANGAGE SQL DML (1)

a) noncs de type 1

7.1 Afficher les caractristiques des produits (cest--dire, pour chaque produit,
afficher ses caractristiques).
select *
from PRODUIT

7.2 Afficher la liste des localits dans lesquelles il existe au moins un client.
select distinct LOCALITE
from CLIENT

7.3 Afficher le numro, le nom et la localit des clients de catgorie C1


nhabitant pas Toulouse.
select NCLI, NOM, LOCALITE
from CLIENT
where CAT = 'C1'
and LOCALITE <> 'Toulouse'

7.4 Afficher les caractristiques des produits en acier.


select *
from PRODUIT
where LIBELLE like '%ACIER%'

7.5 Donner le numro, le nom et le compte des clients de Poitiers et de Bruxelles


dont le compte est positif.
select NCLI, NOM, COMPTE
from CLIENT
where LOCALITE in ('Poitiers','Bruxelles')
and COMPTE > 0

b) noncs de type 2

7.6 Quelles catgories de clients trouve-t-on Toulouse ?


J-L Hainaut - 2009

select distinct CAT


from CLIENT
where LOCALITE = 'Toulouse'
and CAT is not null
20 Annexe A Exercices et solutions

7.7 Afficher le numro, le nom et la localit des clients dont le nom prcde
alphabtiquement la localit o ils rsident.
select NCLI, NOM, LOCALITE
from CLIENT
where NOM < LOCALITE

7.8 Afficher le total, le minimum, la moyenne et le maximum des comptes des


clients (compte non tenu des commandes actuelles).
select sum(COMPTE) as somme,
avg(COMPTE) as moyenne,
min(COMPTE) as minimum,
max(COMPTE) as maximum
from CLIENT

7.9 Afficher les numros des clients qui commandent le produit de numro
'CS464'.

select distinct NCLI


from COMMANDE
where NCOM in (select NCOM
from DETAIL
where NPRO = 'CS464')

7.10 Afficher les localits des clients qui commandent le produit de numro
'CS464'.

select distinct LOCALITE


from CLIENT
where NCLI in (select NCLI
from COMMANDE
where NCOM in (select NCOM
from DETAIL
where NPRO = 'CS464'))

7.11 Donner le numro et le nom des clients de Namur qui n'ont pas pass de
commandes.
select NCLI, NOM
from CLIENT
where NCLI not in (select NCLI from COMMANDE)
and LOCALITE = 'Namur'
ou
select NCLI, NOM
from CLIENT
where not exists (select * from COMMANDE where NCLI = CLIENT.NCLI)
and LOCALITE = 'Namur'
A.7 Chapitre 7 - Le langage SQL DML (1) 21

7.12 Quels sont les produits en sapin qui font l'objet d'une commande ?
select NPRO
from PRODUIT
where LIBELLE like '%SAPIN%'
and exists (select * from DETAIL where NPRO = PRODUIT.NPRO)
ou
select NPRO
from PRODUIT
where LIBELLE like '%SAPIN%'
and NPRO in (select NPRO from DETAIL)
ou
select distinct NPRO from PRODUIT P, DETAIL D (! jointure)
where LIBELLE like '%SAPIN%' and P.NPRO = D.NPRO;

7.13 Ecrire les requtes SQL qui recherchent les clients (on simplifiera si
ncessaire) :
habitant Lille ou Namur.
select NCLI, LOCALITE
from CLIENT
where LOCALITE in ('Lille','Namur')

qui la fois habitent Lille et nhabitent pas Namur.


= "qui habitent Lille".

qui habitent Lille ou nhabitent pas Namur.


= "qui nhabitent pas Namur"

qui nhabitent ni Lille ni Namur.


select NCLI, LOCALITE
from CLIENT
where LOCALITE not in ('Lille','Namur')

qui nhabitent pas Lille ou qui nhabitent pas Namur.


= "tous les clients"
de catgorie C1 habitant Namur.
select NCLI, LOCALITE, CAT
from CLIENT
where CAT = 'C1'
and LOCALITE = 'Namur'
J-L Hainaut - 2009

de catgorie C1 ou habitant Namur.


select NCLI, LOCALITE, CAT
from CLIENT
where CAT = 'C1'
22 Annexe A Exercices et solutions

or LOCALITE = 'Namur'

de catgorie C1 nhabitant pas Namur.

select NCLI, LOCALITE, CAT


from CLIENT
where CAT = 'C1'
and LOCALITE <> 'Namur'

qui nont pas t slectionns dans la question prcdente.

select NCLI, LOCALITE, CAT


from CLIENT
where CAT <> 'C1'
or CAT is null
or LOCALITE = 'Namur'

qui soit sont de catgorie B1 ou C1, soit habitent Lille ou Namur (ou les
deux conditions).

select NCLI, LOCALITE, CAT


from CLIENT
where CAT in ('B1','C1')
or LOCALITE in ('Lille','Namur')

qui soit sont de catgorie B1 ou C1, soit habitent Lille ou Namur (mais
pas les deux conditions).

select NCLI, LOCALITE, CAT


from CLIENT
where (CAT in ('B1','C1') and LOCALITE not in ('Lille','Namur'))
or (CAT not in ('B1','C1') and LOCALITE in ('Lille','Namur'))

qui sont de catgorie B1 ou C1, et qui habitent Lille ou Namur.

select NCLI, LOCALITE, CAT


from CLIENT
where CAT in ('B1','C1')
and LOCALITE in ('Lille','Namur')

qui nont pas t slectionns dans la question prcdente.

select NCLI, LOCALITE, CAT


from CLIENT
where CAT not in ('B1','C1')
or LOCALITE not in ('Lille','Namur')
A.7 Chapitre 7 - Le langage SQL DML (1) 23

c) noncs de type 3

7.14 Afficher la valeur totale des stocks (compte non tenu des commandes
actuelles).
select sum(QSTOCK*PRIX) as TOTAL
from PRODUIT

7.15 Afficher le numro et le libell des produits en sapin :


qui ne sont pas commands,
qui sont commands Toulouse,
qui ne sont pas commands Toulouse
qui ne sont commands qu Toulouse,
qui ne sont pas commands qu Toulouse,
qui sont commands Toulouse, mais aussi ailleurs.

7.16 Combien y a-t-il de commandes spcifiant un (ou plusieurs) produit(s) en


acier ? (! jointures)
select count(*)
from COMMANDE
where NCOM in (select NCOM
from DETAIL
where NPRO in (select NPRO
from PRODUIT
where LIBELLE like '%ACIER%');
ou
select count(*) (! jointures)
from COMMANDE M
where NCOM in (select NCOM
from DETAIL D, PRODUIT P
where D.NPRO = P.NPRO
and LIBELLE like '%ACIER%')
ou
select count(distinct M.NCOM) (! jointures)
from COMMANDE M, DETAIL D, PRODUIT P
where M.NCOM = D.NCOM
and D.NPRO = P.NPRO
and LIBELLE like '%ACIER%'
ou

7.17 Dans combien de localits trouve-t-on des clients de catgorie C1 ?


J-L Hainaut - 2009

select count(distinct LOCALITE)


from CLIENT
where CAT = 'C1'
24 Annexe A Exercices et solutions

d) noncs de type 4

7.18 Exprimer de trois manires diffrentes la requte : quels sont les produits qui
ne sont pas commands ?

7.19 Afficher le numro et le nom des clients qui nont pas command de produits
en sapin.
select NCLI, NOM
from CLIENT
where NCLI not in (select NCLI from COMMANDE
where NCOM in (select NCOM from DETAIL
where NPRO in (select NPRO
from PRODUIT
where LIBELLE like '%SAPIN%')));

7.20 A la question : "rechercher les localits dans lesquelles on na pas command


de produit PA60", quatre utilisateurs proposent les requtes suivantes.
Indiquer la (ou les) requtes correctes, et interprtez les autres.

select distinct LOCALITE


from CLIENT
where NCLI in
(select NCLI
from COMMANDE
where NCOM in
(select NCOM
from DETAIL
where NPRO <> 'PA60'))

LOCALITE
====================
Lille
Poitiers
Toulouse

select distinct LOCALITE


from CLIENT
where NCLI in
(select NCLI
from COMMANDE
where NCOM not in
(select NCOM
from DETAIL
where NPRO = 'PA60'))

LOCALITE
====================
Lille
Poitiers
A.7 Chapitre 7 - Le langage SQL DML (1) 25

select distinct LOCALITE


from CLIENT
where NCLI not in
(select NCLI
from COMMANDE
where NCOM in
(select NCOM
from DETAIL
where NPRO = 'PA60'))

LOCALITE
====================
Bruxelles
Geneve
Lille
Namur
Paris
Poitiers
Toulouse

select distinct LOCALITE


from CLIENT
where LOCALITE not in
(select LOCALITE
from CLIENT
where NCLI in
(select NCLI
from COMMANDE
where NCOM in
(select NCOM
from DETAIL
where NPRO = 'PA60')))

seule expression correcte


LOCALITE
====================
Bruxelles
Geneve
Lille
Paris

7.21 Que signifie la requte suivante ?


J-L Hainaut - 2009

select *
from COMMANDE
where NCOM not in (select NCOM
from DETAIL
where NPRO <> 'PA60')
26 Annexe A Exercices et solutions

7.22 Dans quelles localits a-t-on command en dcembre 2008 ?

select distinct LOCALITE


from CLIENT
where NCLI in (select NCLI
from COMMANDE
where DATECOM like '%DEC-2008')

7.23 On suppose quon na pas trouv utile de dclarer NCOM cl trangre dans
la table DETAIL. Il est donc possible que certaines lignes de DETAIL violent la
contrainte dintgrit rfrentielle portant sur cette colonne. Ecrire une
requte qui recherche les anomalies ventuelles.

select NCOM, NPRO


from DETAIL D
where not exists (select * from COMMANDE where NCOM = D.NCOM);

7.24 Normalement, toute commande doit tre associ au moins un dtail.


crire une requte qui vrifie quil en bien ainsi dans la base de donnes.

select NCOM
from COMMANDE M
where not exists (select * from DETAIL where NCOM = M.NCOM);

7.25 Quels sont les produits (numro et libell) qui n'ont pas t commands en
2008 ?

select NPRO, LIBELLE


from PRODUIT
where NPRO not in (select NPRO
from DETAIL D
where NCOM in (select NCOM
from COMMANDE M
where DATECOM like '%2008%');
ou

select NPRO, LIBELLE (! jointure)


from PRODUIT
where NPRO not in (select NPRO
from DETAIL D, COMMANDE M
where D.NCOM = M.NCOM
and M.DATECOM like '%2008%');
A.7 Chapitre 7 - Le langage SQL DML (1) 27

e) noncs de type 5

7.26 Rechercher les clients qui ont command tous les produits.
Suggestion. Application du quantificateur pour tout. On recherche les clients
tels quil nexiste pas de produits qui napparaissent pas dans les dtails de
leurs commandes.
select NCLI
from CLIENT C
where not exists (select *
from PRODUIT
where NPRO not in
(select NPRO
from DETAIL
where NCOM in (select NCOM
from COMMANDE
where NCLI = C.NCLI)));

select NCLI (! jointure)


from CLIENT C
where not exists (select *
from PRODUIT
where NPRO not in (select NPRO
from DETAIL D, COMMANDE M
where D.NCOM = M.NCOM
and M.NCLI = C.NCLI))

7.27 Dans quelles localits a-t-on command tous les produits en acier (tous
clients confondus) ?
Exercice prparatoire : quels sont les clients qui ont command tous les
produits en acier.

select NCLI
from CLIENT C
where not exists (select *
from PRODUIT
where LIBELLE like '%ACIER%'
and NPRO not in (select NPRO
from DETAIL D, COMMANDE M
where D.NCOM = M.NCOM
and M.NCLI = C.NCLI))

Question dorigine :

les localits L telles


quil nexiste pas
J-L Hainaut - 2009

de produits en acier qui ne soit command


par un client de la localit L

select distinct LOCALITE


from CLIENT C
28 Annexe A Exercices et solutions

where not exists (select *


from PRODUIT
where LIBELLE like '%ACIER%'
and NPRO not in
(select NPRO
from DETAIL D, COMMANDE M, CLIENT CC
where D.NCOM = M.NCOM
and M.NCLI = C.NCLI
and CC.LOCALITE = C.LOCALITE))

7.28 Rechercher les produits qui ont t commands par tous les clients.
select NPRO
from PRODUIT P
where not exists (select *
from CLIENT
where NCLI not in (select NCLI
from COMMANDE M, DETAIL D
where M.NCOM = D.NCOM
and D.NPRO = P.NPRO))

7.29 Rechercher les localits dont aucun client na pass de commande.


select distinct LOCALITE
from CLIENT
where LOCALITE not in (select LOCALITE
from CLIENT C
where exists (select *
from COMMANDE
where NCLI = C.NCLI))

7.30 Rechercher les localits dont tous les clients ont pass au moins une
commande.
select distinct LOCALITE
from CLIENT C
where not exists (select * from CLIENT
where LOCALITE = C.LOCALITE
and NCLI not in (select NCLI from COMMANDE))

7.31 Rechercher les produits qui sont commands dans toutes les localits.
select NPRO
from PRODUIT P
where not exists
(select *
from CLIENT
where LOCALITE not in
(select LOCALITE
from CLIENT C, COMMANDE M, DETAIL D
A.7 Chapitre 7 - Le langage SQL DML (1) 29

where M.NCLI = C.NCLI


and D.NCOM = M.NCOM
and D.NPRO = P.NPRO))
J-L Hainaut - 2009
30 Annexe A Exercices et solutions

A.8 CHAPITRE 8 - LE LANGAGE SQL DML (2)

a) noncs de type 2

8.1 Calculer le montant de chaque dtail de commande du client C400.


select NCOM, P.NPRO, QCOM*PRIX as MONTANT
from DETAIL D, PRODUIT P
where D.NPRO = P.NPRO and NCLI = 'C400';

8.2 Calculer le montant command des produits en sapin.


select sum(QCOM*PRIX) as MONTANT
from DETAIL D,PRODUIT P
where D.NPRO = P.NPRO
and P.LIBELLE like '%SAPIN%';

b) noncs de type 3

8.3 Afficher le total et la moyenne des comptes des clients, ainsi que le nombre
de clients, selon chacune des classifications suivantes :
par catgorie,
select CAT, sum(COMPTE), avg(COMPTE), count(*)
from CLIENT group by CAT;

par localit,

par catgorie dans chaque localit.


select CAT, sum(COMPTE), avg(COMPTE), count(*)
from CLIENT group by LOCALITE, CAT;

8.4 Combien y a-t-il de commandes spcifiant un (ou plusieurs) produit(s) en


acier (on proposera une solution diffrente de celle du chapitre 7) ?
select count(distinct M.NCOM)
from COMMANDE M, DETAIL D, PRODUIT P
where M.NCOM = D.NCOM
and D.NPRO = P.NPRO
and LIBELLE like '%ACIER%';
ou
select count(*)
from COMMANDE M
where NCOM in (select NCOM
from DETAIL D, PRODUIT P
where D.NPRO = P.NPRO
and LIBELLE like '%ACIER%');
A.8 Chapitre 8 - Le langage SQL DML (2) 31

8.5 Crer une table et y ranger les donnes suivantes relatives aux dtails de
commande : numro et date de la commande, quantit commande, numro
et prix du produit, montant du dtail.
create table (NCOM ..., DATECOM ..., ..., MONTANT ...);

insert into DETAIL_COM(NCOM, DATECOM, QCOM, NPRO, PRIX, MONTANT)


select M.NCOM, DATECOM, QCOM, P.NPRO, PRIX, QCOM*PRIX
from COMMANDE M, DETAIL D, PRODUIT P
where M.NCOM = D.NCOM
and D.NPRO = P.NPRO;

8.6 Annuler les comptes ngatifs des clients de catgorie C1.


update CLIENT
set COMPTE = 0
where COMPTE < 0
and CAT = 'C1';

8.7 Complter le fragment suivant de manire former une requte valide


select CAT, NPRO, sum(QCOM*PRIX) from ...

select CAT, NPRO, sum(QCOM*PRIX)


from CLIENT C, COMMANDE M, DETAIL D, PRODUIT P
where C.NCLI = M.NCLI
and M.NCOM = D.NCOM
and D.NPRO = P.NPRO
group by CAT, P.NPRO;

8.8 En se basant sur le schma 8.5, crire les requtes SQL qui donnent :
les matires premires (produits qui nont pas de composants);
select NPRO
from PRODUIT
where NPRO not in (select COMPOSE from COMPOSITION);

les produits finis (qui nentrent dans la composition daucun autre);


select NPRO
from PRODUIT
where NPRO not in (select COMPOSANT from COMPOSITION);
J-L Hainaut - 2009

les produits semi-finis (tous les autres);


select NPRO
from PRODUIT
where NPRO in (select COMPOSE from COMPOSITION)
32 Annexe A Exercices et solutions

and NPRO in (select COMPOSANT from COMPOSITION);

le prix et poids unitaires dun produit fini ou semi-fini dont tous les compo-
sants ont un poids et un prix unitaires.
select PH.NPRO, sum(QTE*PB.PRIX_U), sum(QTE*PB.POIDS_U)
from PRODUIT PH, COMPOSITION C, PRODUIT PB
where PH.NPRO = C.COMPOSE
and C.COMPOSANT = PB.NPRO
and not exists (select *
from COMPOSITION CC, PRODUIT BB
where CC.COMPOSANT = BB.NPRO
and CC.COMPOSE = PH.NPRO
and (BB.PRIX_U is null
or BB.POIDS_U is null))
group by PH.NPRO;

8.9 Quels sont les personnes qui ont le mme responsable que p4 ?
select NPERS, NOM
from PERSONNE
where RESPONSABLE in (select RESPONSABLE from PERSONNE
where NPERS = 'p4';

c) noncs de type 4

8.10 Calculer le montant de chaque commande.

8.11 Calculer le montant d par chaque client. Dans ce calcul, on ne prend en


compte que le montant des commandes. Attention aux clients qui nont pas
pass de commandes.
select NCLI, sum(QCOM*PRIX)
from COMMANDE M, DETAIL D, PRODUIT P
where M.NCOM = D.NCOM
and D.NPRO = P.NPRO
group by NCLI
union
select NCLI, 0
from CLIENT C
where not exists (select * from COMMANDE where NCLI = C.NCLI);

8.12 Calculer le montant d par les clients de chaque localit. Dans ce calcul, on
ne prend en compte que le montant des commandes. Attention aux localits
dans lesquelles aucun client na pass de commandes.
select LOCALITE, sum(QCOM*PRIX)
from CLIENT C, COMMANDE M, DETAIL D, PRODUIT P
A.8 Chapitre 8 - Le langage SQL DML (2) 33

where C.NCLI = M.NCLI


and M.NCOM = D.NCOM
and D.NPRO = P.NPRO
group by LOCALITE
union
select distinct LOCALITE, 0
from CLIENT
where LOCALITE not in (select LOCALITE
from CLIENT C
where exists (select *
from COMMANDE
where NCLI = C.NCLI));

8.13 Calculer, par jour, le total des montants des commandes.


select DATECOM, sum(QCOM*PRIX)
from COMMANDE M, DETAIL D, PRODUIT P
where M.NCOM = D.NCOM
and D.NPRO = P.NPRO
group by DATECOM;

8.14 On suppose quon na pas trouv utile dimposer un identifiant primaire sur la
table PRODUIT. Il se peut donc que plusieurs lignes aient mme valeur de la
colonne NPRO, ce qui viole le principe dunicit des valeurs de cette colonne.
Ecrire une requte qui recherche les valeurs de NPRO prsentes en plus
dun exemplaire.
select NPRO, count(*)
from PRODUIT
group by NPRO
having count(*) > 1

crire une requte qui indique combien de valeurs de NPRO sont prsentes
en plus dun exemplaire.
create view OCCURRENCES(NPRO,NOMBRE) as
select NPRO, count(*)
from PRODUIT
group by NPRO;

select count(*)
from OCCURRENCES
where NOMBRE > 1;

crire une requte qui indique combien de lignes comportent une erreur
dunicit de NPRO.
J-L Hainaut - 2009

crire une requte qui, pour chaque valeur de NPRO prsente dans la table,
indique dans combien de lignes cette valeur est prsente.
34 Annexe A Exercices et solutions

crire une requte qui, pour chaque valeur de NPRO qui nest pas unique,
indique dans combien de lignes cette valeur est prsente.

crire une suite de requtes qui cre une table contenant les numros de
NPRO qui ne sont pas uniques.

8.15 Afficher pour chaque localit, les libells des produits qui y sont commands.
select LOCALITE, LIBELLE
from CLIENT C, COMMANDE M, DETAIL D, PRODUIT P
where C.NCLI = M.NCLI
and M.NCOM = D.NCOM
and D.NPRO = P.NPRO
group by LOCALITE, LIBELLE
order by LOCALITE, LIBELLE

8.16 Afficher par localit, et pour chaque catgorie dans celle-ci, le total des
montants des commandes.
select LOCALITE, CAT, sum(QCOM*PRIX)
from CLIENT C, COMMANDE M, DETAIL D, PRODUIT P
where C.NCLI = M.NCLI
and M.NCOM = D.NCOM
and D.NPRO = P.NPRO
group by LOCALITE, CAT
union
select LOCALITE, CAT, 0
from CLIENT C
group by LOCALITE, CAT
having not exists (select *
from COMMANDE
where NCLI in (select NCLI
from CLIENT
where LOCALITE = C.LOCALITE
and CAT = C.CAT));

8.17 Indiquer, pour chaque localit, les catgories de clients qui ny sont pas
reprsentes
Suggestion. Construire lensemble de tous les couples (LOCALITE, CAT)
possibles et en retirer ceux qui existent dans la base. Attention aux valeurs
null, qui ne doivent pas tre prises en compte.

select distinct L.LOCALITE, C.CAT


from CLIENT L, CLIENT C
where CAT is not null
and not exists (select *
from CLIENT
where LOCALITE = L.LOCALITE and CAT = C.CAT);
A.8 Chapitre 8 - Le langage SQL DML (2) 35

8.18 Produire ( lcran) une table de couples <X,Y> de clients tels que X et Y
habitent dans la mme localit. On vitera de renseigner <X,X>, mais aussi
<Y,X> si <X,Y> est dj repris.
Suggestion. Auto-jointure de CLIENT. On vitera les couples inverse en
imposant un ordre sur les valeurs de NPRO (p.ex. X < Y).
select C1.LOCALITE, C1.NCLI, C2.NCLI
from CLIENT C1, CLIENT C2
where C1.NCLI < C2.NCLI
and C1.LOCALITE = C2.LOCALITE
order by C1.LOCALITE, C1.NCLI, C2.NCLI

8.19 En se basant sur le schma 8.5, crire une requte de mise jour qui complte
les prix et poids unitaires des produits finis ou semi-finis. Pour simplifier la
procdure, on admet que cette requte soit excute autant de fois que
ncessaire pour que tous les produits soient complts.
update PRODUIT PH
set PRIX_U = (select sum(QTE*PB.PRIX_U)
from COMPOSITION C, PRODUIT PB
where PH.NPRO = C.COMPOSE
and C.COMPOSANT = PB.NPRO
group by PH.NPRO)
where PRIX_U is null
and not exists (select * from COMPOSITION CC, PRODUIT BB
where CC.COMPOSANT = BB.NPRO
and CC.COMPOSE = PH.NPRO
and BB.PRIX_U is null);

8.20 En considrant le schma de la figure 8.7, calculer pour chaque ville, le prix
moyen de chaque produit.
select VILLE, PRODUIT, avg(PRIX)
from VENTE V, LOCALISATION L
where V.CHAINE = L.CHAINE
group by VILLE, PRODUIT;

8.21 Afficher pour chaque client, le nombre de commandes, le nombre de produits


commands et le nombre de dtails. On se limite aux clients qui ont pass au
moins une commande.
Suggestion : il sagit dune requte base sur des groupements multi-niveaux.
select C.NCLI, count(distinct NCOM) as Commandes,
J-L Hainaut - 2009

count(distinct NPRO) as Produits,


count(NPRO) as Details
from CLIENT C, COMMANDE M, DETAIL D
where C.NCLI = M.NCLI and M.NCOM = D.NCOM
group by C.NCLI
36 Annexe A Exercices et solutions

select C.NCLI, count(distinct NCOM) as Commandes,


count(distinct NPRO) as Produits,
count(NPRO) as Details
from CLIENT C, COMMANDE M, DETAIL D
where C.NCLI = M.NCLI and M.NCOM = D.NCOM
group by C.NCLI;

8.22 Afficher, pour chaque localit et pour chaque catgorie, (1) le nombre de
commandes passes par les clients de cette localit et de cette catgorie, (2) le
montant total de ces commandes.
select LOCALITE, CAT, count(distinct NCOM), sum(QCOM*PRIX)
from CLIENT C, COMMANDE M, DETAIL D, PRODUIT P
where C.NCLI = M.NCLI
and M.NCOM = D.NCOM
and D.NPRO = P.NPRO
group by LOCALITE, CAT

8.23 On considres trois tables T1, T2 et T3, chacune possdant un unique attribut
A identifiant. Calculer lensemble des valeurs de A qui
sont prsentes dans les trois tables,
select A from T1
intersect
select A from T2
intersect
select A from T3;
ou
select A from T1
where A in (select A from T2)
and A in select A from T3);

sont prsentes dans T1 seulement,


select A from T1
except
select A from T2
except
select A from T3;
ou
select A from T1
where A not in (select A from T2)
and A not in select A from T3);

sont prsentes dans T1 et T2 mais pas dans T3,


select A from T1
intersect
select A from T2
except
A.8 Chapitre 8 - Le langage SQL DML (2) 37

select A from T3;


ou
select A from T1
where A in (select A from T2)
and A not in select A from T3);

sont prsentes dans une seule table,

create view T123(A ...)


as select A from T1
union all select A from T2
union all select A from T2;

select A from T123 group by A having count(*) = 1;

sont prsentes dans deux tables seulement.

select A from T123 group by A having count(*) = 3;

d) noncs de type 5

8.24 Calculer le nombre moyen de produits par commande. De mme : le nombre


moyen de commandes par client, par localit ou par catgorie.
Remarque. Il nest pas possible de demander directement la moyenne dune
somme. Suggestion : construction et interrogation dune vue ou calcul de la
moyenne dans le from.

create view NOMBRE(NCOM,NBRE) as


select NCOM, count(*)
from DETAIL
group by NCOM;

select avg(NBRE)
from NOMBRE;

8.25 Quel est, pour chaque localit, le nombre moyen de commandes par client.

create view NOMBRE(NCLI,NBRE) as


select C.NCLI, count(*)
from CLIENT C, COMMANDE M
where C.NCLI = M.NCLI
group by C.NCLI;
J-L Hainaut - 2009

select LOCALITE, avg(NBRE)


from CLIENT C, NOMBRE N
where C.NCLI = N.NCLI
group by LOCALITE;
38 Annexe A Exercices et solutions

8.26 Ecrire une requte SQL qui donne, pour chaque catgorie de produit, le
nombre de produits qui ont t commands le 23-12-2008.
select CAT, count(distinct NPRO)
from CLIENT C, COMMANDE M, DETAIL D
where C.NCLI = M.NCLI
and M.NCOM = D.NCOM
AND DATECOM = '23-DEC-2008'
group by CAT

8.27 Donner pour chaque localit dans laquelle se trouve au moins un client de
catgorie 'C1' la liste des produits en sapin qu'on y a commands.
select LOCALITE, D.NPRO
from CLIENT C, COMMANDE M, DETAIL D, PRODUIT P
where C.NCLI = M.NCLI
and M.NCOM = D.NCOM
and D.NPRO = P.NPRO
and LOCALITE in (select LOCALITE from CLIENT where CAT = 'C1')
and LIBELLE like '%SAPIN%'
group by LOCALITE, D.NPRO

8.28 Donner pour chaque produit la liste des localits dans lesquelles ce produit
est command en plus de 500 units (= au total pour la localit).
select D.NPRO, LOCALITE, sum(QCOM)
from CLIENT C, COMMANDE M, DETAIL D
where C.NCLI = M.NCLI
and M.NCOM = D.NCOM
group by D.NPRO, LOCALITE
having sum(QCOM) > 500

8.29 Afficher, pour chaque localit, les produits quon y commande et qui sont
aussi commands dans au moins une autre localit.
Suggestion. Un produit est intressant si le nombre de localits dans lesquelles
il est command est suprieur ou gal 2.
select LOCALITE, NPRO
from CLIENT C, COMMANDE M, DETAIL D
where C.NCLI = M.NCLI
and M.NCOM = D.NCOM
and D.NPRO in (select NPRO
from CLIENT C, COMMANDE M, DETAIL D
where C.NCLI = M.NCLI
and M.NCOM = D.NCOM
group by NPRO
having count(distinct LOCALITE) > 1)
group by LOCALITE, D.NPRO
A.8 Chapitre 8 - Le langage SQL DML (2) 39

8.30 Dans quelles localits peut-on trouver au moins un client qui a command
tous les produits en sapin, et ce, pour un montant total, pour ces produits,
dpassant 10.000 ?

8.31 Calculer, pour chaque localit, le nombre de catgories distinctes.


select LOCALITE, count(distinct CAT)
from CLIENT
where CAT is not null
group by LOCALITE

8.32 La section 8.10.1 suggre une comparaison entre un instantan et une vue de
mme dfinition. En effet, ces deux techniques pourraient tre considres
comme quivalentes pour la formulation de requtes. tablir une liste de
critres de comparaison et lappliquer aux deux techniques.

8.33 Mettre jour les comptes des clients en en dduisant le montant des
commandes en cours.
Suggestion. cfr mise jour des quantits en stock des produits; attention aux
clients qui nont pas command.
update PRODUIT P
set QSTOCK = QSTOCK - (select sum(QCOM)
from DETAIL
where NPRO = P.NPRO)
where exists (select *
from DETAIL
where NPRO = P.NPRO)

8.34 Mettre jour les quantits en stock des produits en en dduisant les quantits
commandes par les clients de catgorie B1 et C1.
update PRODUIT P
set QSTOCK = QSTOCK - (select sum(QCOM)
from DETAIL D, COMMANDE M, CLIENT C
where D.NPRO = P.NPRO
and D.NCOM = M.NCOM
and M.NCLI = C.NCLI
and CAT in ('B1','C1'))
where exists (select *
from DETAIL D, COMMANDE M, CLIENT C
J-L Hainaut - 2009

where D.NPRO = P.NPRO


and D.NCOM = M.NCOM
and M.NCLI = C.NCLI
and CAT in ('B1','C1'))
40 Annexe A Exercices et solutions

8.35 On suppose quon dispose de deux tables PRODUIT1 et PRODUIT2 dcrivant


des produits de deux filiales distinctes, et de mme structure que PRODUIT. Il
est possible quun produit soit prsent simultanment dans les deux filiales.
Le mme numro de produit est repris alors dans les deux tables. On dsire
intgrer les deux dpts. En consquence, on fusionne les deux tables
initiales en une troisime selon les rgles suivantes :
si un produit nest prsent que dans une seule filiale, sa ligne est reprise
telle quelle,
si un produit est prsent dans les deux filiales, on ne le dcrit quune seule
fois. Son libell est celui de PRODUIT1, son prix est le minimum des deux
valeurs et sa quantit en stock est la somme des deux valeurs.
Ecrire les requtes dintgration.
create table PRODUIT1
(NPRO char(10) not null primary key,
LIBELLE char(30) not null,
PRIX decimal(5,2) not null,
QSTOCK decimal(6) not null);

insert into PRODUIT1 values ('A001','Farine', 0.8, 65);


insert into PRODUIT1 values ('B001','Sel', 0.5, 120);
insert into PRODUIT1 values ('A003','Huile olive', 5.2, 9);

create table PRODUIT2


(NPRO char(10) not null primary key,
LIBELLE char(30) not null,
PRIX decimal(5,2) not null,
QSTOCK decimal(6) not null);

insert into PRODUIT2 values ('A002','Sucre', 1.2, 45);


insert into PRODUIT2 values ('B001','Sel iod', 0.45, 35);
insert into PRODUIT2 values ('A003','Huile', 5.6, 22);

create table PRODUIT3


(NPRO char(10) not null primary key,
LIBELLE char(30) not null,
PRIX decimal(5,2) not null,
QSTOCK decimal(6) not null);

insert into PRODUIT3


select *
from PRODUIT1 P1
where not exists (select * from PRODUIT2 where NPRO = P1.NPRO);

insert into PRODUIT3


select *
from PRODUIT2 P2
where not exists (select * from PRODUIT1 where NPRO = P2.NPRO);

insert into PRODUIT3


select P1.NPRO, P1.LIBELLE, P1.PRIX, P1.QSTOCK + P2.QSTOCK
from PRODUIT1 P1, PRODUIT2 P2
A.8 Chapitre 8 - Le langage SQL DML (2) 41

where P1.NPRO = P2.NPRO


and P1.PRIX <= P2.PRIX;

insert into PRODUIT3


select P1.NPRO, P1.LIBELLE, P2.PRIX, P1.QSTOCK + P2.QSTOCK
from PRODUIT1 P1, PRODUIT2 P2
where P1.NPRO = P2.NPRO
and P1.PRIX > P2.PRIX;

8.36 Soit une jointure de deux ou plusieurs tables, dont la clause select spcifie
certaines colonnes. On dsire que le rsultat ne comporte pas de lignes en
double. Indiquer dans quelles conditions le modifieur distinct est inutile.
Suggestion. distinct est inutile lorsque la clause select comprend tous
les composants de lidentifiant de la table mentionne dans la clause from
ou (cas dune jointure par exemple) construite dans les clauses from-
where-group-by.

8.37 On considre une base de donnes constitue des deux tables suivantes :
R(A,B) et S(B,C). Evaluer lordre de grandeur du nombre de requtes
diffrentes quil est possible de formuler sur cette base de donnes.
Rponse : une infinit.

e) noncs de type 6

8.38 La figure 11.27 (Voyages en train) reprsente un schma qui est accompagn
de suggestions de questions auxquelles une base de donnes traduisant ce
schma permettrait de rpondre. On suppose que ce schma est traduit en
structure de tables (cf. exercice 13.4). Exprimer chacune de ces questions
sous la forme de requtes SQL.

8.39 On dsire raliser le couplage deux deux de certaines localits o rsident


des clients. cette fin, on construit des listes de couples candidats. On se
limite cependant aux couples de localits dans lesquelles on commande au
moins un mme produit.

De manire y voir plus clair, on construit d'abord une vue (view ou table
temporaire) LP(LOCALITE,NPRO) qui indique que dans telle localit on
commande tel produit.
J-L Hainaut - 2009

create view LP(LOCALITE,NPRO) as


select distinct LOCALITE, NPRO
from CLIENT C, COMMANDE M, DETAIL D
where C.NCLI = M.NCLI and M.NCOM = D.NCOM
42 Annexe A Exercices et solutions

On effectue ensuite une autojointure de LP sur la colonne NPRO. On obtient


ainsi des couples (loc1, loc2) de valeurs de LOCALITE tels que loc1 et loc2 sont
associes (au moins) une mme valeur de NPRO.

select LP1.LOCALITE, LP2.LOCALITE


from LP LP1, LP LP2
where LP1.NPRO = LP2.NPRO

Ces deux valeurs de LOCALITE doivent tre diffrentes : on ajoute la


condition LP1.LOCALITE <> LP2.LOCALITE. Pour viter les associations
symtriques (inutile de retenir (Poitiers,Lille) et (Lille,Poitiers)), on affine la
condition prcdente en : LP1.LOCALITE < LP2.LOCALITE.

select distinct LP1.LOCALITE, LP2.LOCALITE


from LP LP1, LP LP2
where LP1.NPRO = LP2.NPRO
and LP1.LOCALITE < LP2.LOCALITE

Pour viter la dfinition de la vue, on peut fusionner les deux requtes :

select distinct C1.LOCALITE, C2.LOCALITE


from CLIENT C1, COMMANDE M1, DETAIL D1,
DETAIL D2, COMMANDE M2, CLIENT C2
where C1.NCLI = M1.NCLI and M1.NCOM = D1.NCOM
and D1.NPRO = D2.NPRO
and D2.NCOM = M2.NCOM and M2.NCLI = C2.NCLI
and C1.LOCALITE < C2.LOCALITE

8.40 Mme question que 8.39 ci-dessus, mais on se limite aux couples de localits
dans lesquelles on achte exactement les mmes produits.

Cette question est un peu plus complexe que la prcdente. Nous allons
dabord rpondre une question plus large : produire les couples (loc1, loc2)
de localits tels que tous les produits commands dans la localit loc1 ont t
aussi commands dans la localit loc2. En rutilisant la vue LP, on peut
rpondre par la requte suivante, qui traduit la proprit "il nexiste pas de
valeur de NPRO dpendant de LP1.LOCALITE qui soit absente de celles qui
dpendent de LP2.LOCALITE" (on notera la condition LP1.LOCALITE <>
LP2.LOCALITE) :

select distinct LP1.LOCALITE, LP2.LOCALITE


from LP AS LP1, LP AS LP2
where LP1.LOCALITE <> LP2.LOCALITE
and not exists(select * from LP
where LOCALITE = LP1.LOCALITE
and NPRO not in (select NPRO from LP
where LOCALITE = LP2.LOCALITE));
A.8 Chapitre 8 - Le langage SQL DML (2) 43

Parenthse. Observons que si deux localits loc1 et loc2 ont exactement le


mme ensemble de produits, elles apparatront naturellement sous la forme
des deux couples (loc1, loc2) et (loc2, loc1). On pourrait donc ce stade
rechercher dans les couples du rsultat ceux qui possde un inverse. Cet
exercice, trs facile, est laiss aux soins du lecteur. Fin de parenthse.
La demande initiale exige en plus la condition symtrique, qui veut que tous
les produits dpendant de LP2.LOCALITE dpendent aussi de LP1.LOCALITE
(on notera la condition LP1.LOCALITE < LP2.LOCALITE) :
select distinct LP1.LOCALITE, LP2.LOCALITE
from LP AS LP1, LP AS LP2
where LP1.LOCALITE < LP2.LOCALITE
and not exists(select * from LP
where LP.LOCALITE = LP1.LOCALITE
and NPRO not in (select NPRO from LP
where LOCALITE = LP2.LOCALITE))
and not exists(select * from LP
where LP.LOCALITE = LP2.LOCALITE
and NPRO not in (select NPRO from LP
where LOCALITE = LP1.LOCALITE));

8.41 Pour chaque produit, indiquer la ville dans laquelle la quantit totale
commande est minimale, et celle dans laquelle cette quantit est maximale.

f) nonc de type 7

8.42 Rdiger un script (suite de requtes) SQL qui ralise en fin de mois les
oprations de gestion rgies par les rgles suivantes :
pour chaque client, on calcule le total des montants des commandes du
mois coul (= les commandes dun mois et dune anne dtermins);
si ce montant est suprieur celui du mois prcdent, on applique une
rduction de 5%;
ensuite, si le client est le seul de sa localit, on applique une rduction
supplmentaire de 5%;
on range dans une table les informations ncessaires ldition des
factures du mois;
on met jour le compte des clients;
on met jour le niveau de stock (QSTOCK) des produits commands;
pour chaque produit dont le niveau de stock a t mis jour, et dont le
niveau est infrieur ou gal 0, on prpare dans une table adquate les
informations de rapprovisionnement.
J-L Hainaut - 2009
44 Annexe A Exercices et solutions

A.9 CHAPITRE 9 - LE LANGAGE SQL AVANC

9.1 Dvelopper, laide des concepts tudis dans cet ouvrage, un mcanisme
qui permet de limiter laccs une table par un utilisateur dtermin des
moments bien dtermins, par exemple du lundi au vendredi, de 9h 17h.

Solution
On suggre de dfinir une vue limitant laccs aux plages horaires dsires.
create view T_CLIENT(NCLI, NOM, ...) as
select NCLI, NOM, ...
from CLIENT
where extract(weekday from current_date) between 1 and 5
and extract(hour from current_time) between 9 and 17;
revoke select on CLIENT from U_MERCIER:
grand select on T_CLIENT to U_MERCIER;

9.2 Exprimer loprateur except laide dune jointure externe.

Solution
Exemple : liste des numros des clients qui nont pas pass de commande :
select C.NCLI
from CLIENT C left outer join COMMANDE M
on (C.NCLI = M.NCLI)
where NCOM is null;

9.3 Ecrire une requte qui produise les suprieurs hirarchiques, directs ou
indirects, dune personne dont on spcifie le numro (figure 8.2).

9.4 Ecrire une requte qui donne la liste des produits semi-finis et matires
premires qui entrent dans la composition du produit de numro p1 (figure
8.6).

9.5 Ecrire une requte qui donne la liste des matires premires qui entrent dans
la composition du produit de numro p1 (figure 8.6).

9.6 Ecrire une requte qui calcule le prix dun produit de numro spcifi (figure
8.6).

9.7 Ecrire une requte qui donne, pour chaque table, le nombre de colonnes et la
longueur maximum des lignes.

9.8 Le catalogue que nous avons dcrit (figures 9.3 et 9.4) diffre quelque peu
des catalogues proposs par les SGBD. En particulier, les catalogues rels
ont souvent une structure complexe destine amliorer les performances.
Ecrire les requtes qui garnissent les tables de la figure 9.4 partir du contenu
A.9 Chapitre 9 - Le langage SQL avanc 45

des tables du catalogue de votre SGBD. Pour fixer les ides, on pourra
sexercer sur la structure ci-dessous, limite la reprsentation des cls
(identifiants et cls trangres) :

Une ligne de cette table reprsente un composant dune cl. Elle indique
successivement le nom de la table de la cl, le type de la cl (Primary,
Foreign), son identifiant interne et le nom de la colonne; sil sagit dune cl
trangre, elle indique en outre le nom de la table et de la colonne cibles.

9.9 Le lecteur attentif aura observ que la table SYS_KEY_COL de lexercice 9.8
nest pas normalise. On linvite reprer les dpendances fonctionnelles
anormales puis dcomposer la table de manire obtenir des fragments
normaliss.

9.10 Ecrire une requte qui met jour la valeur de COMPTE de chaque client en en
retirant le total des montants des commandes de la date courante.

9.11 Proposer un schma de tables quivalent celui de la figure 2.7 tabli selon
concepts relationnels-objet. On remplacera les cls trangres par des
colonnes de rfrence et on reprsentera la table DETAIL par une colonne
complexe (tableau de 20 rows) de la table COMMANDE.

9.12 La requte ci-dessous est tire dune application Access fournie par
Microsoft dans la distribution dOffice. Les noms de tables et de colonnes ont
t anonymiss mais la structure a t conserve. Rcrivez cette requte en
exprimant les jointures sous une forme standard.
select distinct *
from S inner join (P inner join ((E inner join
(C inner join A on C.I = A.CI) on E.I = A.EI)
inner join B on A.I = B.OI) on P.I = B.PI) on S.I = A.S;
J-L Hainaut - 2009

9.13 Au moment de son entre en fonction, les utilisateurs Jean et Andre ne


jouissent daucun privilge sur la base de donne de son entreprise. Les
utilisateurs U1, U2 et Jean excutent ensuite les requtes (valides) de gestion
de privilges suivantes, dans cet ordre :
46 Annexe A Exercices et solutions

U1: grant select, update(QSTOCK) on PRODUIT to Jean


with grand option;
U2: grant select, update(QSTOCK,PRIX) on PRODUIT to Jean
with grant option;
Jean: grant select, update(PRIX) to Andr;
U1: revoke grant option for update(QSTOCK) on PRODUIT
from Jean;
U2: revoke update(QSTOCK) on PRODUIT from Jean;
Indiquer les privilges des utilisateurs Jean et Andre aprs lexcution de
chaque requte de cette squence. Poser les hypothses additionnelles
ncessaires.

A.10 CHAPITRE 10 - CONSTRUCTION DUNE BASE DE DONNES


Nant
A.11 Chapitre 11 - Le modle Entit-association de base 47

A.11 CHAPITRE 11 - LE MODLE ENTIT-ASSOCIATION DE BASE

11.1 On considre le schma ci-dessous. Admettons prsent que, toutes choses


restant gales par ailleurs, (1) un vhicule puisse tre couvert par un nombre
quelconque de contrats, (2) on dsire connatre, chaque fois quun vhicule
est impliqu dans un accident, le pourcentage de responsabilit qui lui a t
attribu. Modifier le schma en consquence.
CLIENT
NumClient
Nom
0-N Adresse 0-N
appartient id: NumClient signe

1-1 1-1
VEHICULE
CONTRAT
NumVh
NumCtr
Marque
Type
Modle 1-1 couvre 0-1
DateSign
Anne
id: signe.CLIENT
Cylindre
NumCtr
id: NumVh

ACCIDENT
NumAcc
0-N implique 0-N DateAcc
Montant[0-1]
id: NumAcc

11.2 En utilisant les conventions graphiques des figures 11.6 et 11.16, dessiner les
populations (entits, associations, valeurs dattributs) correspondant au
contenu de la base de donnes de la figure 2.8.

11.3 En utilisant le dessin labor lors de la rsolution de lexercice 11.2, retrouver


les informations suivantes, selon le procd de la section 11.8 :
quels sont les produits commands Poitiers ?
quels clients ont command le produit PA45 le 2/1/2009 ?

11.4 Dans linterprtation du schma 11.25, on prcise quun service est rput
traiter un dossier ds quun de ses employs est en charge de ce dossier.
Modifier le schma pour tenir compte de cette prcision.

Solution
J-L Hainaut - 2009
48 Annexe A Exercices et solutions

SERVICE
NomServ
Responsable 0-N occupe
id: de.DEPARTEMENT
NomServ 1-1

DOSSIER EMPLOYE
NumDossier NumEmp
Titre 1-1 traite 0-N NomEmp
DateEnreg Adresse
id: NumDossier id: NumEmp

11.5 Modifier le schma de la figure 11.26 de manire y reprsenter


a) la rservation dun ouvrage (ou dun exemplaire ?) par un emprunteur;
b) lhistorique des emprunts douvrages (ou dexemplaires ?).

Solution

OUVRAGE
EMPRUNTEUR
MOT-CLE NumOuv
NumEmpr
Titre
Valeur 0-N dcrit 0-N 0-N rserve 0-N NomEmpr
Auteurs
id: Valeur Adresse
Editeur
id: NumEmpr
id: NumOuv
0-N
0-N
par
ex de
1-1
1-1
EMPRUNT
EXEMPLAIRE
Date Emprunt
NumEx
Date Restitution[0-1]
Position 0-N de 1-1
DateAchat id: par.EMPRUNTEUR
de.EXEMPLAIRE
id: NumEx
Date Emprunt

11.6 Dessiner un graphe de populations reprsentatives pour le schma de la figure


11.27. On y reprsentera une situation relle, quon trouvera dans un horaire
de chemin de fer.

11.7 Pourquoi dans le schma de la figure 11.27 un agent conduit-il un voyage et


non un train, comme il est dusage ?

11.8 Le schma de la figure 11.27 permet-il de rsoudre le problme suivant ?


Lorsquun conducteur X dsire transmettre un colis un autre conducteur Y,
il dpose ce colis une station par laquelle il passe, et par laquelle Y passera
plus tard. X et Y se posent la question suivante la date Z : o (quelle station)
et quelle date au plus tt, Y pourra-t-il prendre livraison dun colis que X
A.11 Chapitre 11 - Le modle Entit-association de base 49

veut lui transmettre. On suppose quun voyage ne stend pas sur plus dune
journe, et quun colis dpos une date dtermine pourra tre enlev ds le
lendemain.

11.9 Pourquoi dans le schma de la figure 11.27 les sections ne sont-elles pas
identifies par leurs stations de dpart et darrive ?

Solution
Parce quune section est un fragment de ligne et non la portion de voie qui
relie deux stations. Il existe autant de sections entre deux stations quil y a de
lignes passant conscutivement par ces stations.

11.10 Le schma de la figure 11.27 reprsente des sections de ligne de telle manire
que deux lignes empruntant le mme tronon de voie dfinissent deux
sections diffrentes. Donner au concept de tronon de voie une dfinition
prcise et modifier le schma conceptuel de manire quil reprsente non
seulement les sections mais galement les tronons de voie.

Solution
Un tronon est une liaison directe, ininterrompue, entre deux stations; il
nexiste pas de station au milieu dun tronon. Conventionnellement, on fixe
pour un tronon une station de dpart et une station darrive. Il nexiste pas
plus dun tronon entre deux stations, bien quun tronon puisse comporter
plusieurs portions de voies physiques (= rails). Une section dune ligne
emprunte un tronon dans le sens direct (dpart arrive) ou dans le sens
inverse (arrive dpart).

AGENT
IDAgent
0-N Nom 0-1 dirige
TRAIN
Adresse
NumTrain
id: IDAgent 1-1
Origine
id: NumTrain
LIGNE STATION
conduit Nom
0-N CodeLigne
Date Activ Commune
effectue id: CodeLigne id: Nom
0-N
1-1 0-N 0-N 0-N
1-1 suivant
forme dpart arrive
VOYAGE 1-1
1-1
DateVoyage 1-1 1-1
HeureVoyage SECTION
id: suivant.LIGNE NumOrdre TRONCON
DateVoyage Longueur
J-L Hainaut - 2009

id: arrive.STATION
HeureVoyage Sens dpart.STATION
id: forme.LIGNE
NumOrdre

1-1 emprunte 0-N


50 Annexe A Exercices et solutions

11.11 Toujours relativement ce mme schma, affiner le concept de train, en


considrant que celui-ci est constitu de motrices, de voitures de voyageur, de
wagons de marchandise, de fourgons, etc., dans un ordre dtermin.

11.12 On considre les deux types dassociations r entre A et B et s entre B et C. On


considre aussi le type dassociations rs dfini comme la composition de r et s
(figure 2). Dterminer la classe fonctionnelle de rs partir de celles de r et de
s. Cette question est trs importante pour comprendre linformation contenue
dans un schma. En considrant le schma de la figure 11.18, elle pourrait par
exemple se concrtiser comme suit :
- combien de vhicules sont couverts par les contrats signs par un client ?
- combien de contrats couvrent les vhicules appartenant un client ?
- combien de clients sont propritaires des vhicules couverts par un
contrat ?
- combien de propritaires sont impliqus dans un accident ?
- combien de clients ont sign les contrats couvrant les vhicules dun
propritaire (double composition) ?

rs

A r B s C

Figure A.2 - Etude de la composition de deux types dassociations

Solution
Pour simplifier le raisonnement, on considre les quatre classes
fonctionnelles 1:N, N:1, 1:1 et N:N (N:1 est simplement la classe fonctionnelle
dun type dassociation 1:N considr dans le sens inverse). On dfinit ainsi
16 configurations distinctes.

r s rs
1:N 1:N 1:N
1:N N:1 N:N
1:N 1:1 1:N
1:N N:N N:N
N:1 1:N N:N
N:1 N:1 N:1
N:1 1:1 N:1
N:1 N:N N:N
1:1 1:N 1:N
1:1 N:1 N:1
1:1 1:1 1:1
1:1 N:N N:N
A.11 Chapitre 11 - Le modle Entit-association de base 51

N:N 1:N N:N


N:N N:1 N:N
N:N 1:1 N:N
N:N N:N N:N
J-L Hainaut - 2009
52 Annexe A Exercices et solutions

A.12 CHAPITRE 12 - LABORATION DUN SCHMA CONCEPTUEL

12.1 On considre le fragment de schma :

PROFESSEUR titulaire COURS

ainsi que le graphe ci-dessous, dont chacun des 24 chemins obtenus en


suivant les flches de gauche droite gnre une proposition binaire
conforme ce schma. Par exemple : tout professeur peut tre titulaire dun
cours.
un
est de
tout professeur titulaire cours
peut tre le d'un
chaque

Pour chacune de ces propositions, complter le schma en y ajoutant les


contraintes de cardinalit quelle suggre.

Solution

tout professeur peut tre


titulaire d'un cours PROFESSEUR 0-1 titulaire 0-N COURS

chaque professeur est


titulaire de cours PROFESSEUR 1-N titulaire 0-N COURS

un professeur peut tre


le titulaire d'un cours
PROFESSEUR 0-1 titulaire 0-1 COURS

Remarque. Certaines interprtations peuvent conduire des contraintes de


cardinalit non autorises dans le modle de base ([1-N] par exemple, ou
encore [1-1] des deux cts). Il nous faudra patienter jusqu ltude du
modle tendu pour pouvoir les utiliser en toute scurit.

12.2 Dcomposer le fragment de texte ci-dessous en propositions lmentaires


(attention aux propositions irrductibles) :
On considre des entreprises manufacturires nationales. Chacune est
identifie par son code et possde une dnomination, une adresse et un
numro de TVA qui lui est propre. Une adresse est constitue dun nom de
voie, dun nom de localit et dun code postal. Les entreprises exportent des
produits vers des pays trangers. Une entreprise affecte un dlgu
commercial chaque pays dans lequel elle exporte.

12.3 Proposer un schma conceptuel qui reprsente le domaine dapplication


suivant :
A.12 Chapitre 12 - laboration dun schma conceptuel 53

Un club vido propose des cassettes et des DVD en location ses membres.
Pour chaque membre, on enregistre le nom, ladresse, le numro de
tlphone. On lui donne un numro dinscription qui lidentifie. Chaque
support est caractris par son type (cassette ou DVD), un code identifiant et
la date dachat. Pour le film du support, on enregistre le titre (identifiant),
son ralisateur, lacteur vedette et le genre. Plusieurs supports peuvent tre
disponibles pour un mme film, alors que pour certains films, il nexiste pas
encore de supports proposs la location. A tout instant, un support peut
tre lou par un membre du club.

Solution

FILM MEMBRE
Titre Numro
Ralisateur Nom
Acteur vedette Adresse
Genre Tlphone
id: Titre id: Numro

0-N
0-N
de

1-1

SUPPORT
Code
Type 0-1 loue
Date Achat
id: Code

12.4 Lnonc qui suit complte celui du premier exercice :


Chaque support est en outre caractris par le nombre demprunts, le titre du
film, son ralisateur, ses principaux acteurs (nom et prnom, tous deux
identifiants, ainsi que la date de naissance), la date de sortie du film. Pour
chaque location, on connat le support, la date demprunt, la date normale de
restitution, la date de restitution effective et lemprunteur. Une location dure
un nombre entier de jours (au moins un). On conserve lhistorique des
locations.
Suggestion. On reprsentera les emprunts en cours et les emprunts clturs
par un mme objet.
J-L Hainaut - 2009
54 Annexe A Exercices et solutions

Solution
FILM
Titre ACTEUR
Ralisateur 0-N jou par 0-N Nom
Date Sortie id: Nom
id: Titre

0-N

de

1-1

MEMBRE
SUPPORT
Numro
Code Nom
Date Achat Adresse
Type Tlphone
id: Code id: Numro

0-N LOCATION 0-N


Date Emprunt
de 1-1 Date Restitution 1-1 par
id: de.SUPPORT
Date Emprunt

12.5 Proposer un schma conceptuel qui reprsente le domaine dapplication


suivant :
On dsire grer une bibliographie constitue darticles (code identifiant,
type, titre). Chaque article est crit par un nombre quelconque dauteurs.
Chaque auteur est caractris par son nom (suppos identifiant) et
lorganisme dont il dpend. En outre, chaque article est extrait dun ouvrage
dont on donne le titre, lditeur, la date de parution, ainsi quun numro
identifiant. Dans cet ouvrage, chaque article commence en haut dune page
dont on connat le numro. Exemple : larticle de code 13245, du type
THEORIE, intitul Non-monotonic reasoning in operational research,
crit par Baxter (Stanford Univ.) et Randon (Bell Labs) est extrait (page 340)
de louvrage numro 556473, intitul Advanced Topics in Decision Support
Systems, publi par North-Holland en 1998.
Suggestion. La phrase qui prcde lexemple devrait attirer votre attention.
A.12 Chapitre 12 - laboration dun schma conceptuel 55

Solution
OUVRAGE
Numro
Titre
Editeur
Date Parution
id: Numro

0-N

dans

1-1

ARTICLE
Code
Titre AUTEUR
Type Nom
0-N crit 0-N
Page Organisme
id: Code id: Nom
id': dans.OUVRAGE
Page

12.6 Proposer un schma conceptuel qui reprsente le domaine dapplication


suivant :
Les patients de l'hpital sont rpartis dans les services (caractriss chacun
par un nom identifiant, sa localisation, sa spcialit) de ce dernier. Chaque
mdecin appartient un service. Il est identifi par son nom et son prnom.
Un patient passe des visites. Chaque visite est effectue chez un mdecin
une date dtermine. Un patient ne peut passer plus d'une visite par jour.
Lors d'une visite, une ou plusieurs prescriptions peuvent tre rdige. Chaque
prescription mentionne le nom d'un mdicament et la posologie respecter
par le patient (posologie = simple ligne de texte). Il est vident que le
mdecin ne prescrit pas deux fois le mme mdicament lors d'une mme visite
! Un patient possde un numro d'inscription (identifiant), un nom, un
prnom et une adresse.
J-L Hainaut - 2009
56 Annexe A Exercices et solutions

Solution
SERVICE
Nom
Spcialit
Localisation
0-N id: Nom 0-N
dans appartient
PATIENT
1-1 1-1 MEDECIN
Numro
Nom
Nom
Prnom
Prnom
id: Nom
Adresse 0-N 0-N Prnom
id: Numro
passe chez
1-1 1-1
VISITE
Date
id: passe.PATIENT
Date

0-N

rdige

1-1

PRESCRIPTION
Mdicament
Posologie
id: rdige.VISITE
Mdicament

12.7 Proposer un schma conceptuel qui reprsente le domaine dapplication


suivant :
Une entreprise de distribution dispose dun certain nombre de vhicules
(identifis par leur numro et caractriss par leur capacit et le nom du
conducteur). Chaque jour, chaque vhicule effectue une (et une seule)
tourne de distribution, dune longueur dtermine. Durant cette tourne, le
vhicule emporte des colis (dcrits chacun par un numro identifiant et un
poids). Chaque colis doit tre livr un destinataire. Un destinataire est
identifi par un numro de destinataire et caractris par un nom et une
adresse.
Suggestion. Attention lidentifiant des tournes.

Solution
A.12 Chapitre 12 - laboration dun schma conceptuel 57

VEHICULE
Numro
Capacit 0-N par
Conducteur
id: Numro
1-1

DESTINATAIRE TOURNEE
Numro Date
Nom Longueur
Adresse id: par.VEHICULE
id: Numro Date

0-N 0-N
COLIS
Numro
pour 1-1 1-1 distribu
Poids
id: Numro

12.8 Proposer un schma conceptuel qui reprsente le domaine dapplication


suivant :
Une bibliothque contient des ouvrages, reprs par un numro unique et
caractriss chacun par son titre, sa maison ddition et sa date ddition. Un
ouvrage peut avoir t crit par un ou plusieurs auteurs. Un auteur est
identifi par son nom et son prnom; il est caractris par sa date de
naissance. Un ouvrage peut en outre tre caractris par un ou plusieurs
thmes. Il existe un rpertoire de thmes standard, chaque thme tant dcrit
par un code concis (par exemple ROM.HIST) et son libell en clair (par
exemple ROMAN HISTORIQUE). Tous les codes concis sont diffrents.
Lorsquon caractrise un ouvrage, on lui attribue le ou les thmes qui le
dcrivent le mieux. Il se peut quun ouvrage ait t acquis suite la demande
personnelle dun lecteur. Un lecteur est identifi par son numro
dinscription et caractris par son nom et son adresse.
J-L Hainaut - 2009
58 Annexe A Exercices et solutions

Solution

THEME
Code
Libell
id: Code

0-N

caractrise

0-N

OUVRAGE AUTEUR
Numro Nom
Titre Prnom
0-N crit 0-N
Maison Edition Date Naissance
Date Edition id: Nom
id: Numro Prnom

0-1
LECTEUR
Num Inscription
demand 0-N Nom
Adresse
id: Num Inscription

12.9 Proposer un schma conceptuel qui reprsente le domaine dapplication


suivant :
Les clients de lentreprise sont caractriss par leur nom, leur adresse et le
montant de leur compte. Ils reoivent un numro qui permet de les distinguer.
Un client a pass un certain nombre de commandes, caractrises chacune
par un numro qui les identifie, une date de rception et lidentification de
lemploy qui la introduite. Chaque commande contient un certain nombre
de dtails de commande numrots, qui spcifient chacun le produit
command, la quantit dsire, la quantit dj livre et la date de la
dernire livraison. Un produit est identifi par un numro et caractris par
un libell et un prix unitaire. Les clients reoivent des factures. Chaque
facture correspond un colis expdi une date dtermine. Un colis
comporte, pour un ou plusieurs dtails de commande, la quantit expdie
(tout ou partie de la quantit commande) en fonction de la disponibilit du
produit. Une facture comporte un numro identifiant, la date dexpdition du
colis et un montant total. Elle spcifie aussi la composition du colis et les
coordonnes du client : nom, adresse et tlphone. Ltiquette du colis
reprend le numro de sa facture, sauf lorsquil ne contient que des produits
cadeaux. Les sous-colis dun colis correspondent des dtails de commande
distincts.
Suggestion. Attention aux propositions redondantes. Cet nonc fait penser
un schma bien connu : prudence tout de mme.
A.12 Chapitre 12 - laboration dun schma conceptuel 59

Solution
CLIENT
Numro
Nom
Adresse
Tlphone
Compte
id: Numro
0-N
0-N
passe
reoit
1-1
1-1
PRODUIT
COMMANDE
FACTURE Numro
Numro
Numro Libell
Date Rception
Montant Total Prix Unit
Employ
id: Numro Qt Stock
id: Numro
id: Numro
1-1

pour 0-N 0-N

DETAIL
0-1 Numro
Quantit Com
de 1-1 1-1 en
Quantit Livre
COLIS
id: de.COMMANDE
Date Exped Numro
0-N 0-N
de pour

1-1 1-1
SOUS-COLIS
Quantit Livre
id: pour.DETAIL
de.COLIS

12.10 Construire un schma conceptuel correspondant au fonctionnement dune


socit de formation (version de base).
Une socit de formation dsire informatiser la gestion des inscriptions aux
sessions quelle organise, ainsi que la facturation. Il existe un certain nombre
de sminaires de formation, chacun consacr un thme diffrent et factur
un tarif dtermin. Un sminaire peut tre organis plus dune fois, ce qui
correspond autant de sessions. Les sessions dun sminaire se tiennent
des dates diffrentes. Des entreprises inscrivent certains de leurs employs
certaines sessions. Il existe un nombre maximum de participants pour les
sessions de chaque sminaire (quelle que soit la date de la session). Tous les
J-L Hainaut - 2009

mois, la socit facture chaque entreprise concerne le montant


correspondant la participation de ses employs aux sessions du mois
coul.
60 Annexe A Exercices et solutions

Suggestion. On ajoutera les attributs que le bon sens suggre pour permettre
deffectuer la facturation.

Solution
SEMINAIRE ENTREPRISE
Thme Nom
Tarif Adresse
Nbre Maximum Compte
id: Thme id: Nom

0-N 0-N

de de

1-1 1-1

EMPLOYE
SESSION
Num Inscript
Date
0-N inscrit 0-N Nom
id: de.SEMINAIRE
Prnom
Date
id: Num Inscript

12.11 Construire un schma conceptuel correspondant au fonctionnement dune


socit de formation (version tendue).
Une socit de formation dsire informatiser la gestion des inscriptions aux
sessions qu'elle organise, ainsi que la facturation. Il existe un certain nombre
de sminaires de formation, chacun consacr un thme diffrent et factur
un tarif dtermin. Un sminaire peut tre organis plus d'une fois, ce qui
correspond autant de sessions. Les sessions d'un sminaire se tiennent des
dates diffrentes. Des entreprises inscrivent certains de leurs employs
certaines sessions. Lors d'une inscription, qui s'effectue une certaine date,
l'entreprise indique, pour chaque employ concern, le nom, le prnom, le
numro de tlphone, le matricule interne l'entreprise et la session
laquelle il est inscrit. Ds sa premire inscription, lemploy devient un client
de la socit de formation et reoit un numro unique. Ultrieurement,
l'inscription d'un employ une session peut tre annule ou transfre vers
un autre employ. Si l'annulation est effectue moins d'une semaine avant la
date de la session, un montant forfaitaire est cependant d. Il existe un
nombre maximum de participants pour les sessions de chaque sminaire
(quelle que soit la date de la session). Chaque sminaire est pris en charge
par un ou plusieurs instructeurs, dont on prcise le nom, le titre et
laffiliation, mais les instructeurs dun sminaire ne sont pas ncessairement
connus au moment o on prend les premires inscriptions, et peut utiliser un
ou plusieurs ouvrages de rfrence. Tous les mois, la socit facture chaque
entreprise concerne le montant correspondant la participation de ses
employs aux sessions du mois coul. On vrifiera que les informations
rpertories sont suffisantes pour rdiger la brochure commerciale de la
socit et pour produire et grer les factures.
A.12 Chapitre 12 - laboration dun schma conceptuel 61

Suggestion. Cest bien entendu le concept dinscription qui est au coeur de


lextension. On rflchira aux questions suivantes : est-ce quun employ qui
annule une inscription peut se rinscrire plus tard la mme session, quest-
ce quun transfert dinscription, est-ce quun employ qui transfre une
inscription peut la reprendre plus tard, quel historique veut-on mmoriser, et,
question cruciale qui rsume toutes les prcdentes, quel est lidentifiant de
ce type dentits ?

INSTRUCTEUR ENTREPRISE
Nom Nom
Titre Num TVA
Affiliation Adresse facturation 0-N payer 1-1
id: Nom Compte
id: Nom
0-N id': Num TVA FACTURE
en charge Num facture
0-N 0-N Date facture
0-N Mois factur
chez
par id: Num facture
SEMINAIRE id': payer.ENTREPRISE
1-1
Thme Mois factur
1-1
Tarif EMPLOYE
Forfait annulation Numro client
Nbre max Participants INSCRIPTION
Matricule employ
id: Thme Code inscription
Nom
Date Inscription
Prnom
0-N id: Code inscription
Tlphone
de id: Numro client
id': chez.ENTREPRISE
1-1 Matricule employ 0-N

0-N 0-N
SESSION
Date session pour transfre comprend
id: de.SEMINAIRE
Date session 1-1 0-1

0-N INSCRIPTION INDIVIDUELLE


Date annulation[0-1]
1-1 id: pour.EMPLOYE 1-1
.SESSION
excl: transfre.EMPLOYE
Date annulation

12.12 Construire un schma conceptuel dcrivant la structure dune institution


universitaire. On retiendra les faits suivants.
Linstitution est constitue de facults. A chaque facult sont rattachs des
J-L Hainaut - 2009

professeurs et des assistants (qui dpendent chacun dun professeur). Ces


personnes sont regroupes en dpartements au sein de la facult. Le
programme denseignement dune facult est dcompos en cycles (premier
ou Bachelor5, deuxime ou Master, troisime ou doctorat) eux-mmes
62 Annexe A Exercices et solutions

comportant des annes dtudes (2e Bachelor en chimie, 1r Master en


sciences politiques et Sociales, etc.) et est constitu de cours, dispenss dans
une ou plusieurs annes dtudes, voire mme dans dautres facults. Un
cours, dune dure dtermine, est pris en charge par un professeur. Chaque
tudiant peut tre inscrit certains cours (on admet lexistence de dispenses,
cours supplmentaires, etc.). Si ltudiant a subi un examen relatif un cours,
on lui attribue la note quil a obtenue.
Remarque. Cet nonc est (in)volontairement ambigu et incomplet. On
explicitera les hypothses choisies pour prciser lnonc.

5. Le choix de la nomenclature anglaise vite toute confusion avec les acceptions anciennes
(mais toujours vivaces) des termes baccalaurat et matrise.
A.12 Chapitre 12 - laboration dun schma conceptuel 63

Solution
FACULTE
Nom
id: Nom 0-N
dans
1-1 DEPARTEMENT
0-N Nom
id: dans.FACULTE
Nom
0-N
programme 0-N 0-N attach
PROFESSEUR
1-1 Matricule
attach
1-1 Nom
1-1 Prnom
0-N Adresse
ANNEE responsable ASSISTANT dpend id: Matricule
Intitul Matricule 1-1
Numro 0-N Nom
id: Intitul Prnom
Numro Adresse
id: Matricule
0-N 1-1
0-N
inscrit dispens

1-1
COURS
ETUDIANT
Code
Num Inscript charge
0-N Titre 1-1
Nom
Dure
Adresse
id: Code
id: Num Inscript

0-N 0-N

inscrit
qui Note[0-1] quoi
1-1 1-1
id: quoi.COURS
qui.ETUDIANT

12.13 Construire un schma conceptuel correspondant une gestion budgtaire


lmentaire dcrite comme suit.
Une entreprise est constitue de diffrents dpartements. Le budget de
lentreprise est dcompos en postes de natures distinctes (petit matriel,
dplacements, biens dquipement, logiciels, frais de personnel, etc.).
Chaque dpartement reoit une part propre de chacun de ces postes. Toute
demande de dpense doit suivre la procdure suivante : le dpartement
dsirant faire lacquisition de biens ou consommer un service fait une
demande dengagement dun certain montant, pour une nature de dpense
J-L Hainaut - 2009

relative au budget qui lui est propre; cette demande est vrifie puis, si elle
est accepte, fait lobjet dune commande auprs du fournisseur; ce
moment, le montant engag est soustrait du poste budgtaire propre ce
dpartement; la rception du bien ou service, la facture est vrifie puis
64 Annexe A Exercices et solutions

paye. On admet quune commande puisse tre annule. Le montant engag


est alors nouveau disponible.

Solution
POSTE-BUDGET
Numro Poste
Nature DEPARTEMENT
Montant Nom Dpart
id: Numro Poste id: Nom Dpart

0-N 0-N

de pour

1-1 1-1
BIEN-SERVICE
POSTE-DEPART Numro FOURNISSEUR
Montant Nature Nom
id: pour.DEPARTEMENT Description Adresse
de.POSTE-BUDGET id: Numro id: Nom

0-N 0-N 0-N 0-N

sur pour de chez


1-1 1-1 1-1
1-1
ENGAGEMENT OFFRE
Num Engag Prix
Date Dlai
Montant id: de.BIEN-SERVICE
Acceptation chez.FOURNISSEUR
id: Num Engag
0-N
0-N

par pour

1-1 1-1
FACTURE
COMMANDE
Num Facture
Numro
de Date Facture
Date 0-1 1-1
Montant
Etat Commande
Paye
id: Numro
id: Num Facture

12.14 Construire le schma conceptuel dcrivant un cabinet de mdecins.


Chaque mdecin reoit des patients en consultation. Lors de chaque
consultation de chaque patient, un certain nombre dactes mdicaux sont
effectus par le mdecin. Chaque acte est rpertori dans une liste standard
qui en donne le tarif. Cest ainsi que le mdecin calcule le prix de la visite. Le
patient peut payer lors de sa visite ou plus tard. Toute consultation non paye
au bout dun mois fait lobjet dun rappel de paiement. Les sommes perues
durant chaque mois constituent le revenu du mdecin. Cette information lui
permet de remplir aisment sa dclaration fiscale annuelle.
A.12 Chapitre 12 - laboration dun schma conceptuel 65

Le mdecin connat la date de naissance, le sexe et la profession de chaque


patient. Il sait galement si le patient souffre dun certain nombre
daffections rparties selon des classes standards. Lors de chaque visite dun
patient, le mdecin inscrit la date, les prestations et les mdicaments
prescrits. Si un patient est dcd, il indiquera la date du dcs.

Solution

PATIENT CATEGORIE
Num patient Nom
MEDECIN Nom Taux rembours
Code INAMI Prnom id: Nom
Nom 0-N chez pour 0-N Sexe
Prnom Profession 0-N
id: Code INAMI Date naissance
1-1 1-1 Date dcs[0-1] de
id: Num patient
CONSULTATION 1-1
ACTE-TYPE Date consult
Date paiem[0-1] AFFECTION
Code acte
id: chez.MEDECIN Code
Description
pour.PATIENT Libell
Tarif
Date consult id: Code
id: Code acte

0-N 0-N 0-N


0-N souffre 0-N
type effectu faite

1-1 1-1 1-1

ACTE-EFFECTUE PRESCRIPTION
Nombre Nom mdicament
id: effectu.CONSULTATION Posologie
type.ACTE-TYPE id: faite.CONSULTATION
Nom mdicament

12.15 Un carnet dadresses est une petite base de donnes qui ne semble pas poser
de problmes particuliers. Voire ! Proposer un schma conceptuel des
informations de contact dcrites dans lnonc ci-dessous.
Pour toute personne, on reprend son nom, son prnom (lorsquil est connu),
son titre (M., Mme, Matre, etc.), son adresse, son (ses) numro(s) de
tlphone fixe ou mobile et/ou de fax, son adresse lectronique. Si la
personne occupe une fonction dans une entreprise (ou organisme), on indique
aussi le nom et ladresse de celle-ci. Une personne peut avoir des
coordonnes prives et des coordonnes professionnelles. Elle peut aussi
occuper plus dune fonction, dans la mme entreprise ou dans des entreprises
diffrentes, et pour chacune de ces fonctions, avoir des coordonnes
J-L Hainaut - 2009

diffrentes. Dans certains cas, ces coordonnes sont tout simplement celles de
lentreprise. Il est frquent quune personne change dadresse, de fonction ou
tlphone. Il est important de pouvoir retrouver les caractristiques dune
personne dans le pass (o travaillait Dupont lanne dernire, et quel est le
66 Annexe A Exercices et solutions

fax de son ancien employeur ?). On veut aussi savoir quand chaque
information a t enregistre, pour en valuer la validit.

Solution
PERSONNE ORGANISME
Code personne Code organ
Nom Nom
Prnom[0-1] Date enreg
Titre priv id: Code organ
Date enreg 0-N
id: Code personne 0-N
dans
de FONCTION
1-1
1-1 Nom fonction 0-N
0-N
Date dbut
Date fin
Titre
Date enreg
id: de.PERSONNE
dans.ORGANISME
Nom fonction
Date dbut

0-N

de fonction

0-1

COORDONNEES
Date dbut
Date fin
Adresse
Tlphone[0-N]
Fax[0-N]
Adresse lectr[0-N]
Date enreg
prives 0-1 id': prives.PERSONNE 0-1 gnrales
Date dbut
id': de fonction.FONCTION
Date dbut
id': gnrales.ORGANISME
Date dbut
exact-1: gnrales.ORGANISME
de fonction.FONCTION
prives.PERSONNE

Remarque. Cette solution utilise une construction que nous navons pas encore
tudie : la contrainte exact-1, qui impose que toute entit COORDONNEE participe
obligatoirement soit une association prives soit une association gnrales soit
une association de fonction mais pas plus dune dentre elles (= exactement 1). Un
peu de patience, nous ltudierons dans le modle Entit-association tendu.

12.16 Construire le schma conceptuel dcrivant des comptitions sportives.


A.12 Chapitre 12 - laboration dun schma conceptuel 67

Chaque anne est organise une saison sportive, sous la prsidence d'une
personnalit de renom. Une saison est constitue d'une srie de
championnats, couvrant une certaine priode, chacun consacr une
discipline sportive (nom identifiant et responsable). Il y a un seul
championnat par saison et par discipline. Durant un championnat sont
organises, des dates diffrentes pour un mme championnat, des preuves,
localises chacune dans une ville. Une ville porte un nom; on y parle une
langue principale. Une ville est situe dans un pays (nom, code). Les villes
d'un pays ont des noms distincts, mais rien n'interdit que deux pays aient des
villes de mme nom. Chaque pays a une capitale, qui est une ville de ce pays.
Des sportifs (matricule, nom, prnom, date de naissance) reprsentent des
pays. Durant une priode dtermine, un sportif reprsente un seul pays. Il
peut alors participer une ou plusieurs preuves, au terme de chacune
desquelles il obtient un rsultat.
On vrifiera que le schma permet de rpondre des questions telles que les
suivantes : Qui a obtenu la mdaille de bronze en 110 m haies en 2001 ?
Quel pays n'a obtenu aucune mdaille en 1999 ? Quels sont les sportifs qui
ont remport une mdaille d'or dans la capitale du pays qu'ils
reprsentaient ?

Solution

SPORTIF PAYS DISCIPLINE SAISON


Matricule Nom Nom Anne
Nom Code Responsable Prsident
Prnom id: Nom id: Nom id: Anne
DateNaissance
id: Matricule 0-N 0-N
1-N 1-1

de durant
0-N 0-N dans capitale CHAMPIONNAT
DateDbut
1-1 DateClture 1-1
est de 1-1 0-1
id: de.DISCIPLINE
durant.SAISON
VILLE
1-1 1-1 Nom 0-N
Langue
id: dans.PAYS de
REPRESENTANT
Date-dbut Nom
1-1
Date-fin[0-1]
id: de.PAYS 0-N
EPREUVE
est.SPORTIF
Date-dbut Date
lieu 1-1
id: de.CHAMPIONNAT
Date
J-L Hainaut - 2009

participe
0-N 0-N
Rsultat[0-1]
68 Annexe A Exercices et solutions

Remarque. Cette solution utilise une construction que nous navons pas encore
tudie : lattribut dun type dassociations. Pour rendre ce schma strictement
conforme au modle Entit-association de base, on suggre de transformer le type
dassociations participe en type dentits PARTICIPATION puis daffecter ce dernier
lattribut Rsultat. Remarquons aussi lusage de la contrainte de cardinalit [1-N].

12.17 Normaliser le schma de la figure 3. Parmi les attributs de DEPARTEMENT,


on observe les dpendances suivantes :
Entreprise Adresse, Responsable;
Responsable Tlphone

EDITEUR AUTEUR
NomEditeur NomAuteur
id: NomEditeur id: NomAuteur

1-N OUVRAGE 1-N


ISBN
dit 1-1 Titre 1-1 crit
DateSortie
id: ISBN

0-N

de
DEPARTEMENT
Nom
1-1
Etage
Entreprise
EXEMPLAIRE
Adresse
NumEx
Responsable
DateAchat
Tlphone
Prix
id: Nom
id: NumEx

0-N 0-N
RESERVATION
objet 1-1 id: objet.EXEMPLAIRE 1-1 par
par.DEPARTEMENT

Figure A.3 - Un schma normaliser


A.12 Chapitre 12 - laboration dun schma conceptuel 69

Solution
RESPONSABLE
Nom
Tlphone
id: Nom

0-N

OUVRAGE de
ISBN
1-1
Titre
DateSortie ENTREPRISE
NomAuteur Nom
NomEditeur Adresse
id: ISBN id: Nom
0-N
0-N
de
de
1-1
1-1
EXEMPLAIRE
DEPARTEMENT
NumEx
DateAchat 0-N reserve Nom
0-N
Prix Etage
id: NumEx id: Nom

12.18 Montrer que les deux schmas de la figure A.4 sont quivalents. On adoptera
dabord une approche intuitive, base sur un graphe de populations
reprsentatif (figure 11.16). On se servira ensuite des transformations
prsentes aux figures 12.6 et 12.8.

OUVRAGE
ISBN
Titre
id: ISBN
OUVRAGE
ISBN MOT-CLE 0-N
Titre Libell
id: ISBN id: Libell de

1-1
0-N dcrit 1-N
DESCRIPTION
Libell
id: de.OUVRAGE
Libell

Figure A.4 - Equivalence de schmas


J-L Hainaut - 2009
70 Annexe A Exercices et solutions

A.13 CHAPITRE 13 - PRODUCTION DU SCHMA DE LA BASE DE


DONNES

13.1 Construire le schma des tables correspondant au schma conceptuel dune


structure administrative de la figure 11.25.

Solution
DIRECTION
NomDir
Prsident
id: NomDir

DEPARTEMENT
NomDir
NomDp
Localisation
id: NomDir
NomDp
ref: NomDir

SERVICE
DOSSIER NomDir EMPLOYE
NumDossier NomDp NumEmp
Titre NomServ NomEmp
DateEnreg Responsable Adresse
NomDir id: NomDir NomDir
NomDp NomDp NomDp
NomServ NomServ NomServ
id: NumDossier ref: NomDir id: NumEmp
ref: NomDir NomDp ref: NomDir
NomDp NomDp
NomServ NomServ
A.13 Chapitre 13 - Production du schma de la base de donnes 71

13.2 Construire le schma des tables correspondant au schma conceptuel dune


gestion de bibliothque de la figure 11.26.

Solution

MOT-CLE OUVRAGE EMPRUNTEUR


Valeur NumOuv NumEmpr
id: Valeur DESCRIPTION Titre NomEmpr
Auteurs Adresse
Valeur
Editeur id: NumEmpr
NumOuv
id: NumOuv
id: NumOuv
Valeur
ref: NumOuv
ref: Valeur
EXEMPLAIRE
NumEx
Position
DateAchat
NumEmpr[0-1]
NumOuv
id: NumEx
ref: NumOuv
ref: NumEmpr

13.3 Construire le schma des tables correspondant au schma conceptuel


reprsentant des voyages en train de la figure 11.27.

Solution
AGENT
IDAgent
Nom
Adresse
TRAIN
id: IDAgent
NumTrain
Origine STATION
LIGNE NomStation
id: NumTrain
CodeLigne Commune
Date Activ ChefStation
id: CodeLigne id: NomStation
ref: ChefStation
VOYAGE
Ligne SECTION
DateVoyage Ligne
HeureVoyage NumOrdre
NumTrain Longueur
Conducteur StationDepart
id: Ligne StationArrivee
DateVoyage id: Ligne
HeureVoyage NumOrdre
ref: NumTrain ref: StationDepart
ref: Conducteur ref: StationArrivee
J-L Hainaut - 2009

ref: Ligne ref: Ligne


72 Annexe A Exercices et solutions

13.4 Driver un schma de tables partir du schma conceptuel de la figure 5.6

issu-de

pre enfant
0-N 0-1

0-1 senior 0-1 CHEVAL


JOCKEY ECURIE
Nom
Nom Nom
0-N inscrit 0-N Date
Poids Adresse
id: appartient.ECURIE
id: Nom id: Nom 0-N appartient 1-1 Nom

0-N COURSE
0-N
Hippodrome
Date 0-N dans
id: Hippodrome
Date 1-1

PARTICIPATION
Position
mont-par 1-1 1-1 de
id: dans.COURSE
Position

Figure A.5 - Un schma conceptuel traduire

Solution

JOCKEY INSCRIPTION ECURIE CHEVAL


Nom NomEcurie Nom EcurieOrigine
Poids NomJockey Adresse NomCheval
id: Nom id: NomJockey id: Nom EcurieSenior[0-1]
NomEcurie Date
ref: NomJockey Pere_EcurieOrigine[0-1]
ref: NomEcurie Pre_NomCheval[0-1]
id: EcurieOrigine
PARTICIPATION NomCheval
id': EcurieSenior
Hippodrome
ref
Date
ref: EcurieOrigine
Position
COURSE ref: Pere_EcurieOrigine
NomJockey
Hippodrome Pre_NomCheval
EcurieOrigineCheval
Date coex
NomCheval
id: Hippodrome id: Hippodrome
Date Date
Position
ref: NomJockey
ref: Hippodrome
Date
ref: EcurieOrigineCheval
NomCheval

6. On notera que le schma ne dit rien sur les liens ventuels entre les types dassociations senior
et appartient. Il conviendrait que la traduction demande ne fasse pas non plus dhypothse sur
ces liens.
A.13 Chapitre 13 - Production du schma de la base de donnes 73

13.5 Traduire en un schma de tables le schma conceptuel de lexercice 12.5.


Garnir les tables avec les donnes qui correspondent lexemple dcrit.

13.6 Traduire en structure de tables le schma conceptuel de lexercice 12.14.


Ecrire les requtes qui aideront le mdecin dans ses tches danalyse de
donnes. Ses questions les plus frquentes sont les suivantes :
le nombre de cas dans chacune des classes daffections;
la corrlation entre la profession et chacune de ces classes daffections;
la corrlation entre la localit de rsidence et chacune de ces classes daffec-
tions;
la corrlation entre lge et chacune de ces classes daffections;
la corrlation entre la localit de rsidence et lge des patients;
la rpartition des ges de dcs selon la classe daffection;
la rpartition des ges de dcs selon la profession.

13.7 Justifier les modes on delete et on update du code SQL de la section 13.9.
J-L Hainaut - 2009
74 Annexe A Exercices et solutions

A.14 CHAPITRE 14 - MTHODOLOGIE DES BASES DE DONNES


Nant

A.15 CHAPITRE 15 - LE MODLE ENTIT-ASSOCIATION TENDU

15.1 On considre le type dassociations cyclique informe ci-dessous, qui


reprsente les flux dinformation entre des personnes. Si (p1,
p2) PERSONNE, alors la personne p2 reoit de linformation de la personne
p1. On prcise que ce type dassociations correspond une relation
transitive : si (p1, p2) et (p2, p3) existent, alors (p1, p3) existe galement.
Discutez de lutilit de reprsenter par les instances toutes les associations ou
seulement celles de la rduction transitive (qui ne sont pas obtenues par
transitivit).

PERSONNE

source destination
0-N 0-N

informe

15.2 Construire un tableau similaire celui de la figure 15.34 pour les types
dassociations binaires.

15.3 Le type dassociations cyclique vendu de la figure 15.9 nest pas satisfaisant,
car il impose certaines contraintes aux possibilits de vente. On suggre
dajouter un attribut Date Vente. Complter le schma en introduisant cet
attribut et en dfinissant lidentifiant qui semble le plus appropri.

Solution
Ce schma interdit un vendeur de vendre plus dune fois un mme
immeuble un mme acheteur. Situation rare mais possible ! En introduisant
la date de vente, et en admettant quun immeuble ne puisse tre vendu deux
fois le mme jour, il vient :
vendeur
0-N
vendu
Date
CLIENT 0-N IMMEUBLE
id: IMMEUBLE
Date
acheteur
0-N

15.4 Incroyable mais vrai !


On considre nouveau le schma cyclique bien connu repris ci-dessous.
A.15 Chapitre 15 - Le modle Entit-association tendu 75

PERSONNE
NPers
Nom

responsable subordonn
0-N 0-1

supervise

On observe que 75% des personnes ont un responsable et sont donc des
subordonns. Combien de subordonns une personne supervise-t-elle en
moyenne ?

Solution
Lnonc nous apprend que subord = 0,8. Or, on sait (section 15.8.7) que
Nsupervise = Npers x resp = Npers x subord. On en dduit lgalit, peut-tre un
peu surprenante, resp = subord. Une personne supervise donc en moyenne 0,8
subordonns.
Cette question en entrane une autre : combien un responsable supervise-t-il
de subordonns en moyenne ? Ce nombre est videmment gal ou suprieur
1 mais nous ne pouvons le calculer sans connatre une autre grandeur : la
proportion de personnes qui sont responsables ou, autrement dit, la
probabilit presp quune personne soit un responsable. Le nombre moyen
dassociations supervise dans lesquelles une personne responsable apparat
est resp / presp. En supposant que 10% des personnes ont le statut de
responsable, on dduit que celles-ci supervisent en moyenne une quipe de
0,8/0,1 = 8 personnes, valeur qui est sans doute plus naturelle !

15.5 On considre le schma ci-dessous, exprimant quun auteur apparat dans une
certaine position dans la liste des auteurs dun ouvrage. Complter ce schma
de manire rendre explicite les deux rgles mtier : un auteur n'apparat
qu'une seule fois pour un ouvrage, et il n'y a qu'un seul auteur une position
dtermine pour un ouvrage. Ce schma est-il normalis ?

crit
OUVRAGE 0-N 0-N AUTEUR
Position

Solution
Cette question a t aborde dans lexercice 3.5, o on a conclu que le
schma tait normalis.

crit
J-L Hainaut - 2009

Position
OUVRAGE 0-N id: OUVRAGE 0-N AUTEUR
Position
id': AUTEUR
OUVRAGE
76 Annexe A Exercices et solutions

15.6 Reprsenter par un schma un ensemble de personnes qui peuvent tre unies
par les liens du mariage. On reprsentera les faits suivants :
il nest pas interdit une personne de se marier plusieurs fois,
une date donne, une personne ne peut avoir quun seul conjoint,
il nest pas obligatoire dtre mari tout instant,
il nest pas interdit une personne dpouser une mme personne plus dune
fois.

15.7 On considre le schma de la figure 15.52. Combien ce schma comporte-t-il


de cycles ? Comment un type dassociations n-aire est-il pris en compte dans
le reprage des cycles ? Lun de ces cycles fait-il lobjet de contraintes
dintgrit cycliques ?

15.8 On considre les deux types dassociations r entre A et B et s entre B et C. On


considre aussi le type dassociations rs dfini comme la composition de r et s
(figure A.6) Calculer les cardinalits des rles de rs partir de celles des rles
de r et de s. On procdera en deux tapes :
1. on dterminera la classe fonctionnelle (1:N, 1:1, N:1 ou N:N) partir de
celles de r et de s,
2. on calculera les cardinalits [v-w] et [x-y] partir de celles de r et de s.

rs

v-w x-y

A c-d r f-g B k-l s m-n C

Figure A.6 - Etude de la composition de deux types dassociations

Avant de crier prmaturment victoire, on vrifiera que les formules obte-


nues, appliques aux valeurs c = 3 et k = 2, dcrivent correctement le sch-
ma d'instances ci-dessous :
A B C

Solution
On ne traite ici que la question 2. La question 1, assez simple, est reporte au
chapitre 11.
Premire approche
Une entit A quelconque apparat dans au plus d associations r et est donc
associe d entits B au plus. Chacune de celles-ci apparat dans au plus l
A.15 Chapitre 15 - Le modle Entit-association tendu 77

associations s et donc est associe l entits C au plus. On suggre donc w =


d x l, et, par symtrie, y = m x f.
Pour les cardinalits minimales v et x, on pourrait a priori appliquer un
raisonnement similaire : une entit A apparat dans au moins c associations r
et est donc associe au moins c entits B. A chacune de celles-ci
correspondent au moins k entits de C. On aurait donc v = c x k, et, par
symtrie, x = n x g.
Malheureusement, ce dernier raisonnement est trop simpliste, comme
l'illustre le schma dinstances de lnonc, qui reprsente des instances
valides du schma pour c = 3 et k = 2. On y observe qu'il existe bien c x k = 6
associations s, mais qu'une entit A n'est associe via rs qu' 2 entits C, et
non 6 au moins comme le voudrait la rgle ci-dessus.
Analyse
Il apparat en effet que deux entits B distinctes peuvent tre associes une
mme entit C. Dans un tel cas, le nombre d'entits C associes une entit A
pourra tre infrieur c x k. La valeur c x k reprsente donc la valeur
maximale de v, mais certaines configurations admettent des valeurs
infrieures. Il n'est pas difficile de dterminer ce qui caractrise ces
situations :
pour qu'une mme entit C puisse tre partage par plusieurs entits B, il faut
que celle-ci puisse apparatre dans plusieurs associations s, et donc il faut que
m > 1.
La rgle v = c x k n'est donc correcte que lorsque c = 0 ou k = 0 (auxquels cas
v = 0), ou lorsque m = 1. Elle doit tre affine lorsque c et k > 0 et m > 1, ce
que nous allons faire.
Etudions d'abord jusqu'o nous pouvons lgalement rduire le nombre
d'entits C. Nous savons qu' toute entit A correspondent (au moins) c x k
associations s. Or, une entit C ne peut apparatre dans plus de m associations
s. Donc ces c x k associations s exigent au moins c x k/m entits C
distinctes. On a donc v c x k/m.
Observons ensuite que cette rduction est limite par une autre contrainte :
puisqu'une entit B doit apparatre dans au moins k associations s, il faut pour
construire celles-ci au moins k entits C distinctes, le nombre total d'entits C
ne peut tre infrieur k. On a donc aussi v k.
On en conclut que v max(c x k/m, k) lorsque c > 0 et k > 0 et m > 1.
Nous disposons prsent de deux valeurs pour v : une valeur maximale (c x
k), valable lorsque c = 0 ou k = 0 ou m =1 et une valeur minimale (max( c x k/
m, k)) valable dans les autres cas. On unifie ces deux cas par la rgle
v = min(c x k, max( c x k/m, k)).
J-L Hainaut - 2009

Conclusion
On peut donc crire :
v = min(c x k, max( c x k/m, k))
78 Annexe A Exercices et solutions

w = dxl
x = min(n x g, max( n x g/d, g))
y = mxf

Remarque
Afin que les tailles des populations des types d'entits n'imposent pas de
contraintes sur les cardinalits, on suppose que ces tailles sont trs grandes
vis--vis de d, g, l, n.

15.9 Proposer deux formes quivalentes du type dassociations multi-type


dentits de la figure 15.10. Voir aussi , sur le mme thme, lexercice 17.18.

Solution
0-1 possde 0-N PERSONNE possde 0-N PROPRIETAIRE

VEHICULE
exact-1: possde.PERSONNE 1-1 P
possde.SERVICE

0-1 possde 0-N SERVICE VEHICULE PERSONNE SERVICE

15.10 Un attribut de structure trop complexe peut tre lindice dune mauvaise
modlisation. Montrer que lexemple ci-contre en est une illustration.
Proposer une variante quivalente plus approprie.
CLIENT
NumCli
Nom
Commande[0-N]
NumCom
DateCom
Detail[1-5]
NumSeq
NumPro
Qt
id: NumCli
id(Commande):
NumCom
id(Commande.Detail):
NumSeq

Solution
Lattribut complexe Commande est extrait sous la forme du type dentits
COMMANDE. Son attribut complexe Dtail de ce dernier est trait de la mme
manire. On obtient ds lors le schma ci-dessous :
A.15 Chapitre 15 - Le modle Entit-association tendu 79

DETAIL
COMMANDE
CLIENT NumSeq
NumCom
NumCli NumPro
0-N passe 1-1 DateCom 1-5 de 1-1
Nom Qt
id: passe.CLIENT
id: NumCli id: de.COMMANDE
NumCom
NumSeq

15.11 On considre le schma de droite de la figure 15.41, reprsentant des


nomenclatures de produits. On a convenu que le graphe des instances ne
comportait pas de circuits (15.12.4). Cette proprit garantit par exemple que
des procdures rcursives travaillant sur les instances ne boucleront pas.
Admettons maintenant que certains produits finis sont rinjects dans le
processus de fabrication, comme cest le cas dans la mtallurgie et dans
lindustrie verrire, o les chutes et les pices non conformes sont recycles,
de sorte quun produit fini est aussi une matire premire. Modifiez le
schma de manire (1) tenir compte de lexistence de tels circuits et (2)
conserver la proprit dacyclicit initiale.

15.12 Complter le schma ci-dessous des contraintes qui paraissent videntes.

1-N appartient 1-1 VILLE


PAYS
NomVille
NomPays
id: appartient.PAYS
id: NomPays
NomVille
1-1 capitale 0-1

Solution
Si on admet que la capitale dun pays appartient ce dernier, alors il faut
imposer la contrainte capitale appartient.

15.13 Complter le schma de la figure 7 en calculant les grandeurs inconnues,


notes "?".
J-L Hainaut - 2009
80 Annexe A Exercices et solutions

CLIENT NClient = 10.000


NumClient
aCl = 1,2 Nom sCl = 2,4
0-N Adresse 0-N
appartient id: NumClient signe

aV = ? 1-1 1-1 sCo = ?


NVhicule = ? VEHICULE
CONTRAT NContrat = ?
NumVh
cV = ? cCo = ? NumCtr
Marque
Type
Modle 1-1 couvre 0-1
DateSign
Anne
id: signe.CLIENT
Cylindre
NumCtr
id: NumVh

ACCIDENT NAccident = ?
iV = 1,5
NumAcc
iV = 0,1 0-N implique 0-N DateAcc
Montant[0-1]
i = ?
id: NumAcc

Figure A.7 - Calcul des tailles des populations

Solution
En exploitant les relations de la section 15.8.7, il vient :
appartient : aV = 1 ACCIDENT : NAccident = 800
signe : sCo = 1 couvre : cV = 1
VEHICULE : NVhicule = 12 000 couvre : cCo = 0,5
CONTRAT : NContrat = 24 000 implique : i = 1 200

15.14 Analyser le schma ci-dessous.

A 0-N R 1-1 B
A1 B1
A2 B2
id: S.B id: R.A
A1 1-1 S 0-N B1

15.15 Indiquer pour chaque type dentits du schma ci-dessous les attributs pour
lesquels on doit fournir une valeur de manire identifier une entit de ce
type. Par exemple, pour identifier une entit CLIENT, il faut fournir une valeur
de CLIENT.NumCli, tandis que pour une entit FACTURE, il faut fournir une
valeur de de.CLIENT.NumCli et une valeur de FACTURE.NumFact7.

7. Attention, ceci ne veut pas dire que le groupe {NumCli, NumFact} constitue un identifiant de
FACTURE.
A.15 Chapitre 15 - Le modle Entit-association tendu 81

CLIENT
NumCli
de 0-N Nom 0-N de
Adresse
1-1 id: NumCli 1-1

FACTURE COMMANDE PRODUIT


NumFact NumCom NumPro
DateFact DateCom Prix
id: de.CLIENT id: de.CLIENT id: NumPro
NumFact NumCom
0-N
0-N
DETAIL-COM
0-N
Quantit
de 1-1 1-1 de
id: de.COMMANDE
de.PRODUIT

0-N
DETAIL-FACT
Quantit
de 1-1 1-1 de
id: de.DETAIL-COM
de.FACTURE

Solution

Pour identifier ... il faut connatre les valeurs de ...


CLIENT CLIENT.NumCli
FACTURE de.CLIENT.NumCli,
FACTURE.NumFact
COMMANDE de.CLIENT.NumCli,
COMMANDE.NumCom
PRODUIT PRODUIT.NumPro
DETAIL-COM de.COMMANDE.de.CLIENT.NumCli,
de.COMMANDE.NumCom,
de.PRODUIT.NumPro
DETAIL-FACT de.FACTURE.de.CLIENT.NumCli,
de.FACTURE.NumFact,
de.DETAIL-COM.de.COMMANDE.de.CLIENT.NumCli,
de.DETAIL-COM.de.COMMANDE.NumCom,
de.DETAIL-COM.de.PRODUIT.NumPro

Lidentification de DETAIL-FACT ncessite la connaissance de deux valeurs


de NumCli.

15.16 Le schma de la question 15.15 est-il le sige dune contrainte cyclique ? Si


oui, en crire lexpression.

15.17 Proposer un mta-schma pour les modles SQL2 et SQL3.


J-L Hainaut - 2009

15.18 Proposer un mta-schma pour le modle relationnel (chapitre 3).

15.19 Proposer un mta-schma pour le modle Entit-association tendu.


82 Annexe A Exercices et solutions

15.20 Imaginer un schma quivalent celui de la figure 15.41 (droite) mais


utilisant un type dassociations de composition.

15.21 Le schma de droite de la figure 15.48 dcrit partiellement la composition


dun vhicule. Son interprtation est cependant loin dtre vidente. Le
lecteur est invit examiner les questions suivantes, et modifier ou
complter le schma si ncessaire.
Que reprsente une entit MOTEUR ? Un type de moteur ou un moteur
bien prcis ?
Une entit MOTEUR existe-elle indpendamment de lentit VEHICULE
dans la composition de laquelle elle entre ? Un moteur peut-il changer de
vhicule ? Un vhicule peut-il changer de moteur ?
Le type dentits ROUE reprsente-t-il les types de roue disponibles ou
bien toutes roues fabriques ? Comment modifier le schma pour tenir
compte de lautre interprtation ?

15.22 On a montr dans la section 15.18.9, point (c), que le type dassociations
inscrit de la figure 15.40 ntait pas normalis et quil pouvait se transformer
en trois schmas quivalents. Dessiner ces schmas dans le modle Entit-
association en indiquant soigneusement toutes les contraintes dintgrit.

Solution
En sinspirant des solutions obtenues la fin de la section 3.8.5, on obtient :

ETUDIANT 0-N
inscrit
id: ETUDIANT 0-N PROFESSEUR
MATIERE
MATIERE 0-N
PROFESSEUR MATIERE

ETUDIANT 0-N inscrit 0-N


PROFESSEUR
if: inscrit.ETUDIANT [*]
donne.MATIERE
MATIERE 0-N donne 0-1

inscrit*donne: ETUDIANT, MATIERE PROFESSEUR

ETUDIANT 0-N
inscrit
id: ETUDIANT 0-N PROFESSEUR
MATIERE
MATIERE 0-N

0-N donne 0-1

inscrit[PROFESSEUR, MATIERE] donne

15.23 Dfinir la smantique relationnelle du schma 11.27 (Voyages en train).


A.15 Chapitre 15 - Le modle Entit-association tendu 83

15.24 Dfinir la smantique relationnelle du schma 15.17.

15.25 Dfinir la smantique relationnelle du schma 15.52.

15.26 On considre un type dentits FEMME dot des attributs Nom et Prnom.
Complter ce schma en y incluant la reprsentation des deux proprits
suivantes :
a) une femme peut tre la mre dautres femmes,
b) une mre donne ses filles des prnoms distincts.

Solution
Il sagit dun exemple didentifiant cyclique (voir section 15.10.2).

15.27 Reprsenter la structure et la croissance de certains arbres fruitiers (en


loccurrence des pommiers) qui obissent aux lois suivantes. Dune manire
gnrale, et en simplifiant outrance, un arbre est form daxes (branches)
dots chacun dune squence de noeuds. Chaque axe (sauf laxe principal, qui
est le tronc) pousse au dpart dun noeud dun axe plus ancien. La structure
qui rsulte de ces rgles est, sans surprise, celle dun arbre. On peut dsigner
univoquement un axe en prcisant son axe pre et le numro du noeud dont il
est issu sur cet axe8.

Solution
Il sagit dun exemple didentifiant cyclique (voir section 15.10.2).

15.28 Le mta-schma de la figure 15.52 reprsente des identifiants qui traduisent


lunicit des noms des objets dun schma. Cependant, la contrainte qui veut
que les noms des rles dun type dassociations soient distincts nest pas
traduite correctement si on inclut dans ces noms les noms par dfaut. Corriger
ce schma pour tenir compte de ces derniers.

15.29 Considrons le tableau des contraintes dexistence de la section 15.11.3. Le


lecteur quelque peu familier avec la logique aura reconnu dans ce tableau une
table de vrit dfinissant compltement cinq fonctions logiques deux
variables (A et B). Sachant quil existe 16 fonctions logiques deux variables,
on observe que ce tableau nest pas complet. On peut reprsenter chaque
fonction par les valeurs prsentes dans sa colonne lues de haut en bas. Ainsi,
coex = [1001] et excl = [1110]. Etudier les autres fonctions : sont-elles utiles
? Existe-t-il des fonctions primitives, partir desquelles il est possible de
construire les autres ?
J-L Hainaut - 2009

Solution

8. Problme aimablement communiqu par J-J. Claustriaux, professeur la Facult Agrono-


mique de Gembloux.
84 Annexe A Exercices et solutions

Le tableau ci-dessous complte celui de la section 15.11.3 en reprsentant les


16 fonctions. On attribue, en entte de chaque colonne, un numro de 0 15
chaque fonction. Ainsi, coex = [1001] reoit le numro 9 et excl = [1110] le
numro 14.
A B 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
0 1 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
1 0 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
- - - - - -

On peut faire quelques observations intressantes.


Certaines fonctions nont aucune utilit. Par exemple, la fonction 0
([0000]) rend le parent non satisfiable et la fonction 15 ([1111]) nimpose
aucune contrainte. Nous pouvons les ignorer.
De mme, les quatre fonctions ne comportant quun seul signe 1 sont sans
intrt, puisquon peut toujours leur substituer une modification du
schma : supprimer A et/ou B ou rendre A et/ou B obligatoire. On ignore
donc aussi les fonctions 1, 2, 4 et 8.
Restent ainsi les dix fonctions utiles 3, 5, 6, 7, 9, 10, 11, 12, 13 et 14.
Certaines comporte trois signes 1 (7, 11, 13, 14) et les autres deux signes 1
(3, 5, 6, 9, 10, 12).
On observe que toutes les fonctions deux signes 1 peuvent tre obtenues
par une conjonction de deux fonctions trois signes 1. Par exemple,
[1010] = [1011] [1110].
On en conclut que les quatre fonctions (7, 11, 13, 14) sont primitives et
permettent de reconstruire toutes les fonctions utiles. Elles correspondent
aux contraintes "at-lst-1: A, B", "if: B, A", "if: A, B" et "excl: A, B".
Notre modle Entit-association comporte donc trois contraintes
dexistence primitives at-lst-1, if et excl.

15.30 Etablir les tables de vrit des contraintes dexistence portant respectivement
sur 3 et 4 composants facultatifs.

Solution
Cette question sera rsolue pour les expressions 2 et 3 composants la
section 20.5. On y montre quil existe une loi de formation qui permet
dextrapoler lexpression des contraintes de plus de 3 composants.

15.31 On considre les contraintes excl: A, B, C et coex: A, B, C. Exprimer ces


contraintes en utilisant des contraintes deux composants.
A.15 Chapitre 15 - Le modle Entit-association tendu 85

15.32 En examinant la table de vrit voque lexercice 15.29 et en considrant


la fonction logique existe(x.E), qui renvoie vrai si le composant E de lobjet x
existe et faux sinon, tablir la contrainte, ou la conjonction de contraintes,
quivalente chacune des expressions suivantes :
quivalence : existe(x.A) = existe(x.B)
disjonction exclusive : existe(x.A) existe(x.B)
implication : existe(x.A) existe(x.B)
disjonction : existe(x.A) existe(x.B)
conjonction : existe(x.A) existe(x.B)

15.33 Comment exprimer laide des contraintes dexistence la proprit qui dit
que si A existe, alors B doit tre absent.

Solution
Si A est absent, la proprit est vraie. Si A est prsent et B absent la proprit
est vraie. Si A est prsent et B lest aussi la proprit est fausse. Cette
proprit correspond donc la fonction [1110], qui est lexpression de excl:
A, B.

15.34 Un type dassociations binaire R entre A et B a pour quivalent mathmatique


une relation binaire R(A,B). Les mathmaticiens ont identifi des classes
remarquables de relations binaires : partout dfinie, surjection, fonction,
application, injection, bijection. Quelles sont les proprits du type
dassociations R qui correspondrait chacune de ces classes ?

Solution
En considrant R de A vers B, on peut dfinir les quivalences suivantes9 :

classe quivalent algbrique TA


partout dfinie R[A] = A
A 1-? r ?-? B

surjection R[B] = B A r B
?-? 1-?

fonction R(A,B) A r B
?-1 ?-?

application R(A,B); R[A] = A A r B


1-1 ?-?

injection R(A,B) A r B
?-? ?-1
J-L Hainaut - 2009

9. Nous avons qualifi de faible le concept de bijection adapte au domaine des bases de donnes
(relation fonctionnelle injective). Les mathmaticiens considrent habituellement une dfinition
forte : application (fonction partout dfinie) surjective et injective.
86 Annexe A Exercices et solutions

bijection (faible) R(A,B) A ?-1 r ?-1 B

bijection (forte) R(A,B); R[A]=A; R[B]=B A 1-1 r 1-1 B

15.35 En utilisant les rsultats de la question 15.29, simplifier chacun des schmas
suivants.

E E E E E E
A1 A1 A1 A1 A1 A1
A2[0-1] A2[0-1] A2[0-1] A2[0-1] A2[0-1] A2[0-1]
A3[0-1] A3[0-1] A3[0-1] A3[0-1] A3[0-1] A3[0-1]
at-lst-1: A2 excl: A2 excl: A2 coex: A2 si: A2 excl: A2
A3 A3 A3 A3 A3 A3
si: A2 si: A2 at-lst-1: A2 at-lst-1: A2 si: A3 at-lst-1: A2
A3 A3 A3 A3 A2 A3
si: A2
A3

A.16 CHAPITRE 16 - LES DIAGRAMMES DE CLASSES UML

16.1 Exprimer en OCL les contraintes manquantes dans les schmas 16.11 et
16.12.

16.2 Proposer un mta-schma des diagrammes de classes de DB-UML.

16.3 Proposer un mta-schma des diagrammes de classes dUML.


A.17 Chapitre 17 - Analyse conceptuelle du domaine dapplication 87

A.17 CHAPITRE 17 - ANALYSE CONCEPTUELLE DU DOMAINE


DAPPLICATION

17.1 Toute personne possde deux parents biologiques, lesquels sont des
personnes. Discuter cette proposition dans le contexte de lanalyse
conceptuelle.

Solution
Introduire dans le schma, comme une analyse nave pourrait le suggrer, un
rle enfant de cardinalit [2-2] rendrait le type dentits PERSONNE non
satisfiable (section 17.6.2/c). On se souviendra quun schma conceptuel ne
reprsente pas proprement parler un domaine dapplication, mais plutt la
connaissance quon en a. Comme on ne connat pas les parents biologiques de
chaque personne, on dgradera la contrainte en [0-2].

17.2 Proposer un schma conceptuel explicitant les relations existant parmi les
personnes formant des familles et/ou des mnages. On veillera reprsenter
lvolution de ces structures.

17.3 Construire le schma conceptuel dcrivant un rseau de distribution deau.


Un rseau de distribution d'eau est constitu de sections de canalisation.
Une section relie deux nuds : le nud amont (alimentant) et le nud aval
(aliment); l'eau s'coule donc dans un sens dtermin, de l'amont vers l'aval.
Une section est caractrise par sa longueur, son diamtre, sa date
d'installation et la liste des rparations qu'elle a subies (date, distance par
rapport au nud amont, type). A l'exception des nuds terminaux ("racines"
et "feuilles"), un nud relie une section amont (alimentant le nud) et une ou
plusieurs sections aval (alimentes par le nud), l'ensemble formant une
fort (ensemble d'arbres).
Un nud comprend une vanne dont on connat le modle. La racine d'un
arbre est un nud spcial qui n'est pas connect une section amont, mais
qui reoit l'eau d'une installation d'alimentation, identifie par un numro, et
d'un type tel que "captage", "rservoir", "station d'puration", etc. Chaque
installation d'alimentation alimente un arbre du rseau. Les feuilles d'un
arbre n'alimentent pas de sections aval. Chaque nud est repr par son
adresse; il est caractris par sa profondeur. Une section ne fait pas l'objet
de plus d'une rparation par jour.
Chaque client (nom, adresse) possde un et un seul compteur identifi par
son numro, et branch sur une section. La position de ce branchement est
indique par la distance partir du nud amont. Pour chaque client, on
enregistre les consommations annuelles.
J-L Hainaut - 2009
88 Annexe A Exercices et solutions

Solution
Premire approche simplifie :
1-1 connect 0-N aval
1-1 aval
0-1 NOEUD
CLIENT Adresse
NumCompteur SECTION
Profondeur
Nom Longueur
ModleVanne
Adresse Diametre
id: Adresse
Distance DateInstal
exact-1: injecte.ALIMENTATION
id: NumCompteur aval.SECTION
0-N amont
1-1 amont
0-N 0-N
de 0-1
consomme
1-1 injecte
1-1
REPARATION 1-1
CONSOMMATION DateRep
Anne Distance ALIMENTATION
Volume Type Numro
id: consomme.CLIENT id: de.SECTION Type
Anne DateRep id: Numro

Remarques. (1) SECTION, un concept majeur, ne dispose que dun identifiant


implicite (son NOEUD aval), (2) les diffrentes sortes de noeuds ne sont pas
mises en vidence. Do les deux variantes ci-dessous. Certaines contraintes
sont manquantes.
NOEUD NOEUD
Adresse Adresse
Profondeur Profondeur
ModleVanne ModleVanne
id: Adresse id: Adresse

T P

AVAL AMONT FEUILLE INTERNE RACINE

1-1 1-N aval amont 1-1


1-1 1-N
aval amont RACINE
1-1 aval amont injection
1-1 1-1 1-1 1-1
injection
SECTION SECTION 1-1
1-1
IDSection IDSection
Longueur ALIMENTATION Longueur ALIMENTATION
Diamtre Numro Diametre Numro
DateInstal Type DateInstal Type
id: IDSection id: Numro id: IDSection id: Numro

17.4 Etudier soigneusement les principales pages dun site de commerce


lectronique tel que www.amazon.fr, www.fnac.com ou www.ebay.fr. Il
apparat clairement que les informations quelles contiennent sont extraites
A.17 Chapitre 17 - Analyse conceptuelle du domaine dapplication 89

dune base de donnes. Identifier dans le site choisi une partie rduite, telle
que Musique / Meilleures ventes chez Amazon, et proposer un schma
conceptuel des concepts et des informations qui y sont reprsents.

17.5 Reprenons le problme consistant reprsenter un ensemble de produits et


leur composition, dj rencontr plusieurs reprises dans cet ouvrage :
Chaque produit peut tre compos de produits plus simples, eux-mmes
ventuellement composs dautres produits. Pour chaque produit compos,
on indique la quantit de chaque composant qui est ncessaire pour en
fabriquer une unit. Pour les produits lmentaires (non composs) on
connat le prix unitaire, le poids unitaire et le fournisseur qui peut le livrer.
Tout produit a un numro identifiant et un libell. Un produit fini possde un
code externe identifiant, un conditionnement et ventuellement un
distributeur. Un produit nintervient pas, mme indirectement, dans sa
propre composition.

Solution
Lnonc indique que la structure des produits est un graphe hirarchique.
Nous proposons dabord un schma trs simple

DISTRIBUTEUR PRODUIT FOURNISSEUR


NumProduit
Libell
0-N Code Externe[0-1] 0-N
Conditionnement[0-1]
Prix Unitaire[0-1]
distribue 0-1 Poids Unitaire[0-1] 0-1 livre
id: NumProduit
coex: Code Externe
Conditionnement
coex: Prix Unitaire
Poids Unitaire
compos livre.FOURNISSEUR composant
0-N 0-N

acyclic
utilise
Quantit

Il peut cependant tre utile de distinguer les diffrentes classes de produits,


qui sont dotes de proprits spcifiques. Lnonc a dj identifi les
produits lmentaires, communment dnomms matires premires et les
produits finis. Le schma ci-dessous est une spcialisation du prcdent. Il
dtaille les autres classes de produits et assigne certaines dentre elles des
proprits spcifiques, sous la forme dattributs, de rles et didentifiants.
J-L Hainaut - 2009
90 Annexe A Exercices et solutions

PRODUIT
NumProduit
Libell
id: NumProduit

DISTRIBUTEUR PRODUIT MANUFACTURE HORS CHAINE FOURNISSEUR

0-N T 0-N

COMPOSE COMPOSANT

acyclic
distribue livre
1-N utilise 1-N
P P
Quantit

PRODUIT FINI PRODUIT SEMI-FINI MATIERE PREMIERE 1-1


0-1
Code Externe Prix Unitaire
Conditionnement Poids Unitaire
id': Code Externe

PRODUIT FINI MATIERE PREMIERE =

17.6 La partie achat du site commercial mentionn la question prcdente


comporte aussi des informations relatives aux clients, aux paiements et aux
conditions de livraison. Il est vident que la socit conserve des informations
sur les achats prcdents des clients, de manire personnaliser les pages qui
sont prsentes un visiteur particulier.
Proposer une extension du schma de la question prcdente qui dcrive ces
nouvelles informations.
Remarque. Les exercices 17.4 et 17.6 illustrent une problmatique qui prend
actuellement de plus en plus dimportance : comprendre la structure
smantique de sites trangers afin den extraire de manire intelligente des
donnes pertinentes. Cet exercice relve de la rtro-ingnierie des site web.

17.7 Proposer un schma conceptuel traduisant les concepts de lnonc suivant.


Dans un rseau de bibliothques, chacune delles commande des exemplaires
d'ouvrages repris dans une liste de rfrence. Chaque commande est
numrote (de manire tre identifiable) et reprend la quantit, la date et
l'ouvrage concern. Une bibliothque n'envoie pas plus d'une commande
d'un mme ouvrage le mme jour.
Un ouvrage peut tre publi par un diteur pendant une certaine priode. A
tout moment, lditeur dun ouvrage peut cder ses droits de publication un
autre diteur (il peut mme les racqurir plus tard). Dun ouvrage, un
diteur qui en possde les droits peut tirer, une certaine date, un nombre
dtermin dexemplaires. Si, aprs au moins 3 mois, les ventes savrent
A.17 Chapitre 17 - Analyse conceptuelle du domaine dapplication 91

meilleures que prvu, lditeur effectuera un nouveau tirage (et ainsi de


suite). Un ouvrage est caractris par un numro ISBN qui l'identifie, son
titre et sa langue. Un ouvrage est soit un original (auquel cas il est
caractris par un genre), crit par un ou plusieurs auteurs, soit une
traduction dun original. Dans ce dernier cas, louvrage est traduit par un
ou plusieurs auteurs (pour simplifier, vrais auteurs et traducteurs sont
considrs comme des auteurs). Une bibliothque est identifie par son nom
et sa localit. Elle a une adresse et un responsable.
Un diteur est identifi par son nom et caractris par son adresse et son
pays dorigine. Cependant, son adresse peut changer au cours du temps.
L'adresse est accompagne d'un numro de tlphone. Un auteur porte un
code unique et est caractris par son nom et son prnom.

Solution

publi
BIBLIOTHEQUE DateDbut
Nom 0-N DateFin 0-N
OUVRAGE
Localit id: OUVRAGE
ISBN EDITEUR
Adresse DateDbut
Titre Nom
Responsable
Langue Pays
id: Nom tir
id: ISBN id: Nom
Localit Date
0-N Quantit 0-N
0-N 0-N 0-N
P id: OUVRAGE
Date
client objet
contact
ORIGINAL
TRADUCTION
1-1 1-1 Genre
1-1
COMMANDE 1-N 0-N traduit-de 1-1 1-N
Numro ADRESSE-EDITEUR
Date crit-par traduit-par Date
Quantit AUTEUR
Adresse
id: Numro CodeAuteur Tlphone
id': objet.OUVRAGE 0-N Nom 0-N
id: contact.EDITEUR
client.BIBLIOTHEQUE Prnom Date
Date id: CodeAuteur

17.8 Un organisme gre les activits htelire d'un ensemble d'tablissements


d'une rgion. Chaque htel porte un nom unique, appartient une catgorie,
et est ouvert durant une priode dtermine. On enregistre son adresse. Il
dispose de chambres, classes par catgories, propres l'htel. Le prix d'une
chambre dpend de sa catgorie, qui prcise l'quipement disponible : bain,
douche et tlviseur. Les chambres d'un htel ont des numros distincts.
Elles sont situes un tage et offrent un certain nombre de lits une
J-L Hainaut - 2009

personne et deux personnes.


Les clients occupent des chambres, avec ou sans rservation. Lors d'une
rservation, dont on enregistre le numro et la date, le client demande une ou
plusieurs chambres. Pour chacune, il prcise soit une chambre prcise soit
92 Annexe A Exercices et solutions

une catgorie, ainsi que la priode d'occupation prvue. L'htelier vrifie s'il
dispose de chambres de cette catgorie durant cette priode. Par la suite, il
pourra affecter une chambre relle la rservation selon la catgorie.
Une chambre est occupe par un ou plusieurs clients durant une certaine
priode effective. Si cette occupation a fait l'objet d'une rservation, on
indique celle-ci.
Les clients occupant une chambre peuvent consommer des services
(blanchisserie, sauna, etc.), des articles du mini-bar, des communications
tlphoniques (dont le tarif dpend de la destination) et des petits djeuners
(il existe plusieurs catgories, de prix diffrents). On connat le tarif de
chaque type de consommation; pour un service on indique en outre si le prix
est forfaitaire ou proportionnel. Pour chaque consommation, on connat la
date, l'heure et, si pertinent, la quantit. Le responsable de l'occupation d'une
chambre est le client qui assumera le paiement; il n'occupe pas
ncessairement cette chambre. Lors de lenregistrement dun client, on lui
affecte un numro de client et on note son nom, son prnom et son adresse.
Une adresse est compose dun nom de rue, dun numro dimmeuble, du
nom de la commune et du code postal, du dpartement ou de ltat (si
pertinent), du pays, et, sils existent, dun numro de tlphone, dune
adresse de courriel et dune adresse web. On enregistre aussi la mme adresse
sous la forme dune trois lignes qui sont imprimer telles quelles sur les
enveloppes. Plusieurs clients peuvent partager la mme adresse.
A la date du dpart, une facture est tablie et remise au client responsable des
occupations. La facture est numrote et reprend en outre le mode de
paiement et, lorsque celui-ci est effectu, sa date. La facture dtaille les
chambres occupes ainsi que les consommations de chacune. Le montant de
la facture peut tre diffrent de la somme des chambres occupes et des
consommations (suite une remise par exemple).
A.17 Chapitre 17 - Analyse conceptuelle du domaine dapplication 93

Solution
ADRESSE
adr htel Code Adresse
0-N
Rue
adr client 0-N Numro
Commune
1-1
1-1 Code Postal
Dpartement/Etat[0-1]
HOTEL CLIENT Pays
Nom Htel Numro Client Tlphone[0-1]
0-N Catgorie 0-N Nom Couriel[0-1]
propose
Priode ouverture Prnom Adresse Web[0-1]
id: Nom Htel Date Enregistrement Ligne 1
1-1 Numro identification Ligne 2
dans
id: Numro Client Ligne 3
CATEGORIE CHAMBRE id': Numro identification id: Code Adresse
Nom Catgorie
1-1 Tarif 0-N
Bain[0-1] 0-N 0-N 0-N
Douche[0-1]
Tlvision[0-1]
CHAMBRE
id: propose.HOTEL rserve responsable par pour
Numro Chambre 0-N Nom Catgorie
Etage
1-1 1-1
Lits 1 pers 1-1 est de
Lits 2 pers FACTURE
0-N RESERVATION
id: dans.HOTEL Numro Facture
Numro Chambre Numro Rservation
Date Rservation Date facture
Montant
0-N pour id: Numro Rservation
Mode Paiement
0-N Date Paiement[0-1]
affecte id: Numro Facture
0-1 dt
0-N
0-1
1-1
dt
0-N DETAIL RESERVATION
Numro Dtail 1-1
Date Dbut prvue
Date Dpart prvue 1-1 1-N DETAIL FACTURE
id: dt.RESERVATION Numro Dtail
Numro Dtail id: dt.FACTURE
exact-1: pour.CATEGORIE CHAMBRE OCCUPATION Numro Dtail
affecte.CHAMBRE Date Dbut effective
Date Dpart effective 1-1
0-1

de 1-1
0-N 0-N de

selon 1-1 OCCUPATION RESERVEE pour


NATURE CONSOMMATION
Tarif
1-1

P
CONSOMMATION
de Date
0-N 1-1
Heure
SERVICE MINI-BAR TELEPHONE PETIT DEJEUNER Quantit[0-1]
Nature Article Destination Catgorie
Forfait id: Article id: Destination id: Catgorie OCCUPATION.de.DETAIL FACTURE.dt.FACTURE.pour.CLIENT
id: Nature in
OCCUPATION.responsable.CLIENT

CHAMBRE.dans.HOTEL DETAIL RESERVATION.affecte.CHAMBRE.est de.CATEGORIE CHAMBRE


= in
CHAMBRE.est de.CATEGORIE CHAMBRE.propose.HOTEL DETAIL RESERVATION.pour.CATEGORIE CHAMBRE

Remarque
J-L Hainaut - 2009

La solution suggre comporte une contradiction qui rend un type dentits non
satisfiable. lequel ?
94 Annexe A Exercices et solutions

17.9 Proposer un mta-schma pour le modle SQL2 (exprim dans le modle


Entit-associations tendu). Plus prcisment, on dsire construire un
dictionnaire de donnes qui reprsente les structures dune collection de
bases de donnes. Chaque base de donnes porte un nom identifiant et est
localise par son chemin daccs (URL).
Chaque base de donnes est constitue dun nombre quelconque de tables,
elles-mmes constitues chacune dau moins une colonne. Une table est
relle (de base) ou virtuelle (vue). Les lignes dune table sont stockes dans
un espace de stockage de la base de donnes. Les rgles dunicit des noms
des tables, des colonnes et des espaces sont celles dSQL. La localisation
dun espace de stockage est unique. Une colonne est obligatoire ou
facultative. Elle est dfinie sur un type de base (decimal, character, bit, etc.)
ou sur un domaine dfini par lutilisateur. Ce dernier porte un nom unique
dans la base de donnes et est dfini sur un type de base.
Un certain nombre de cls peuvent tre attaches une table. Une cl est
identifiante (auquel cas elle est primaire ou secondaire) ou rfrentielle (cl
trangre). Elle porte un nom unique dans la base de donnes. Une cl est
compose dune squence dau moins une colonne de sa table. Une colonne
ne peut apparatre plus dune fois dans une mme cl. A chaque cl
rfrentielle est associe une cl identifiante de mme composition.

Solution
On propose le schma ci-dessous. Il devrait tre complt de diverses
contraintes dintgrit. On pourrait aussi le complter par la reprsentation
des View, des index, des triggers, des checks et des privilges.
A.17 Chapitre 17 - Analyse conceptuelle du domaine dapplication 95

BD
Nom
Accs
id: Nom
id': Accs

0-N 0-N 0-N 0-N

dans dans dans dans

1-1 1-1 1-1

ESPACE
DOMAINE UTIL TABLE
Nom
Nom Nom
Localisation
Type de base Type 1-1 stocke dans 0-N
id: dans.BD
id: dans.BD id: dans.BD
Nom
Nom Nom
id': Localisation
0-N 1-N

de type dans

0-1 1-1

COLONNE 1-1
Nom COMPOSANT
Obligatoire NumSquence CLE
Type de base[0-1] id: COLONNE Nom
0-N 1-N
id: dans.TABLE CLE id: dans.BD
Nom id': CLE Nom
exact-1: de type.DOMAINE UTIL NumSquence
Type de base P

IDENTIFIANTE
REFERENTIELLE
Type

0-N rfrence 1-1

17.10 Normaliser le schma ci-dessous.

DIRECTEUR EMPLOYE
NumEmp NumEmp
Nom Nom CAT
Adresse Adresse Catgorie
Dlgu DateEngag[0-1] id: Catgorie
Position Dpartement[0-1]
id: NumEmp id: NumEmp
coex: DateEngag
0-N resp 1-1 Dpartement 1-1 de 1-N
J-L Hainaut - 2009

DIRECTEUR: Position Dlgu

Solution
Ce schma comporte quatre sous-structures non normalises.
96 Annexe A Exercices et solutions

DIRECTEUR et EMPLOYE ont des attributs commun. On les extrait pour


former le surtype PERSONNE. On fait lhypothse que lidentifiant
NumEmp sapplique lunion des populations des sous-types.
La contrainte coex sur les attributs dEMPLOYE sexprime de manire plus
claire sous la forme dun attribut compos facultatif.
Le type dentits CAT apparat comme un type dentits - attribut.
Le dterminant de la DF explicite Position Dlgu nest pas un iden-
tifiant de DIRECTEUR. On extrait les attribut litigieux Position et Dlgu
sous la forme dun type dentits autonome.

POSITION PERSONNE
Position NumEmp
Dlgu Nom
id: Position Adresse
id: NumEmp
1-N
T

R 1-1 DIRECTEUR EMPLOYE


Engagement[0-1]
0-N DateEngag
Dpartement
resp 1-1 Catgorie

17.11 Normaliser le schma ci-dessous, qui exprime le fait que certains ouvrages
ont t traduits par des traducteurs.

source
0-N

par
OUVRAGE traduit TRADUCTEUR
0-N

traduction
0-1

Solution
Ce schma nest pas normalis, car il comporte un type dassociations
ternaire dont un rle est de cardinalit [0-1]. Cette proprit nentranant pas
de problme de redondance, il est possible de conserver ce schma tel quel.
Si on dsire pousser plus loin la normalisation, on dcomposera le type
dassociations, ce qui conduit au schma suivant :
A.17 Chapitre 17 - Analyse conceptuelle du domaine dapplication 97

traduit

source traduction
0-N 0-1

OUVRAGE
coex: traduit.source 0-1 par 0-N TRADUCTEUR
par.TRADUCTEUR

Ce schma prsente deux dfauts. Dune part, il introduit une contrainte


additionnelle (coexistence), et dautre part il comporte deux rles facultatifs
susceptibles dentraner des problmes dans une implmentation relationnelle
(cls trangres valeur null).
La contrainte de coexistence peut sexprimer de manire structurelle via le
sous-type TRADUCTION, qui met en vidence le concept douvrage traduit.
Ce schma sera sans doute plus volutif que les prcdents si ce concept
devait prendre de limportance dans la suite. En outre, il ne contient plus les
rles facultatifs problmatiques.

0-N OUVRAGE

source

1-1 TRADUCTION 1-1 par 0-N TRADUCTEUR

Discussion additionnelle
Il est intressant dobserver que le premier et le troisime schma se
traduisent, selon le plan de transformation classique, par des schmas
relationnels apparemment identiques :

OUVRAGE TRA TRADUCTEUR


ID_OUV ID_OUV ID_TRA
id: ID_OUV SOURCE id: ID_TRA
TRADUCTEUR
id: ID_OUV
ref
ref: SOURCE
ref: TRADUCTEUR

En fait, ces schmas diffrent par linterprtation de la table TRA (dont le nom
a expressment t choisi pour sa neutralit : TRADUIT ou TRADUCTION).
J-L Hainaut - 2009

Dans le premier cas, cette table reprsente les oprations de traduction, les
ouvrages traduits tant reprsents exclusivement dans la table OUVRAGE.
Dans le deuxime cas, la table TRA reprsente les ouvrages traduits. Un tel
ouvrage est reprsent par un fragment extrait de TRA auquel on joint le
98 Annexe A Exercices et solutions

fragment correspondant dans la table OUVRAGE. Si, dans le futur, il tait


ncessaire dajouter des proprits spcifiques aux ouvrages traduits, il
faudrait les ajouter la table OUVRAGE dans le premier cas, sous forme de
composants facultatifs, et la table TRA dans le second.
Dans le modle relationnel objet, qui supporte les relations is-a, le diffrence
serait bien entendu nettement marque, et cette discussion serait sans objet.

17.12 Eliminer la contrainte dinclusion ci-dessous en la reprsentant de manire


structurelle.

A 0-N R 0-N B
A1 B1
id: A1 0-N S 0-N id: B1

S R
La construction la plus frquente qui soit base sur une contrainte dinclusion
dextensions est la relation is-a. En transformant les deux types
dassociations en types dentits, la contrainte dinclusion se traduit par une
relation is-a entre ces derniers. On obtient ainsi le schma ci-dessous.

A R B
A1 0-N R 1-1 id: R.A 1-1 R 0-N B1
id: A1 R.B id: B1

Il est galement possible de simplifier ce schma selon le procd de la


section 17.7.1 (Sous-type faiblement spcifique). On notera que le schma
relationnel qui drive naturellement de ce schma normalis est simple et
intuitif :

A R B
A1 B1 B1
id: A1 A1 id: B1
id: A1
B1
ref: A1
ref: B1

S
A1
B1
id: A1
B1
ref
A.17 Chapitre 17 - Analyse conceptuelle du domaine dapplication 99

17.13 En utilisant le concept de satisfiabilit, simplifier le schma ci-dessous


A

B C

D T

D E

Solution
En raison de la contrainte P sur A, le type dentits E est non satisfiable. Les
populations de C et E sont les mmes (contrainte T sur C). C est donc lui aussi
non satisfiable. Par consquent les populations de A et B sont les mmes. On
peut donc fusionner A et B en AB, qui regroupe leurs attributs, rles et
contraintes. Il vient donc :
AB

17.14 Il est possible de prouver lquivalence de deux types dentits en dmontrant


quils ont la mme population. Montrons-le dans lexemple ci-dessous (on
admet que A et B ont un surtype commun) :
A B AB

?
A1 B1 A1
B1


T T
T

C D C D
C1 D1 C1 D1

On a : pop(A) = pop(C) pop(D); pop(B) = pop(C) pop(D)


do : pop(A) = pop(B)
On peut donc admettre que les types dentits A et B sont identiques. On les
renomme AB. Dterminer de la mme manire si, dans chacun des deux
couples ci-dessous, les schmas sont quivalents.
J-L Hainaut - 2009
100 Annexe A Exercices et solutions

A
A1 A

?
A
T
? A1
A1


A
T T
B A1
B1
E C D B
T
E1 C1 D1 B1
E C D
E1 C1 D1

17.15 Tous les objets du schma ci-dessous sont-ils satisfiables (daprs [Vigna,
2004]) ?

A 1-N r 0-1

B C 0-1 s 1-N D

0-1 t 1-N

Solution
de r on tire : ND NA de s on tire : NC ND
de t on tire : NB ND de la relation is-a on tire : NA NB + NC 2 x ND
on a donc : NA 2 x NA, ce qui nest valide que si NA = 0.
On en conclut quaucun des quatre types dentits nest satisfiable.

17.16 Normaliser, si ncessaire, le type dassociations ci-dessous10.

ETUDIANT MATIERE PROF

0-N

inscrit
0-N 0-N
Date-Inscr

inscrit: MATIERE PROFESSEUR

Solution
La smantique interne du type dassociations inscrit est la suivante :
inscrit(ETUDIANT, MATIERE, PROF, Date-Inscr)

10. Attention, les rgles relatives aux identifiants implicites sont de stricte application. En parti-
culier, on tiendra compte de lidentifiant implicite avant de faire intervenir la dpendance
fonctionnelle.
A.17 Chapitre 17 - Analyse conceptuelle du domaine dapplication 101

inscrit: MATIERE PROFESSEUR


La dcomposition de ce schma sous 3e forme normale correspond au
schma ci-dessous. La contrainte de coexistence disparat si on admet que
toute matire est dispense par un professeur.

MATIERE
ETUDIANT coex: inscrit.ETUDIANT [*] 0-1 donne 0-N PROF
donne.PROF

inscrit
0-N 0-N
Date-Inscr

17.17 Vrifier la cohrence du schma ci-dessous et normaliser celui-ci si


ncessaire.

A
A1
A2[0-1]
A3[0-1]
A4[0-1]
A5[0-1]
id: A1
coex: A2
A3
excl: A3
A4
excl: A4
A5
exact-1: A2
A5

Est-il possible qu'une entit A respecte simultanment les 4 contraintes ? Si


oui, alors le schma est cohrent. Il existe plusieurs manires d'aborder cette
question. En voici une premire qui s'inspire de l'valuation d'une fonction
boolenne complexe par calcul de sa table de vrit.
Pour toute entit A, chacun des attributs A2, A3, A4, A5 peut avoir une valeur
(ce quon note 1) ou non (not 0). Il existe donc 24 = 16 configurations
possibles. Pour chacune d'elles, on value chacune des contraintes (VRAI ou
FAUX). Les configurations pour lesquelles les 4 contraintes ont la valeur VRAI
sont cohrentes. Les autres ne peuvent se produire. Le tableau de calcul est le
suivant :

A2 A3 A4 A5 coex:A2,A3 excl:A3,A4 excl:A4,A5 exact1:A2,A5 total


J-L Hainaut - 2009

0 0 0 0 VRAI VRAI VRAI FAUX FAUX


0 0 0 1 VRAI VRAI VRAI VRAI VRAI
0 0 1 0 VRAI VRAI VRAI FAUX FAUX
0 0 1 1 VRAI VRAI FAUX VRAI FAUX
102 Annexe A Exercices et solutions

0 1 0 0 FAUX VRAI VRAI FAUX FAUX


0 1 0 1 FAUX VRAI VRAI VRAI FAUX
0 1 1 0 FAUX FAUX VRAI FAUX FAUX
0 1 1 1 FAUX FAUX FAUX VRAI FAUX
1 0 0 0 FAUX VRAI VRAI VRAI FAUX
1 0 0 1 FAUX VRAI VRAI FAUX FAUX
1 0 1 0 FAUX VRAI VRAI VRAI FAUX
1 0 1 1 FAUX VRAI FAUX FAUX FAUX
1 1 0 0 VRAI VRAI VRAI VRAI VRAI
1 1 0 1 VRAI VRAI VRAI FAUX FAUX
1 1 1 0 VRAI FAUX VRAI VRAI FAUX
1 1 1 1 VRAI FAUX FAUX FAUX FAUX

On observe que 2 configurations satisfont simultanment des 4 contraintes.


Le schma est donc cohrent. En revanche, toutes les autres configurations
dattributs sont invalides et napparatront jamais. On observe en outre que
lattribut A4 n'a jamais de valeur dans les deux configurations valides et qu'il
peut donc tre supprim. Le schma se simplifie comme suit :

A
A1
A2[0-1]
A3[0-1]
A5[0-1]
id: A1
coex: A2
A3
exact-1: A2
A5

On peut proposer une autre mthode danalyse, plus simple et plus rapide. On
construit un arbre dfinissant, pour la suite des attributs A2, A3, A4, A5, leur
tat correspondant aux contraintes. On observe les contradictions, selon
lesquelles on dduit dun attribut qui a une valeur le fait quil nen a pas, ou le
contraire. Partant de A2, qui soit a une valeur (branche suprieure, note
"A2") soit nen a pas de valeur (branche infrieure, note "A2"), l'arbre se
prsente comme ci-dessous. Deux configurations sur les 5 ne prsentent pas
de contradictions ("OK"). Elles se caractrisent par l'absence de valeur pour
A4. On peut alors simplifier le schma comme ci-dessus.
A.17 Chapitre 17 - Analyse conceptuelle du domaine dapplication 103

A5 A2 contradiction
A2 A3 A4
A5 A2 OK

A4 A5 A2 contradiction

A2 A3
A5 A2 OK
A4
A5 A2 contradiction

17.18 Le schma ci-dessous comporte des constructions contradictoires. Il peut


aussi tre dcrit comme un schma non normalis. Proposer une version
normalise et cohrente.

0-N offre 1-1

FOURNISSEUR PIECE

0-N assigne 0-N

0-N

COMMANDE

assigne[FOURNISSEUR,PIECE] offre[FOURNISSEUR,PIECE]

Solution
La contrainte dit quil serait stupide dassigner la commande dune pice un
fournisseur qui ne livrerait pas la pice commande. Jusque l, le schma est
naturel. On note cependant une particularit intressante : toute pice est
livre par un et un seul fournisseur. Comme consquence de la contrainte
dinclusion, le fournisseur renseign dans une association assigne nest rien
dautre que le fournisseur prcis dans le type dassociations offre. Le rle
assigne.FOURNISSEUR est donc inutile. En le supprimant, on obtient le
schma normalis ci-dessous.

0-N offre 1-1

FOURNISSEUR PIECE

0-N

assigne
J-L Hainaut - 2009

COMMANDE 0-N
104 Annexe A Exercices et solutions

Les concepts tudis au chapitre 3 peuvent nous aider raisonner de manire


plus rigoureuse. La proprit 6 des dpendance fonctionnelles (Propagation
vers la projection) ou, de manire quivalente, la proprit 4 des contraintes
dinclusion (Propagation des DF), nous permettent de conclure que la DF de
offre existe aussi dans assigne. Par consquent, le type dassociations
assigne nest pas normalis. On peut le dcomposer en deux fragments, dont
lun est redondant avec offre et peut tre supprim.

17.19 Un schma conceptuel comporte le fragment suivant. Est-il correct ?

A B
A1 B1
id: A1 id: B1

0-N 0-N
C
C1
ac 0-1 id': ac.A 0-1 bc
bc.B
exact-1

Solution
La contrainte dexclusion implique quaucune entit C naura jamais
didentifiant compltement non null, de sorte que lunicit ne sera jamais
value. On peut supprimer lidentifiant de C, inutile :

A B
A1 B1
id: A1 id: B1

0-N 0-N
C
C1
ac 0-1 0-1 bc
exact-1: ac.A
bc.B

17.20 Proposer un schma conceptuel minimal intgrant les informations contenues


dans les trois types dentits ci-dessous.

ascendant
ELEVE parent enfant
Num-Inscript EMPLOYE 0-N 0-N
Nom Matricule ASSURE
Adresse Nom Num-SS
Prnom Prnom Nom
Date-Naissance Adresse Prnom
Ecole Service Sexe
Anne-Scolaire Date-Engagement Adresse
Pre[0-1] Date-Naissance Rgime
Mre[0-1] Prnom-Enfant[0-10] Date-Naissance
id: Num-Inscript id: Matricule id: Num-SS
A.17 Chapitre 17 - Analyse conceptuelle du domaine dapplication 105

Solution
Un exemple rsultant de certains options, qui seraient discuter :

ascendant
parent enfant
0-N 0-N
PERSONNE
Nom
Prnom
Sexe
Adresse
Date-Naissance

ELEVE ASSURE EMPLOYE


Num-Inscript Num-SS Matricule
Ecole Rgime Service
Anne-Scolaire id: Num-SS Date-Engagement
id: Num-Inscript id: Matricule
J-L Hainaut - 2009
106 Annexe A Exercices et solutions

17.21 Proposer un schma conceptuel traduisant les concepts de lnonc suivant.


Une socit scientifique organise depuis plusieurs annes une confrence
annuelle au mois de septembre. Chaque confrence est gre par un comit
scientifique. La confrence est accueillie par une organisation (universit,
entreprise ou administration) dont les cordonnes prcises sont connues. Le
comit scientifique est constitu de membres dont l'un en est nomm le
prsident. Les membres sont dcrits par leur nom, leur prnom et leur
affiliation. Celle-ci est une organisation. La composition du comit et
l'organisation d'accueil changent d'anne en anne.
Suite un appel communications, gnralement diffus en fvrier, la
confrence reoit des articles. Ceux-ci sont numrots dans le contexte de la
confrence. Il n'est pas interdit des membres du comit scientifique de
soumettre des articles. Si un article est crit par plusieurs auteurs, l'un d'eux
doit se dclarer auteur principal. Chaque article est transmis plusieurs
valuateurs, qui sont des membres du comit scientifique de la confrence.
Au terme du processus d'valuation, chaque valuateur transmet au prsident
du comit, pour chacun des articles examins, une note et un commentaire.
Aprs lecture des valuations de chaque article, le prsident dcide si celui-ci
est accept ou refus.
Le comit tablit ensuite le programme de la confrence. Les articles retenus
sont groups par thmes. A chaque thme sont associes une ou plusieurs
sessions d'une demi-journe. Chaque article fait l'objet d'une prsentation qui
reoit une plage horaire lors de sa session et qui est assure par un de ses
auteurs. Un prsident est assign chaque session. Il est choisi parmi les
membres du comit scientifique.
Les auteurs reoivent un numro qui les identifie en tant qu'auteurs au sein de
la confrence. Un auteur peut signer plusieurs articles. Un article est
caractris par son titre et son abstract. Les articles accepts dans une
confrence dtermine ont des titres distincts.
Toutes les personnes impliques dans ces confrences sont caractrises par
un nom, un prnom et ventuellement une adresse E-mail. Le nom et le
prnom constituent l'identifiant d'une personne.

Solution
A.17 Chapitre 17 - Analyse conceptuelle du domaine dapplication 107

ORGANISATION
Nom
Type
Coordonnes
id: Nom

0-N 0-N

affilie
accueil
0-1
1-1
PERSONNE
CONFERENCE Nom
Anne Prnom
Date E-mail[0-1]
id: Anne id: Nom
Prnom
0-1 0-N 0-N

de dans est

1-1
1-1 1-1
COMITE
0-N INTERVENANT
0-N 0-N

de de

1-1 1-1

THEME AUTEUR
MEMBRE
Intitul NumAuteur
Prsident[0-1]
id: de.CONFERENCE id': dans.CONFERENCE
id: de.COMITE
Intitul NumAuteur
soumis

0-N 0-N 0-N 0-N 0-N

de prsident value
Rsultat[0-1] crit
Note prsente
Principal[0-1]
1-1 1-1 Commentaire

SESSION
0-N 1-1 1-1
Date
Plage
ARTICLE
id: de.THEME
Date NumArticle
Plage Titre
Abstract
0-N id: soumis.CONFERENCE
NumArticle
id': soumis.CONFERENCE
assign Titre
Heure[0-1]
id': SESSION
J-L Hainaut - 2009

Heure

1-1 ARTICLE-ACCEPTE 0-1


108 Annexe A Exercices et solutions

A.18 CHAPITRE 18 - CONCEPTION LOGIQUE DUNE BASE DE


DONNES RELATIONNELLE

18.1 Reprendre les exercices du chapitre 13 et les rsoudre en appliquant le plan


de transformation dvelopp dans ce chapitre. Pour ce qui est de lexercice
13.2, on ajoutera la proprit suivante au schma conceptuel : le cheval
senior dune curie appartient celle-ci.

18.2 Traduire le schma conceptuel ci-dessous en structure de tables.


y1
0-N R 1-1 0-N

u1
0-1
0-N S 1-1 B v1
A
B1 0-1
A1
B2 V W Y
A2
id: R.A v2
id: A1 0-N T 0-1 B1 0-1

w2
U 0-N
0-N 0-N

y2
0-N

Solution
B
R_A1
A B1
A1 V1_R_A1[0-1]
A2 V1_B1[0-1]
id: A1 B2
S_A1
T_A1[0-1]
W_R_A1[0-1] Y
W_B1[0-1] Y2_R_A1
id: R_A1 Y2_B1
U B1 Y1_R_A1
A1 id': V1_R_A1 Y1_B1
R_A1 V1_B1 id: Y2_R_A1
B1 ref coex Y2_B1
id: R_A1 ref: W_R_A1 Y1_R_A1
B1 W_B1 Y1_B1
A1 coex ref: Y1_R_A1
ref: R_A1 ref: R_A1 Y1_B1
B1 ref: S_A1 ref: Y2_R_A1
ref: A1 ref: T_A1 Y2_B1
A.18 Chapitre 18 - Conception logique dune base de donnes relationnelle 109

18.3 Traduire le schma conceptuel ci-dessous en structure de tables.

PROGRAMME
0-1 racine 1-1
CodeProg APPLICATION
NomProg NomApp
crit dans 1-1
id: CodeProg Service
id': dans.APPLICATION id: NomApp
0-N 1-1 dans 0-N
NomProg
LANGAGE
0-N
NomLang responsable
Version de
id: NomLang chef subordonn
1-1 0-N 0-1

de MODULE
PROGRAMMEUR
0-N NomMod
appelle Type[0-1] 0-N crit par Matricule
0-N
vers Nom
id: de.PROGRAMME
0-N id: Matricule
NomMod

Solution

LANGAGE PROGRAMME
NomLang CodeProg APPLICATION
Version NomProg
NomApp
id: NomLang NomApp
Racine
NomLang
Service
id: CodeProg
id: NomApp
id': NomApp
id': Racine
APPELLE NomProg
ref
De_CodeProg ref: NomApp
De_NomMod ref: NomLang
ECRIT_PAR
Vers_CodeProg
CodeProg PROGRAMMEUR
Vers_NomMod MODULE
NomMod Matricule
id: De_CodeProg CodeProg Matricule Nom
De_NomMod NomMod
id: CodeProg Chef[0-1]
Vers_CodeProg Type[0-1]
Vers_NomMod NomMod id: Matricule
id: CodeProg ref: Chef
ref: Vers_CodeProg Matricule
NomMod ref: Matricule
Vers_NomMod
ref: CodeProg ref: CodeProg
ref: De_CodeProg
De_NomMod NomMod

18.4 Traduire le schma conceptuel ci-dessous en structure de tables.


J-L Hainaut - 2009
110 Annexe A Exercices et solutions

TIERS
IdTiers
Nom
Adresse
Rue
Localit
Tlphone[0-5]
id: IdTiers

P
CLIENT
IdClient FOURNISSEUR
Compte Contact
id: IdClient
0-N 0-N
0-N
dtail livre
passe
Quantit
1-1 0-N
1-20 0-N
COMMANDE PRODUIT
NumCommande Rfrence
DateCommande Description[0-1]
id: passe.CLIENT PrixUnitaire
NumCommande id: Rfrence

18.5 Transformer le schma ci-dessous en structures relationnelles selon


lapproche standard (matrialisation). Produire ensuite, en utilisant les
transformations par hritage descendant et hritage descendant, un schma ne
comportant quune seule table (TIERS), un schma ne comportant que deux
tables (CLIENT et FOURNISSEUR) puis un schma constitu de la
reprsentation exclusive des sous-types. Comparer ces schmas.

TIERS
Numro
Nom
Adresse
id: Numro

CLIENT FOURNISSEUR
Date enreg Contact
Chiffres de vente

PRIVE ENTREPRISE
Historique NumTVA
Raison sociale
id: NumTVA
A.18 Chapitre 18 - Conception logique dune base de donnes relationnelle 111

Solution
1. Approche standard (matrialisation) :
TIERS
Numro
Nom
Adresse
FOURNISSEUR[0-1]
CLIENT[0-1]
id: Numro
acc
exact-1: CLIENT
CLIENT FOURNISSEUR
FOURNISSEUR
Numro Numro
Date enreg Contact
Chiffres de vente ENTREPRISE id: Numro
PRIVE[0-1] NumTVA ref acc
ENTREPRISE[0-1] Numro
PRIVE id: Numro Raison sociale
Numro ref acc id: NumTVA
Historique excl: PRIVE acc
id: Numro ENTREPRISE id': Numro
ref acc ref acc

2. Reprsentation 1 tables (gauche) et 2 tables (droite) :


TIERS CLIENT FOURNISSEUR
Numro Numro Numro
Nom Nom Nom
Adresse Adresse Adresse
FOU_Contact[0-1] Date enreg Contact
CLI_Date_enreg[0-1] Chiffres_vente id: Numro
CLI_Chiffres_vente[0-1] PRI_Historique[0-1]
PRI_Historique[0-1] ENT_NumTVA[0-1]
ENT_NumTVA[0-1] ENT_Raison_sociale[0-1]
ENT_Raison_sociale[0-1] id: Numro
id: Numro id': ENT_NumTVA
id': ENT_NumTVA coex: ENT_NumTVA
coex: ENT_NumTVA ENT_Raison_sociale
ENT_Raison_sociale excl: ENT_NumTVA
coex: CLI_Date_enreg PRI_Historique
CLI_Chiffres_vente
excl: PRI_Historique
ENT_NumTVA
exact-1: FOU_Contact
CLI_Date_enreg
if: PRI_Historique
CLI_Date_enreg
if: ENT_NumTVA
CLI_Date_enreg
J-L Hainaut - 2009
112 Annexe A Exercices et solutions

3. Reprsentation exclusive des sous-types :


TIERS_CLIENT_PRIVE TIERS_CLIENT_ENTREPRISE TIERS_CLIENT_AUTRES TIERS_FOURNISSEUR
Numro Numro Numro Numro
Nom Nom Nom Nom
Adresse Adresse Adresse Adresse
Date enreg Date enreg Date enreg Contact
Chiffres de vente Chiffres de vente Chiffres de vente id: Numro
Historique NumTVA id: Numro
id: Numro Raison sociale
id: Numro
id': NumTVA

Lexpression des contraintes dintgrit additionnelles dans ces schmas est


laisse linitiative du lecteur.

18.6 Transformer le schma suivant en schma relationnel.


Note : ce problme, en apparence banal, est plus complexe quil ny parat. Il
illustre la difficult de construire un plan de transformation qui fonctionne
dans tous les cas.

VEHICULE
Num-Vhicule
Marque 0-N sur 1-1
Modle
id: Num-Vhicule INTERVENTION
Date-dbut
0-N Date-fin
id: sur.VEHICULE
Date-dbut
affecte

1-1
REPARATION
INCIDENT
Num-Incident
0-1 objet 0-N
Date-incident
id: Num-Incident

INCIDENT.objet.REPARATION.sur.VEHICULE INCIDENT.affecte.VEHICULE

Solution
Lapplication stricte des rgles de la conception logique relationnelle conduit
au schma suivant. La contrainte dgalit des vhicules se traduit par une
contrainte dgalit des colonnes Num_Vehicule et Obj_Num_vehicule de la
table INCIDENT.
A.18 Chapitre 18 - Conception logique dune base de donnes relationnelle 113

VEHICULE
Num_Vehicule INTERVENTION
Marque Num_Vehicule
Modele Date_debut
id: Num_Vehicule Date_fin
id: Num_Vehicule
Date_debut
INCIDENT ref: Num_Vehicule
Num_Incident
Date_incident
REPARATION
Num_Vehicule
Obj_Num_Vehicule[0-1] Num_Vehicule
Obj_Date_debut[0-1] Date_debut
id: Num_Incident id: Num_Vehicule
ref: Num_Vehicule Date_debut
ref: Obj_Num_Vehicule ref
Obj_Date_debut
coex

INCIDENT.Num_vehicule = INCIDENT.Obj_Num_vehicule

Lutilisation dune seule colonne permet de supprimer cette dernire


contrainte. On obtient alors le schma simplifi ci-dessous.

VEHICULE
Num_Vehicule INTERVENTION
Marque Num_Vehicule
Modele Date_debut
id: Num_Vehicule Date_fin
id: Num_Vehicule
Date_debut
ref: Num_Vehicule
INCIDENT
Num_Incident
Date_incident REPARATION
Num_Vehicule Num_Vehicule
Date_debut[0-1] Date_debut
id: Num_Incident id: Num_Vehicule
ref: Num_Vehicule Date_debut
ref: Num_Vehicule ref
Date_debut
coex

Ce schma pose deux problmes :


- la contrainte de coexistence est invalide, un de ses composants tant
obligatoire;
- une cl trangre est semi-facultative, constitue dun composant
J-L Hainaut - 2009

obligatoire et dun composant facultatif; cette construction est invalide


dans le modle relationnel de base tel que nous lavons dfini.
On rsout le premier problme par la suppression de la contrainte de
coexistence. Le second problme est plus complexe traiter.
114 Annexe A Exercices et solutions

Dans un premier temps, on identifie une classe spcifique dincidents : les


incidents rpars, dont la particularit est dtre dot dun attribut Date_debut
obligatoire. Cest la table INCIDENT_REPARE de cette dernire classe qui
rfrence REPARATION, via une cl trangre constitue de lattribut hrit
Num-Vehicule et de lattribut propre Date_debut.

VEHICULE
Num_Vehicule INTERVENTION
Marque Num_Vehicule
Modele Date_debut
id: Num_Vehicule Date_fin
id: Num_Vehicule
Date_debut
INCIDENT ref: Num_Vehicule
Num_Incident
Date_incident REPARATION
Num_Vehicule
Num_Vehicule
id: Num_Incident
Date_debut
ref: Num_Vehicule
id: Num_Vehicule
Date_debut
ref

INCIDENT_REPARE
Date_debut
ref: INCIDENT.Num_Vehicule
Date_debut

Il nous reste transformer la relation is-a. Nous la transformons dabord en


type dassociations 1:1. Malheureusement, ce dernier ne peut son tour tre
traduit sous la forme d'une cl trangre de manire classique11 : l'identifiant
de INCIDENT_REPARE comporte un composant hrit qui ne lui appartient
pas en propre. Il faudrait ds alors ajouter cette table une colonne qui serait
une copie de INCIDENT.Num_Vhicule et qui serait assortie d'une contrainte
de redondance. On obtiendrait ainsi le schma ci-aprs.

Il n'est pas certain que ce schma soit plus clair que le premier, obtenu par la
mthode classique. Tous deux contiennent une redondance et une contrainte
qui exprime celle-ci. Dans la dernire solution, le schma comporte une table
supplmentaire (ce qui n'est pas un dfaut en soi), une colonne hrite et une
contrainte de redondance.

Conclusion : rien n'est parfait en ce bas monde.

11. En SQL2 du moins. En SQL3, le schma peut tre conserv tel quel.
A.18 Chapitre 18 - Conception logique dune base de donnes relationnelle 115

VEHICULE
Num_Vehicule INTERVENTION
Marque Num_Vehicule
Modele Date_debut
id: Num_Vehicule Date_fin
id: Num_Vehicule
Date_debut
INCIDENT ref: Num_Vehicule
Num_Incident
Date_incident
REPARATION
Num_Vehicule
Num_Vehicule
id: Num_Incident Date_debut
ref: Num_Vehicule
id: Num_Vehicule
Date_debut
INCIDENT_REPARE ref
Num_Incident
Num_Vehicule
Date_debut
id: Num_Incident
ref
ref: Num_Vehicule
Date_debut

ir INCIDENT_REPARE, i INCIDENT,
ir.Num_Incident = i.Num_Incident ir.Num_vehicule = i.Num_vehicule

18.7 Transformer le schma suivant en schma relationnel.


ENTREPRISE
NumE
Appellation
Contact[1-5]
Rang
Adresse
Rue
Localit
Tlphone[0-5] MARCHE
id: NumE Nom BIEN
id(Contact): Taille Code
Rang id: Nom Cat[0-1]
Groupe
0-N
0-N Source[0-1]
de id: Code
fabrique
1-1
primaire Part D
0-N UNITE id: UNITE
CodeUnit 0-N PRODUIT 0-N
Nom PRODUIT SERVICE
J-L Hainaut - 2009

support
Type Libelle Nom
id: de.ENTREPRISE Nature
CodeUnit substitut
secondaire 0-1
0-1
0-N
remplace
116 Annexe A Exercices et solutions

Solution
CONTACT TLPHONE
ENTREPRISE NumE NumE
Rang Rang
NumE
GRE_Rue Tlphone
Appellation
GRE_Localit id: NumE
id: NumE BIEN
id: NumE Rang
Rang Tlphone Code
equ: NumE ref: NumE Cat[0-1]
Rang Groupe
MARCHE FABRIQUE Source[0-1]
SUPPORT Nom SERVICE [0-1]
Code
Pri_NumE Taille PRODUIT[0-1]
NumE
Pri_CodeUnit id: Nom id: Code
CodeUnit
NumE excl: SERVICE
Part
CodeUnit PRODUIT
UNITE Nom PRODUIT
id: NumE
NumE id: NumE Code
CodeUnit
CodeUnit CodeUnit Substitut[0-1] SERVICE
Pri_NumE
Nom Code Libelle Code
Pri_CodeUnit
Type ref: Nom id: Code Nom
ref: NumE
ref: NumE Nature
CodeUnit id: NumE ref
CodeUnit
ref: Pri_NumE CodeUnit id': Substitut id: Code
ref: Code ref ref
Pri_CodeUnit ref: NumE

Il semble que le concepteur ait oubli de traiter une construction non conforme
SQL2. Achever le travail.

18.8 Transformer le schma suivant en schma relationnel.

MONNAIE INSTRUMENT-COTATION PERIODE


Id-Monnaie Id-Instrument Id-priode
0-N cote-par 0-N 0-N pour 0-N
Donnes Donnes Donnes
id: Id-Monnaie id: Id-Instrument id: Id-priode

0-N

cotation
0-N 0-N
Valeur

cotation[MONNAIE, INSTRUMENT-COTATION] cote-par


cotation[INSTRUMENT-COTATION, PERIODE] pour
A.18 Chapitre 18 - Conception logique dune base de donnes relationnelle 117

Solution
On transforme dabord les types dassociations cote-par et pour en types
dentits.

MONNAIE INSTRUMENT-COTATION PERIODE


Id-Monnaie Id-Instrument Id-priode
Donnes Donnes Donnes
id: Id-Monnaie 0-N 0-N id: Id-Instrument 0-N 0-N id: Id-priode

a b c d
0-N
1-1 1-1 1-1 1-1

COTEE-PAR POUR
id: b.INSTRUMENT-COTATION id: d.PERIODE
a.MONNAIE c.INSTRUMENT-COTATION

cotation
0-N 0-N
Valeur

cotation[MONNAIE, INSTRUMENT-COTATION] a*b[MONNAIE, INSTRUMENT-COTATION]


cotation[INSTRUMENT-COTATION, PERIODE] c*d[INSTRUMENT-COTATION, PERIODE]

Le type dentits COTEE-PAR reprsentant les associations cote-par (et de


mme pour POUR), on peut restructurer ce schma comme ci-dessous. La
contrainte exprime le fait que, pour une instance de cotation, les deux
instances de INSTRUMENT-COTATION accessibles via COTEE-PAR et POUR
sont identiques.

MONNAIE INSTRUMENT-COTATION PERIODE


Id-Monnaie Id-Instrument Id-priode
Donnes Donnes Donnes
id: Id-Monnaie 0-N 0-N id: Id-Instrument 0-N 0-N id: Id-priode

a b c d

1-1 1-1 1-1 1-1

COTEE-PAR POUR
id: b.INSTRUMENT-COTATION id: d.PERIODE
a.MONNAIE c.INSTRUMENT-COTATION

cotation
0-N 0-N
Valeur

(cp,p) cotation[COTEE-PAR, POUR],


COTEE-PAR=cp)[INSTRUMENT-COTATION] = c(POUR=p)[INSTRUMENT-COTATION]
J-L Hainaut - 2009

La traduction sachve par la transformation du type dassociations cotation.


La contrainte sexprime par lgalit des valeurs de deux colonnes.
118 Annexe A Exercices et solutions

MONNAIE INSTRUMENT_COTATION PERIODE


Id_Monnaie Id_Instrument Id_periode
Donnees Donnees Donnees
id: Id_Monnaie id: Id_Instrument id: Id_periode

COTEE_PAR POUR
COTATION
Id_Instrument Id_Instrument
PO_Id_periode Id_periode
Id_Monnaie PO_Id_Instrument
id: Id_Instrument id: Id_periode
CP_Id_Instrument
Id_Monnaie Id_Instrument
CP_Id_Monnaie
ref: Id_Monnaie ref: Id_periode
Valeur
ref: Id_Instrument ref: Id_Instrument
id: CP_Id_Instrument
CP_Id_Monnaie
PO_Id_periode
PO_Id_Instrument
ref: CP_Id_Instrument
CP_Id_Monnaie
ref: PO_Id_periode
PO_Id_Instrument

c COTATION, c.CP_Id_Instrument = c.PO_Id_Instrument

En rduisant ces deux colonnes en une seule, on obtient le schma final.

MONNAIE INSTRUMENT_COTATION PERIODE


Id_Monnaie Id_Instrument Id_periode
Donnees Donnees Donnees
id: Id_Monnaie id: Id_Instrument id: Id_periode
COTEE_PAR POUR
Id_Instrument Id_Instrument
COTATION
Id_Monnaie Id_periode
PO_Id_periode
id: Id_Instrument id: Id_periode
CP_Id_Instrument
Id_Monnaie Id_Instrument
CP_Id_Monnaie
ref: Id_Monnaie ref: Id_periode
Valeur
ref: Id_Instrument ref: Id_Instrument
id: CP_Id_Instrument
CP_Id_Monnaie
PO_Id_periode
ref: CP_Id_Instrument
CP_Id_Monnaie
ref: PO_Id_periode
CP_Id_Instrument

18.9 Transformez le schma ci-dessous en un schma de tables.

VOITURE ETUDIANT

0-N utilise 0-N

VELO PERSONNEL
A.18 Chapitre 18 - Conception logique dune base de donnes relationnelle 119

Solution
La technique par multiplication propose la section 18.5.2 permet de
remplacer un premier rle multi-types :

VOITURE 0-N Eutilise 0-N ETUDIANT

VELO 0-N Putilise 0-N PERSONNEL

On fait apparatre deux nouveaux rles multi-types, quon transforme


successivement pour obtenir le schma suivant :

0-N EutiliseV 0-N


VOITURE ETUDIANT
0-N EutiliseL 0-N

0-N PutiliseV 0-N


VELO PERSONNEL
0-N PutiliseL 0-N

Sa traduction dans le modle SQL2 ne pose pas de problme, mais le rsultat


est relativement complexe12 (4 tables, 4 identifiants et 8 cls trangres).
Selon la seconde technique de cette mme section, on transforme dabord le
type dassociations en type dentits :

VOITURE ETUDIANT
vv ep
0-N 0-N
VELO PERSONNEL
de par

1-1 1-1

UTILISATION
id: par.ep
de.vv

Puis on traite chaque rle multi-types :


J-L Hainaut - 2009

12. Juste pour se faire peur, on pourrait imaginer un type dassociations n-aire dont tous les rles
sont multi-types !
120 Annexe A Exercices et solutions

VOITURE 0-N 0-N ETUDIANT

VELO deV parE PERSONNEL

0-N 0-1 0-1 0-N

deL UTILISATION parP


id': parE.ETUDIANT
0-1 deV.VOITURE 0-1
id': parP.PERSONNEL
deV.VOITURE
id': parE.ETUDIANT
deL.VELO
id': parP.PERSONNEL
deL.VELO
exact-1: deL.VELO
deV.VOITURE
exact-1: parP.PERSONNEL
parE.ETUDIANT

On observe lintervention de rles multi-types dans la multiplication des


identifiants du type dentits associations UTILISATION.
Face la complexit des ces deux approches, on peut explorer une autre voie,
qui part de lobservation de traits communs VELO et VOITURE dune part, et
ETUDIANT et PERSONNEL. Le premier groupe est constitu de vhicules et
le second de personnes. On pourrait donc redessiner ce schma laide de
relations is-a :

0-N utilise 0-N

VEHICULE PERSONNE

P P

VOITURE VELO ETUDIANT PERSONNEL

La suite des transformations est standard. Lapplicabilit de cette troisime


solution dpend de lexistence dautres relations is-a impliquant les types
dentits de ce fragment de schma.

18.10 Un dveloppeur propose la traduction suivante lors de la production dun


schma relationnel. sa proposition est-ele correcte ?
A.18 Chapitre 18 - Conception logique dune base de donnes relationnelle 121

AGENCE AGENCE
NumA TERRAIN NumA IMMEUBLE
NumA id: NumA NumA
0-N 0-N
NumT NumI
offreT offreI id: NumA TRANSACTION id: NumA
NumT NumAT NumI
1-1 1-1 ref: NumA NumT[0-1] ref: NumA
NumI[0-1]


TERRAIN IMMEUBLE ref: NumAT
NumT NumI NumT
id: offreT.AGENCE id: offreI.AGENCE ref: NumAT
NumT NumI NumI
exact-1: NumI
0-N 0-N NumT

deT deI

0-1 0-1

TRANSACTION
exact-1: deI.IMMEUBLE
deT.TERRAIN

18.11 Dvelopper un plan de transformation pour les diagrammes de classes UML.

18.12 Complter le plan de transformation de la figure 18.30 de sorte quil traite les
rles multi-types.

18.13 Construisez un script DB-MAIN qui traduit le plan de transformation de la


question 18.12 . Ce script est-il idempotent ?
J-L Hainaut - 2009
122 Annexe A Exercices et solutions

A.19 CHAPITRE 19 - CONCEPTION PHYSIQUE DUNE BASE DE


DONNES RELATIONNELLE

19.1 Complter le schma logique de la figure 18.34 en y ajoutant les index induits
par les structures logiques.

Solution

AUTEUR
MOTCLE_DE_DOC DOCUMENT ECRIT ID_Auteur
ID_Doc ID_Auteur Nom
ID_Doc
MotCle Titre ID_Doc Prenom[0-1]
Date_Public id: ID_Auteur
id: ID_Doc id: ID_Doc
RAPPORT[0-1] acc
MotCle ID_Auteur
acc OUVRAGE[0-1] acc
id: ID_Doc EMPRUNTEUR
ref: ID_Doc ref: ID_Doc
acc equ: ID_Auteur NumPers
excl: RAPPORT acc Nom
OUVRAGE Adr_Rue
RESERVATION Adr_Ville
RAPPORT OUVRAGE Responsable[0-1]
NumPers
ID_Doc CodeProjet[0-1]
ID_Doc ID_Doc
Code_Rapport ISBN id: NumPers
DateReservation
Projet Editeur acc
id: ID_Doc
id: ID_Doc ref: Responsable
id: ID_Doc NumPers
ref acc acc
ref acc acc
id': Code_Rapport ref: CodeProjet
id': ISBN ref: ID_Doc
acc acc
acc ref: NumPers
acc
TELE_D_EMP
EXEMPLAIRE
NumPers
ID_Doc EMPRUNT
Telephone
Numero_serie ID_Doc
id: NumPers
Date_Acq Numero_serie
Telephone
Loc_Travee Date_Emprunt
acc
Loc_Rayon CodeProjet
equ: NumPers
Loc_Etage NumEmprunteur
id: ID_Doc Date_Retour[0-1]
PROJET
Numero_serie id: ID_Doc
CodeProjet
acc Numero_serie
Titre
ref: ID_Doc Date_Emprunt
Societe
acc
id: CodeProjet
ref: NumEmprunteur
acc
acc
ref: CodeProjet
CONTRAT
acc
ref: ID_Doc Num_Contrat
Numero_serie CodeProjet
id: Num_Contrat
acc
id': CodeProjet
ref acc
A.19 Chapitre 19 - Conception physique dune base de donnes relationnelle 123

19.2 Une table LIVRAISON reprsentant les livraisons darticles dans une socit
de distribution. Elle dispose dun identifiant compos des colonnes (DATE,
REF_CLI). La table comprend actuellement 4 000 000 lignes dune longueur
fixe de 400 octets. Il y a en moyenne 1 000 livraisons par jour. Les colonnes
de lidentifiant ont des longueurs respectives de 12 et 28 caractres. La table
est stocke dans un espace qui lui est rserv, implant sur un disque du
modle de rfrence, dcompos en pages de 4 Ko. On retient les deux
requtes typiques, d et c tant des constantes quelconques :
select * from LIVRAISON where DATE = d and REF_CLI = c
select * from LIVRAISON where DATE = d
Proposer un jeu dindex favorisant ces deux requtes. Pour chaque index,
proposer une technique dimplmentation. Calculer lespace occup par la
table et ses index. Calculer le temps moyen dexcution de ces deux requtes.

Solution
Les requtes suggrent deux index, lun, I1, sur DATE + REF_CLI et le second,
I2, sur DATE. Les paramtres sont Nr = 4 000 000, Lp = 4 096, Lr = 400. Pour
lindex I1 et Lk1 = 12 + 28 = 40. Pour lindex I2, Nrpv = 1.000, Nv = Nr/Nrpv =
4 000 et Lk2 = 12.
I2 est compos dun prfixe de I1. On peut lignorer si I1 est implment par
un index tri : index primaire en squentiel index ou index secondaire avec
dictionnaire en squentiel index. On choisi la seconde technique pour I1 et
on carte I2.
Par prcaution, on vrifie que lutilisation de lindex lors de laccs selon
DATE est utile. On utilise la feuille de calcul "Scan ou index", qui indique que
laccs squentiel cote 92 s et laccs par index 12,3 s (hors cot index).
Volume de la table. Avec un taux de remplissage typique de 0,8, on obtient
Nrpp = 8 et Np = 500 000 pages.
Calcul de lindex secondaire identifiant. Le dictionnaire de valeurs contient
4 000 000 entres. Il correspond un fichier squentiel index dont Nr =
4 000 000, Lr = 12 + 28 + 4 = 44, Lk = 12 + 28 = 40, = 0,8 et Lp = 4 096. La
feuille de calcul "ISAM" nous fournit les rsultats suivants : Npb = 53 764, Npi
= 734, n = 3. Les niveaux dindex occupent respectivement 1, 10 et 723 pages.
Taille de la table. Table + index occupent 500 000 + 53 764 + 734 = 554 498
pages.
Temps daccs par I1. Avec un tampon de 1 + 10 + 1 = 12 pages, on compte 2
+ 1 = 3 accs alatoires, soit 36,9 ms. Avec un tampon de 1 + 10 + 723 + 1 =
735 pages, il faut 2 accs alatoires, soit 24,6 ms.
J-L Hainaut - 2009

Temps daccs par I2. On suppose que la table est en vrac. Sachant que Nrpp
= 74,4 pour le dictionnaire (toujours selon ISAM), les Nc = 1 000 entres de
mme valeur de DATE occupent 1 000 / 74,4 = 14 pages conscutives du
dictionnaire, pour un cot (ngligeable) de 14 x 0,184 = 2,6 ms. Viennent
124 Annexe A Exercices et solutions

sajouter les accs alatoires 1 000 pages de la table, soit 12,3 s. Total : 12,3
secondes.
Temps daccs par I2. On suppose prsent que lindex I1 est du type
clustering. Les lignes de mme valeur de DATE sont conscutives dans les
pages de la table. Elles occupent 1 000 / 8 = 125 pages conscutives. Le cot
daccs est de 125 x 0,184 = 23 ms. Le cot total, index + pages de base, est de
2,6 + 23 = 25,6 ms, soit, thoriquement, 12,3 / 0,023 = 535 fois plus rapide.
A.20 Chapitre 20 - Production du code dune base de donnes 125

A.20 CHAPITRE 20 - PRODUCTION DU CODE DUNE BASE DE


DONNES

20.1 Traduire le schma conceptuel correspondant lexercice 12.4 en structure de


tables. Ecrire le dclencheur SQL qui vrifie la contrainte sur le nombre
maximum de participants chaque session en recherchant les anomalies.
Ecrire une requte SQL qui rassemble les donnes inclure dans les factures
du mois.

20.2 Traduire en SQL chacun des trois schmas qui clturent la section 3.8.5.

Solution
On ignore les tables R1 et R2, communes aux trois schmas. Les tables sont
renommes I (pour inscription) et A (pour attribution).
La peste (3FN). Un dclencheur vrifie quen cas dinsertion et de
modification, il nexiste pas dans la table I de valeur de PROF qui serait
associe une autre valeur de MAT que celle qui est prsente dans la ligne
insrer.
create table I(ETUD char(20) not null,
MAT char(20) not null,
PROF char(20 not null,
primary key (ETUD, MAT));
create trigger C_DF_PROF_MAT
before insert or update on I
declare N number
for each row
begin
select count(*) into :N from I
where PROF = new.PROF and MAT <> new.MAT;
if N > 0 then abort(); end if;
end;

Le cholra (FNBC). Le travail du dclencheur est ici plus complexe. Il


recherche les inscriptions existantes de ltudiant (jointure de I et A) pour la
mme matire que celle du professeur de linscription courante. Il ne doit pas
en exister. On veillera galement contrler les autres oprations de mise
jour des donnes.
create table A(PROF char(20) not null primary key,
MAT char(20 not null);
create table I(ETUD char(20) not null,
PROF char(20 not null,
primary key (ETUD, PROF),
J-L Hainaut - 2009

foreign key (PROF) references R3);


create trigger C_DF_ETUD_MAT_PROF
begin
before insert or update on I
126 Annexe A Exercices et solutions

declare N number
for each row
select count(*) into N: from I, A
where I.ETUD = new.ETUD and I.PROF = A.PROF
and MAT in (select MAT from A
where PROF = new.PROF);
if N > 0 then abort(); end if;
end;

La peste et le cholra (FNCE). Le codage est trs simple et ne ncessite pas


de dclencheur.
create table A(PROF char(20) not null,
MAT char(20 not null,
primary key (PROF, MAT),
unique (PROF);
create table I(ETUD char(20) not null,
MAT char(20) not null,
PROF char(20 not null,
primary key (ETUD, MAT),
foreign key (PROF, MAT) references A);

20.3 Le code suivant, rput avoir t gnr par latelier Rational Rose, a t
prsent il y a quelques annes dans un ouvrage sur UML comme la
traduction dune structure forme des classes A, B et C, cette dernire hritant
de A et de B. Que penser de cette traduction ?
create table A(A_Id number(5), primary key (A_Id));
create table B(B_Id number(5), primary key (B_Id));
create table C(A_Id number(5) references A, B_Id number(5)
references B, primary key (A_Id, B_Id));

Solution
Ce code comporte plusieurs erreurs graves. Dune part, tous les composants
dun identifiant primaire doivent tre obligatoires. Dautre par, chacune des
cls trangre de C est en elle-mme un identifiant. Code corrig :
create table A(A_Id number(5) not null,
primary key (A_Id));
create table B(B_Id number(5) not null,
primary key (B_Id));
create table C(A_Id number(5) not null references A,
B_Id number(5) not null references B,
primary key (A_Id),
unique (B_Id));
Dautre part, si on admet que A et B hritent dune super-classe commune
(AB), hypothse adopte dans le prsent ouvrage et justifie par le fait que A
et B partagent des instances communes, alors A.A_Id est une cl trangre vers
la table de AB, et de mme pour B. Dans ce cas, A_Id = B_Id dans C (voir
section 18.6.6), do le code minimal suivant :
A.20 Chapitre 20 - Production du code dune base de donnes 127

create table C(A_Id number(5) not null references A,


primary key (A_Id),
foreign key (A_Id) references B);
J-L Hainaut - 2009
128 Annexe A Exercices et solutions

Vous aimerez peut-être aussi