Vous êtes sur la page 1sur 6

IN306 : Corrige SID

Christophe Garion <garion@isae.fr> 12 octobre 2009


Ce document est un corrige succinct de lexamen du module IN306.
1 Gestion de parcelles de terres agricoles
Une commune souhaite faire linventaire des terres agricoles qui sont situees sur sa juridiction pour mieux
les gerer. On vous demande donc de creer une base de donnees permettant de stocker les informations sur
ces terres. Les informations dont vous disposez sont decrites ci-apr`es.
La zone agricole est constituee dun ensemble de parcelles enregistrees au cadastre. Chaque parcelle a
un numero et une surface connue. Elle poss`ede egalement un proprietaire, qui peut etre un particulier ou
un organisme.
Chaque proprietaire de parcelle est unique et a un nom et une adresse. On souhaite conserver lhistorique
des proprietaires pour une parcelle donnee. Pour un proprietaire donne, on souhaite egalement conserver
lhistorique de ses dierentes adresses (un proprietaire peut changer dadresse). Pour les organismes, on
souhaite egalement connatre leurs dates de creation et de disparition eventuelle.
Sur chaque parcelle, un type de culture (tournesol, ble, colza) est eectue sur des intervalles de temps
connus. Au cours du temps, il se peut ainsi quune parcelle accueille du ble, puis du colza par exemple.
Pour chaque type de culture, des activites agricoles doivent etre menees et pour chacune de ces activites
(defrichage, plantation etc.), on souhaite enregistrer le debut de pratique sur une parcelle.
1. proposer un diagramme entite-association pour la base de donnees des terres agricoles. On precisera
les cles des entites et associations et les multiplicites. On essayera de limiter les attributs des entites
et associations.
Un diagramme entite-association est propose sur la gure 1. Quelques remarques :
pas de probl`emes particuliers pour les entites Parcelle, Proprietaire et les associations les reliant.
jai considere que ladresse netait composee que du numero, du nom de la rue et de la ville. On
pouvait bien s ur compliquer cela.
Organisme est une entite faible : elle permet de representer le sous-typage existant entre Proprietaire
et Organisme (un organisme est un proprietaire particulier).
la plupart des associations avaient une multiplicite [1, n].
2. proposer un mod`ele relationnel du diagramme precedent. Preciser les cles primaires et etrang`eres des
relations. Indiquer informellement quelles contraintes supplementaires doivent apparatre.
On utilise lalgorithme vu en cours, en particulier pour les entites faibles. Ici, il etait impossible de
simplier les associations `a cause des multiplicites. On obtient alors les relations suivantes :
1
Parcelle (numero, surface)
Proprietaire (nom)
Adresse (numero, rue, ville)
Culture (type)
Activite (type)
Est pratiquee (type, numero, date debut)
Est associee (type c, type a)
Est cultivee (type, numero, date debut culture, date n culture)
Appartient a (numero, nom, date achat, date cession)
Localise (nom, numero, rue, ville, date arrivee, date depart)
Organisme (nom, date creation, date disparition)
Les contraintes de cles etrang`eres sont les suivantes :
Est pratiquee(type) reference Culture(type)
Est pratiquee(numero) reference Parcelle(numero)
Est associee(type c) reference Culture(type)
Est associee(type a) reference Activite(type)
Est cultivee(type) reference Culture(type)
Est cultivee(numero) reference Parcelle(numero)
Appartient a(numero) reference Parcelle(numero)
Appartient a(nom) reference Proprietaire(nom)
Localise(nom) reference Proprietaire(nom)
Localise(numero, rue, ville) reference Adresse(numero, rueville)
Organisme(nom) reference Proprietaire(nom)
La contrainte principale que lon doit exprimer est le fait que les activites pratiquees sur une parcelle
doivent bien correspondre `a des cultures eectuees sur la parcelle.
2 Une base de donnees de buveurs de bi`ere
Cet exercice est inspire dun examen ecrit par S. Abiteboul pour le module de bases de donnees de
lENS Cachan et de lENS ULM.
On consid`ere une base de donnees de buveurs de bi`ere constituee de trois relations :
Frequente (buveur, bar)
Sert (bar, biere)
Aime (buveur, biere)
Frequente indique quels sont les bars frequentes par un buveur de bi`ere particulier, Sert indique quelles
bi`eres sont servies dans quels bars et Aime indique quelles bi`eres sont appreciees par quel buveur.
2
On consid`ere les requetes suivantes :
1. quelle est la liste des bars qui servent une bi`ere que Martin aime ?
2. quelle est la liste des buveurs qui frequentent au moins un bar qui sert une bi`ere quils aiment ?
3. quelle est la liste des buveurs qui frequentent tous les bars qui servent uniquement de la bi`ere quils
aiment (on suppose que chaque buveur aime au moins une bi`ere et frequente au moins un bar) ?
4. quelle est la liste des buveurs qui ne frequentent aucun bar qui sert une bi`ere quils aiment ?
Representer en alg`ebre relationnelle les requetes 1 et 2 et en SQL les requetes 1 `a 4.
On pourra remarquer que lon pouvait utiliser des jointures naturelles, car les attributs avaient les
memes noms dans les dierentes relations.
Voici la requete 1 exprimee en alg`ebre relationnelle :

bar
(
buveur=Martin
(Sert 1 Aime))
Voici la requete 2 exprimee en alg`ebre relationnelle :

buveur
(Sert 1 Aime 1 Frequente)
Lutilisation simple de la jointure naturelle permettait de repondre `a la question : Aime 1 Buveur
permet en eet de de creer une relation liant buveur, bi`ere quil aime et bars frequentes. La jointure de
cette relation avec Sert permet ensuite de garder les bars servant les bi`eres que le buveur aime.
Voici la requete 1 exprimee en SQL :
SELECT DISTINCT bar
FROM Sert NATURAL JOIN Aime
WHERE buveur = Martin;
Rien de bien particulier, jai utilise DISTINCT pour pouvoir eviter davoir une repetition des noms de
bars.
Voici la requete 2 exprimee en SQL :
SELECT DISTINCT buveur
FROM (Sert NATURAL JOIN Aime) NATURAL JOIN Frequente;
L`a encore, rien de bien particulier, jai utilise la requete en alg`ebre relationnelle. Comme precedemment,
lutilisation de DISTINCT permettait deviter des doublons.
Pour la requete 3, je vais la detailler pas `a pas. Jai choisi ici de nutiliser que des operateurs avec
une correspondance directe en alg`ebre relationnelle, mais on pouvait egalement trouver des solutions en
utilisant des operateurs SQL comme EXISTS etc.
Tout dabord, la requete
SELECT DISTINCT buveur, bar, biere FROM Aime NATURAL JOIN Sert;
permet de trouver les triplets (buveur, bar, biere) tel que le bar sert une bi`ere que le buveur aime. Pour
des raisons de lisibilite, je cree une vue (une relation virtuelle) avec cette requete :
CREATE VIEW Shouldgo AS
SELECT DISTINCT buveur, bar, biere FROM Aime NATURAL JOIN Sert;
3
Les tuples contenus dans cette vue permettent donc de trouver les bars quun buveur devrait frequenter
pour boire les bi`eres quil aime. Dans la suite, je presenterai directement les requetes avec les creations de
vue associees pour aller plus vite.
La requete representee par la vue Otherbeers permet de trouver pour chaque buveur les bars quil
devrait frequenter (car ils servent au moins une bi`ere quil aime) mais qui servent une bi`ere quil naime
pas (car la question nous demande davoir exclusivement des bi`eres aimees par le buveur) :
CREATE VIEW Otherbeers AS
SELECT DISTINCT
*
FROM
(SELECT DISTINCT buveur, bar, Sert.biere FROM Sert JOIN Shouldgo USING (bar)
EXCEPT
SELECT
*
From Shouldgo
) AS R;
La requete representee par la vue Shouldreallygo permet de trouver pour chaque buveur les bars qui
ne servent que des bi`eres quil aime :
CREATE VIEW Shouldreallygo AS
SELECT
*
FROM (
SELECT buveur,bar FROM Shouldgo
EXCEPT
SELECT buveur,bar FROM Otherbeers
) AS R;
La requete representee par la vue Gotobaritshouldnot permet de trouver les buveurs qui frequentent
un bar qui ne respecte pas le crit`ere represente par Shouldreallygo.
CREATE VIEW Gotobaritshouldnot AS
SELECT
*
FROM
(SELECT
*
FROM Frequente
EXCEPT
SELECT
*
FROM Shouldreallygo
) AS R;
Enn, la requete nale est representee par (il sagit dune simple dierence) :
SELECT
*
FROM
(SELECT buveur FROM Frequente
EXCEPT
SELECT buveur from Gotobaritshouldnot
) AS R;
Voici la requete 4 exprimee en SQL :
SELECT
*
FROM (
SELECT buveur FROM Frequente
EXCEPT
SELECT DISTINCT buveur FROM (Sert NATURAL JOIN Aime) NATURAL JOIN Frequente
) AS R1;
Rien de bien complique, il susait dutiliser la requete 2.
4
3 Conception de schemas relationnels et normalisation
On consid`ere une relation R(A, B, C, D, E) soumise `a lensemble de dependances fonctionnelles S =
{ABC DE, D AB, E AB}.
1. quelles sont les cles de ce schema ?
On trouve facilement les cles suivantes :
{A, B, C}
{C, D}
{C, E}
2. le schema est-il sous forme BCNF? Si non, donnez en une decomposition BCNF.
On pouvait tout dabord remarquer que le schema etait bien 2NF, car tous les attributs du schema
appartenaient `a une cle de la relation.
Pour que R soit sous forme BCNF, il faudrait que toutes les dependances elementaires A
1
. . . A
n
B
sur R soient telles que {A
1
, . . . , A
n
} soit une supercle de R. Or on a par exemple D A et {D}
nest pas une supercle de R. Donc la relation nest pas sous forme BCNF.
En appliquant lalgorithme vu en cours, on obtient comme relations : {A, D}, {B, E} et {C, D, E}.
Cette decomposition ne preserve absolument pas les dependances fonctionnelles initiales !
3. le schema est-il sous forme 3NF? Si non, donnez en une decomposition 3NF.
Le schema est bien sous forme 3NF, car tout attribut nappartenant pas `a une cle (il ny en a pas !)
ne depend pas dun attribut non cle. On peut bien s ur avoir un schema 3NF et pas BCNF.
5
P
a
r
c
e
l
l
e
n
u
m
e
r
o
s
u
r
f
a
c
e
A
p
p
a
r
t
i
e
n
t
`a
d
a
t
e
a
c
h
a
t
d
a
t
e
c
e
s
s
i
o
n
[
1
,
n
]
P
r
o
p
r
i
e
t
a
i
r
e
n
o
m
[
1
,
n
]
L
o
c
a
l
i
s
e
d
a
t
e
a
r
r
i
v
e
e
d
a
t
e
d
e
p
a
r
t
[
1
,
n
]
A
d
r
e
s
s
e
n
u
m
e
r
o
r
u
e
v
i
l
l
e
[
1
,
n
]
E
s
t
u
n
[
0
,
1
]
O
r
g
a
n
i
s
m
e
d
a
t
e
c
r
e
a
t
i
o
n
d
a
t
e
d
i
s
p
a
r
i
t
i
o
n
[
1
,
n
]
E
s
t
c
u
l
t
i
v
e
e
d
a
t
e
d
e
b
u
t
c
u
l
t
u
r
e
d
a
t
e

n
c
u
l
t
u
r
e
[
1
,
n
]
C
u
l
t
u
r
e
t
y
p
e
[
1
,
n
]
E
s
t
a
s
s
o
c
i
e
e
[
1
,
n
]
A
c
t
i
v
i
t
e
t
y
p
e
[
1
,
n
]
E
s
t
p
r
a
t
i
q
u
e
e
d
a
t
e
d
e
b
u
t
[
1
,
n
]
[
1
,
n
]
F
i
g
u
r
e
1
:
U
n
d
i
a
g
r
a
m
m
e
e
n
t
i
t
e
-
a
s
s
o
c
i
a
t
i
o
n
p
o
u
r
l
a
b
a
s
e
d
e
d
o
n
n
e
e
s
d
e
s
t
e
r
r
e
s
a
g
r
i
c
o
l
e
s
6