Annexe A A1
Exercices et solutions
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
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.
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
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]
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]
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]
Solution
Lidentifiant de la relation ACHAT3 est {CLI, PRO, MAG}. Celle-ci est donc
normalise.
Solution
Le graphe ADF comporte un circuit. Les identifiants de la relation ECRIT
sont {AUTEUR, OUVRAGE} et {OUVRAGE, RANG}. Celle-ci est normalise.
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
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.
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 :
0) Premire passe
1) La peste (3FN)
2) Le cholra (FNBC)
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.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.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
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
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
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
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
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.
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
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
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)
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
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
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
-- ________________
-- DBSpace Section
-- _______________
-- Table Section
-- _____________
-- Constraints Section
-- ___________________
-- 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) 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
b) noncs de type 2
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.9 Afficher les numros des clients qui commandent le produit de numro
'CS464'.
7.10 Afficher les localits des clients qui commandent le produit de numro
'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')
or LOCALITE = 'Namur'
qui soit sont de catgorie B1 ou C1, soit habitent Lille ou Namur (ou les
deux conditions).
qui soit sont de catgorie B1 ou C1, soit habitent Lille ou Namur (mais
pas les deux conditions).
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
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%')));
LOCALITE
====================
Lille
Poitiers
Toulouse
LOCALITE
====================
Lille
Poitiers
A.7 Chapitre 7 - Le langage SQL DML (1) 25
LOCALITE
====================
Bruxelles
Geneve
Lille
Namur
Paris
Poitiers
Toulouse
select *
from COMMANDE
where NCOM not in (select NCOM
from DETAIL
where NPRO <> 'PA60')
26 Annexe A Exercices et solutions
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
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 ?
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)));
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 :
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.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
a) noncs de type 2
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,
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 ...);
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);
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.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
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.
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.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);
d) noncs de type 5
select avg(NBRE)
from NOMBRE;
8.25 Quel est, pour chaque localit, le nombre moyen de commandes par client.
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.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
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.
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
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) :
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
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;
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
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.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
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
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
rs
A r B s C
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
Solution
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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.
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
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].
EDITEUR AUTEUR
NomEditeur NomAuteur
id: NomEditeur id: NomAuteur
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
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
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
Solution
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
issu-de
pre enfant
0-N 0-1
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
Solution
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.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
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
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.
rs
v-w x-y
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
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.
Solution
0-1 possde 0-N PERSONNE possde 0-N PROPRIETAIRE
VEHICULE
exact-1: possde.PERSONNE 1-1 P
possde.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
Solution
Si on admet que la capitale dun pays appartient ce dernier, alors il faut
imposer la contrainte capitale appartient.
ACCIDENT NAccident = ?
iV = 1,5
NumAcc
iV = 0,1 0-N implique 0-N DateAcc
Montant[0-1]
i = ?
id: NumAcc
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
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
0-N
DETAIL-FACT
Quantit
de 1-1 1-1 de
id: de.DETAIL-COM
de.FACTURE
Solution
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
id: ETUDIANT 0-N PROFESSEUR
MATIERE
MATIERE 0-N
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).
Solution
Il sagit dun exemple didentifiant cyclique (voir section 15.10.2).
Solution
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.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.
Solution
En considrant R de A vers B, on peut dfinir les quivalences suivantes9 :
surjection R[B] = B A r B
?-? 1-?
fonction R(A,B) A r B
?-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
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
16.1 Exprimer en OCL les contraintes manquantes dans les schmas 16.11 et
16.12.
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.
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
T P
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.
Solution
Lnonc indique que la structure des produits est un graphe hirarchique.
Nous proposons dabord un schma trs simple
acyclic
utilise
Quantit
PRODUIT
NumProduit
Libell
id: NumProduit
0-N T 0-N
COMPOSE COMPOSANT
acyclic
distribue livre
1-N utilise 1-N
P P
Quantit
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
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
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
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
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
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
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
Solution
Ce schma comporte quatre sous-structures non normalises.
96 Annexe A Exercices et solutions
POSITION PERSONNE
Position NumEmp
Dlgu Nom
id: Position Adresse
id: NumEmp
1-N
T
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
0-N OUVRAGE
source
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 :
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
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
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
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
?
A1 B1 A1
B1
T T
T
C D C D
C1 D1 C1 D1
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.
0-N
inscrit
0-N 0-N
Date-Inscr
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
MATIERE
ETUDIANT coex: inscrit.ETUDIANT [*] 0-1 donne 0-N PROF
donne.PROF
inscrit
0-N 0-N
Date-Inscr
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
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
FOURNISSEUR PIECE
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.
FOURNISSEUR PIECE
0-N
assigne
J-L Hainaut - 2009
COMMANDE 0-N
104 Annexe A Exercices et solutions
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
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
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
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
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
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
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
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
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
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
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 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.
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
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.
0-N
cotation
0-N 0-N
Valeur
Solution
On transforme dabord les types dassociations cote-par et pour en types
dentits.
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
a b c d
COTEE-PAR POUR
id: b.INSTRUMENT-COTATION id: d.PERIODE
a.MONNAIE c.INSTRUMENT-COTATION
cotation
0-N 0-N
Valeur
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
VOITURE ETUDIANT
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 ETUDIANT
vv ep
0-N 0-N
VELO PERSONNEL
de par
1-1 1-1
UTILISATION
id: par.ep
de.vv
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
VEHICULE PERSONNE
P P
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.12 Complter le plan de transformation de la figure 18.30 de sorte quil traite les
rles multi-types.
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
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;
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;
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