Академический Документы
Профессиональный Документы
Культура Документы
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