Vous êtes sur la page 1sur 9

Anne Universitaire 2010/2011

Session 2 de Printemps
PARCOURS : CSB4 & CSB6
UE : INF 159, Bases de donnes
preuve : INF 159 EX
Date : Lundi 20 juin 2011
Heure : 11 heures

DISVE
Licence

Documents : non autoriss


preuve de M. Alain Griffault

Dure :

1 heure 30

SUJET + CORRIGE
Avertissement





La plupart des questions sont indpendantes.


Le barme total est de 24 points car le sujet est assez long.
Le barme de chaque question est (approximativement) proportionnel sa dicult.
L'espace pour rpondre est susant (sauf si vous l'utilisez comme brouillon, ce qui est fortement dconseill).

Exercice 1 (Conception et SQL (14 points))


L'exercice porte sur une gestion simplie de livres d'une bibliothque.
Le concepteur de la base a conu un schma relationnel compos des cinq relations Tarifs, Adherents,
Oeuvres, Livres et Emprunts. La premire partie de l'exercice consiste comprendre et expliquer ce schma.
La seconde partie sera compose de requtes, et la troisime de variantes.
Les sources sont au format

PostGreSQL, et toutes les relations sont prxes par le nom du schma Bibliotheque,

que vous pouvez omettre dans vos rponses.

CREATE

SCHEMA B i b l i o t h e q u e ;

La bibliothque est constitue de livres. Chaque livre est en fait un des exemplaires d'une oeuvre. Les oeuvres
sont dcrites dans une relation BCNF.

CREATE TABLE

);

B i b l i o t h e q u e . Oeuvres (
T y p a g e d e s a t t r i b u t s
ISBN t e x t NOT NULL ,
T i t r e t e x t NOT NULL ,
E d i t e u r t e x t NOT NULL ,
A u t e u r t e x t NOT NULL , S e p a r e r
C l e f s c a n d i d a t e s
PRIMARY KEY ( ISBN )

les

auteurs

par

une

virgule

pour

la

l i s i b i l i t e

Pour pouvoir emprunter simultanment plusieurs livres, chaque adhrent doit dposer une caution dont le tarif
est dcrit dans une relation BCNF.

CREATE TABLE

);

Bibliotheque . Tarifs (
T y p a g e d e s a t t r i b u t s
N b E m p r u n t s A u t o r i s e s integer CHECK ( N b E m p r u n t s A u t o r i s e s >= 0 ) ,
C a u t i o n integer CHECK ( N b E m p r u n t s A u t o r i s e s >= 0 ) ,
C l e f s c a n d i d a t e s
PRIMARY KEY ( N b E m p r u n t s A u t o r i s e s )

Les adhrents la bibliothque sont enregistrs dans une relation.

1/ 9

INF 159 : Bases de donnes

Session 2, Anne 2010/2011

CREATE TABLE

);

Bibliotheque . Adherents (
T y p a g e d e s a t t r i b u t s
I d s e r i a l NOT NULL ,
s e r i a l = s e q u e n c e d ' e n t i e r 1 , 2 , 3 , . . .
Nom t e x t NOT NULL ,
Prenom t e x t NOT NULL ,
N b E m p r u n t s A u t o r i s e s integer NOT NULL ,
C l e f s c a n d i d a t e s
PRIMARY KEY ( i d ) ,
C l e f s e t r a n g e r e s
FOREIGN KEY ( N b E m p r u n t s A u t o r i s e s ) REFERENCES B i b l i o t h e q u e . T a r i f s ( N b E m p r u n t s A u t o r i s e s )

Question 1.1 (1 point)

Pour la relation

Adherents,

donnez la seule dpendance fonctionnelle dclare, puis

expliquez quoi correspond et quoi sert la clef trangre.

Rponse :

Id
La clef trangre

(N om, P renom, N bEmpruntsAutorises)

NbEmpruntsAutorises

Tarifs.
Tarifs.

fait rfrence l'attribut de mme nom de la relation

garantit que lors de l'ajout d'un adhrent, la valeur de cet attribut existe dans la relation

Cela

Les livres sont dcrits dans une relation.

CREATE TABLE

);

Bibliotheque . Livres (
T y p a g e d e s a t t r i b u t s
I d s e r i a l NOT NULL ,
s e r i a l = s e q u e n c e d ' e n t i e r
ISBN t e x t NOT NULL ,
DateAchat date NOT NULL ,
C l e f s c a n d i d a t e s
PRIMARY KEY ( I d ) ,
C l e f s e t r a n g e r e s
FOREIGN KEY ( ISBN ) REFERENCES B i b l i o t h e q u e . O e u v r e s ( ISBN )

Question 1.2 (1 point)

Pour la relation

Livres,

1,

2,

3,

. . .

donnez la seule dpendance fonctionnelle dclare, puis

expliquez quoi correspond et quoi sert la clef trangre.

Rponse :

Id
La clef trangre

ISBN

(ISBN, DateAchat)

fait rfrence l'attribut de mme nom de la relation

l'ajout d'un livre, l'oeuvre existe bien existe dans la relation

Oeuvres.

Oeuvre.

Cela garantit que lors de

Les emprunts sont enregistrs dans une relation.

CREATE TABLE

);

B i b l i o t h e q u e . Emprunts (
T y p a g e d e s a t t r i b u t s
L i v r e integer NOT NULL ,
DateEmprunt date NOT NULL ,
D a t e R e t o u r date NOT NULL DEFAULT ' i n f i n i t y ' ,
A d h e r e n t integer NOT NULL ,
C l e f s c a n d i d a t e s
PRIMARY KEY ( L i v r e , DateEmprunt ) ,
UNIQUE ( L i v r e , D a t e R e t o u r ) ,
C l e f s e t r a n g e r e s
FOREIGN KEY ( A d h e r e n t ) REFERENCES B i b l i o t h e q u e . A d h e r e n t s ( I d ) ,
FOREIGN KEY ( L i v r e ) REFERENCES B i b l i o t h e q u e . L i v r e s ( I d ) ,
C o n t r a i n t e s d ' i n t e g r i t e e l e m e n t a i r e
CHECK ( DateEmprunt < D a t e R e t o u r )

2/ 9

INF 159 : Bases de donnes

PostgreSQL

CREATE

exige

Session 2, Anne 2010/2011

une

fonction

pour

les

contraintes

d' integrite

avec

SELECT

FUNCTION B i b l i o t h e q u e . D a t e s E m p r u n t R e t o u r C o r r e c t e s ( integer , date , date )


RETURNS b o o l e a n AS $$
SELECT NOT EXISTS (
SELECT
FROM B i b l i o t h e q u e . Emprunts
WHERE ( $1 = L i v r e AND $2 <= D a t e R e t o u r AND $3 >= DateEmprunt ) )
$$ LANGUAGE SQL ;
C o n t r a i n t e d ' i n t e g r i t e s t a t i q u e
ALTER TABLE B i b l i o t h e q u e . Emprunts ADD CONSTRAINT D a t e s E m p r u n t R e t o u r P o s s i b l e s
CHECK( B i b l i o t h e q u e . D a t e s E m p r u n t R e t o u r C o r r e c t e s ( L i v r e , DateEmprunt , D a t e R e t o u r )=TRUE ) ;
Question 1.3 (1 point)

Pour la relation

Emprunts,

donnez les seules dpendances fonctionnelles dclares,

expliquez le rle des clefs trangres, puis dcrivez l'objectif des deux contraintes d'intgrit.

Rponse :

(Livre, DateEmprunt) (DateRetour, Adherent)


(Livre, DateRetour) (DateEmprunt, Adherent)



Adherent doit exister dans la table Adherents


Livre doit exister dans la table Livres

 La date d'emprunt doit tre antrieure la date de retour.


 Un livre ne peut pas tre emprunt par deux adhrents en mme temps.
Deux contraintes d'intgrit inter relations sont ajoutes au schma. PostGreSQL ne permet pas d'attacher
des contraintes aux schmas. Ces contraintes sont donc ajoutes la relation

Emprunts

car elles doivent tre

vries lors de chaque nouvel emprunt.

PostgreSQL

exige

Contrainte

d' integrite

PostgreSQL

exige

Contrainte

d' integrite

CREATE

une

fonction
inter

pour

les

contraintes

d' integrite

avec

SELECT

relations

FUNCTION B i b l i o t h e q u e . D a t e s E m p r u n t A c h a t C o r r e c t e s ( integer , date )


RETURNS b o o l e a n AS $$
SELECT EXISTS (
SELECT
FROM B i b l i o t h e q u e . L i v r e s
WHERE ( $1 = I d AND $2 > DateAchat ) )
$$ LANGUAGE SQL ;
C o n t r a i n t e d ' i n t e g r i t e i n t e r r e l a t i o n s s t a t i q u e
ALTER TABLE B i b l i o t h e q u e . Emprunts ADD CONSTRAINT D a t e s E m p r u n t A c h a t P o s s i b l e s
CHECK( B i b l i o t h e q u e . D a t e s E m p r u n t A c h a t C o r r e c t e s ( L i v r e , DateEmprunt ) = TRUE ) ;

CREATE

une

fonction
inter

pour

les

contraintes

d' integrite

relations

avec

SELECT

FUNCTION B i b l i o t h e q u e . N o mb r eE m p ru n t sC o rr e c t ( integer , date )


RETURNS b o o l e a n AS $$
SELECT NOT EXISTS (
SELECT A d h e r e n t
FROM B i b l i o t h e q u e . Emprunts , B i b l i o t h e q u e . A d h e r e n t s
WHERE ( $1 = A d h e r e n t AND $1 = I d )
AND ( $2 >= DateEmprunt AND $2 <= D a t e R e t o u r )
GROUP BY Adhe rent , N b E m p r u n t s A u t o r i s e s
HAVING ( count ( ) >= N b E m p r u n t s A u t o r i s e s ) )
$$ LANGUAGE SQL ;
A j o u t d e l a c o n t r a i n t e p a r a p p e l d e l a f o n c t i o n
ALTER TABLE B i b l i o t h e q u e . Emprunts ADD CONSTRAINT N o m b r e E m p r u n t s P o s s i b l e
CHECK( B i b l i o t h e q u e . No m b re E mp r u nt s C or r ec t ( Adhe rent , DateEmprunt ) = TRUE ) ;
Question 1.4 (1 point)

Dcrivez les objectifs de ces deux contraintes d'intgrit.

Rponse :
1.

DatesEmpruntAchat

interdit le prt d'un livre avant qu'il ne soit achet.

3/ 9

INF 159 : Bases de donnes

2.

NombreEmprunts

Session 2, Anne 2010/2011

interdit le prt de trop de livres simultanment un adhrent.

Question 1.5 (1 point)

En tenant compte uniquement des dpendances fonctionnelles que vous avez listes

dans les rponses prcdentes, dites si les relations

Adherents, Livres

et

Emprunts

sont 3NF et/ou BCNF.

Rponse :
Adherents

3NF

BCNF

Justication

OUI

OUI

Id (N om, P renom, N bEmpruntsAutorises)

est la seule DF irrduc-

tible gauche, donc BCNF

3NF
Id (ISBN, DateAchat)
BNCF

Livres

OUI

OUI

est la seule DF irrductible gauche, donc

BCNF
BNCF
Emprunts

OUI

OUI

BNCF

Question 1.6 (1 point)

Les

SELECT
FROM
WHERE

3NF

3NF

Aprs en avoir donn une criture algbrique, crire une requte SQL qui caractrise

les identiants et les noms des

Rponse :

Les 2 clefs candidates sont les membres gauches des 2 DFs, donc BCNF

Adherents

pouvant emprunts plus de 3 libres simultanment.

R = [Identif iant, N om]([N bEmpruntsAutorises > 3](Adherents))

noms

des

adherents

pouvant

empruntes

plus

de

livres

simultanement

I d , Nom
Bibliotheque . Adherents
B i b l i o t h e q u e . Adherents . NbEmpruntsAutorises > 3;

Question 1.7 (1 point)

Aprs en avoir donn une criture algbrique, crire une requte SQL qui caractrise

les identiants, noms et prnoms des lecteurs de l'ouvrage dont l'ISBN est '2-7117-4838-3'.

Rponse : Rponse non unique.

R = [Adherent, N om, P renom]([Adherent.Id = Emprunts.Adherent Livres.Id = Emprunts.Livre


ISBN =0 2 7117 4838 30 ](Adherents Livres Emprunts))

Les

SELECT
FROM
WHERE
AND
AND

e t prenoms d es
lecteurs
d e '2 7117 4838 3 '
Adhe rent , Nom, Prenom
B i b l i o t h e q u e . A d h e r e n t s , B i b l i o t h e q u e . L i v r e s , B i b l i o t h e q u e . Emprunts
A d h e r e n t s . I d = Emprunts . A d h e r e n t
L i v r e s . I d = Emprunts . L i v r e
ISBN = ' 2 7117 4838 3 ' ;

nom

Question 1.8 (1 point)

Aprs en avoir donn une criture algbrique, crire une requte SQL qui caractrise

les identiants, noms et prnoms des adherents en retard ( la date du jour) pour retourner un emprunt. La dure
d'un prt est limit 30 jours. Vous pourrez utiliser

current_date

qui retourne la date du jour et l'opration

('une_date' + integer '30') qui retourne une date.

Rponse : Rponse non unique.

R = [Adherent, N om, P renom]([Adherent.Id = Emprunts.Adherent current_date < DateRetour


current_date > (DateRetour + 30jours)](Adherents Emprunts))

Les

SELECT
FROM
WHERE
AND
AND

adherents

en

retard

pour

retourner

un

emprunt .

I d , Nom, Prenom
B i b l i o t h e q u e . A d h e r e n t s , B i b l i o t h e q u e . Emprunts
A d h e r e n t s . I d = Emprunts . A d h e r e n t
current_date < D a t e R e t o u r
current_date > DateEmprunt + integer ' 30 ' ;

Question 1.9 (1,5 point)

crire une requte SQL qui liste identiants, noms et prnoms des adhrents qui,

la date du jour, ont la possibilit d'emprunter. Ce sont donc les adhrents qui n'ont pas actuellement autant
de livres que le nombre qui leur est autoris.

Rponse :

4/ 9

INF 159 : Bases de donnes

Les

adherents

Session 2, Anne 2010/2011

ayant

le

droit

d ' emprunter

la

date

SELECT I d , Nom, Prenom


FROM
Bibliotheque . Adherents
WHERE
NbEmpruntsAutorises > 0
EXCEPT
SELECT I d , Nom, Prenom
FROM
B i b l i o t h e q u e . A d h e r e n t s , B i b l i o t h e q u e . Emprunts
WHERE
A d h e r e n t s . I d = Emprunts . A d h e r e n t
AND
current_date < D a t e R e t o u r
GROUP BY I d , Nom, Prenom , N b E m p r u n t s A u t o r i s e s
HAVING ( N b E m p r u n t s A u t o r i s e s <= count ( ) ) ;
Question 1.10 (1 point)

Dnir une vue

OeuvresLues

du

jour

comme le rsultat de la requte qui liste les couples

(ISBN, Adherent) des livres emprunts.

Rponse :

Toutes

les

couples

( oeuvres

lues ,

adherent )

CREATE VIEW O e u v r e s L u e s AS
SELECT ISBN , A d h e r e n t
FROM
B i b l i o t h e q u e . L i v r e s , B i b l i o t h e q u e . Emprunts
WHERE
L i v r e s . I d = Emprunts . L i v r e ;
Question 1.11 (2 points)

crire une requte SQL qui liste les oeuvres lues par tous les adhrents. Vous

pourrez utiliser la vue de la question prcdente.

Rponse :

Les

Division

predicative

Division

algebrique

oeuvres

lues

par

tous

les

adherents

SELECT DISTINCT ISBN


FROM B i b l i o t h e q u e . O e u v r e s L u e s
WHERE NOT EXISTS
( SELECT
FROM B i b l i o t h e q u e . A d h e r e n t s
WHERE NOT EXISTS
( SELECT A d h e r e n t
FROM B i b l i o t h e q u e . O e u v r e s L u e s AS R11
WHERE R11 . ISBN = O e u v r e s L u e s . ISBN
AND
R11 . A d h e r e n t = A d h e r e n t s . I d ) ) ;
SELECT DISTINCT ISBN
FROM B i b l i o t h e q u e . O e u v r e s L u e s
EXCEPT
SELECT ISBN
FROM
( SELECT
FROM ( SELECT DISTINCT ISBN
FROM B i b l i o t h e q u e . O e u v r e s L u e s ) AS PiR1 ,
( SELECT I d
AS A d h e r e n t FROM B i b l i o t h e q u e . A d h e r e n t s ) AS
EXCEPT
SELECT
FROM B i b l i o t h e q u e . O e u v r e s L u e s ) AS N o n E n t i e r R 1 ;
L'attribut

Auteur

TMP

de la relationOeuvres oblige dcrire les auteurs (lorsqu'ils sont multiples) par une liste

unique.

INSERT INTO B i b l i o t h e q u e . O e u v r e s
VALUES( ' 0 201 52983_1 ' , ' LaTeX ' , ' Addison Wesley ' , ' L e s l i e Lamport ' ) ;
INSERT INTO B i b l i o t h e q u e . O e u v r e s
VALUES( ' 0399 4198 ' , ' F i a b i l i t e d e s s y s t e m e s ' , ' E y r o l l e s ' , 'A . Pages , M.
INSERT INTO B i b l i o t h e q u e . O e u v r e s
VALUES( ' 2 7117 4838 3 ' , ' B a s e s de d o n n e e s ' , ' V u i b e r t ' , ' C h r i s Date ' ) ;
5/ 9

Gondran ' ) ;

INF 159 : Bases de donnes

Session 2, Anne 2010/2011

INSERT INTO B i b l i o t h e q u e . O e u v r e s
VALUES( ' 0 201 44124 1 ' , ' Automata Theory ' , ' Addison Wesley ' , ' H o p c r o f t , Motwani , Ullman ' ) ;
INSERT INTO B i b l i o t h e q u e . O e u v r e s
VALUES( ' 0 262 03270 8 ' , ' Model C h e c k i n g ' , 'MIT P r e s s ' , ' C l a r k e , Grumberg , P e l e d ' ) ;
Cette contrainte rend trs dicile toute requte lie un auteur donn.

Question 1.12 (1,5 point)

Proposez une modication du schma conceptuel relationnel an que des requtes

lies un auteur particulier, identi par son nom et son prnom, soient possibles. Pour un livre, vous devrez
pouvoir acher sa liste ordonne des auteurs telle qu'elle apparat sur la couverture. Vous prciserez les nouvelles
dpendances fonctionnelles et contraintes d'intgrit.

Rponse :
C'est le problme de la liste des prnoms d'un individu. Il faut donc crer une relation

Oeuvres.

Auteurs

et modier

CREATE TABLE

);

B i b l i o t h e q u e . Oeuvres (
T y p a g e d e s a t t r i b u t s
ISBN t e x t NOT NULL ,
T i t r e t e x t NOT NULL ,
E d i t e u r t e x t NOT NULL ,
Nom t e x t NOT NULL ,
Nom d u
Prenom t e x t NOT NULL ,
Prenom
C l e f s c a n d i d a t e s
PRIMARY KEY ( ISBN )

premier
du

auteur

premier

auteur

CREATE TABLE

);

Bibliotheque . Auteurs (
T y p a g e d e s a t t r i b u t s
Nom t e x t NOT NULL ,
Prenom t e x t NOT NULL ,
ISBN t e x t NOT NULL ,
O r d r e integer NOT NULL CHECK ( O r d r e > 1 ) ,
C l e f s c a n d i d a t e s
PRIMARY KEY (Nom, Prenom ) ,
UNIQUE ( ISBN , O r d r e ) ,
C l e f s e t r a n g e r e s
FOREIGN KEY ( ISBN ) REFERENCES B i b l i o t h e q u e . O e u v r e s ( ISBN )

Il faut ajouter une contrainte pour que les valeurs pour l'attribut
(ventuellement vide)

Ordre

pour une oeuvre donne forme la suite

2, 3, 4, ....

Exercice 2 (Normalisation (7 points))


Soit la relation

ColoniesVacances (Lieu, Transport, NbPlaces, Jour, Groupe, Activite, Animateur),

vision simplie d'une gestion d'un centre de vacances pour enfants, et un ensemble irrductible de dpendances
fonctionnelles :


{Lieu} {Transport}

: les activits se droulent dans des lieux qui ncessitent un moyen de transport

(marche, vlo, bus . . .).







{Animateur} {Activite} : les animateurs sont spcialiss dans une seule activit.
{Lieu, Jour} {Groupe} : chaque jour, un lieu n'est utilis que par un seul groupe.
{Transport} {NbPlaces} : chaque moyen de transport limite le nombre d'enfants.
{Groupe, Activite} {Animateur} : pour faciliter le planning, un groupe fait toujours une mme activit
avec le mme animateur.





{Lieu, Jour} {Animateur} : chaque jour, un lieu n'est utilis que par un seul animateur.
{Groupe, Jour} {Lieu} : chaque jour, un groupe ne se dplace que sur un seul lieu.
{Animateur, Jour} {Lieu} : chaque jour, un animateur ne se dplace que sur un seul lieu.
Lieu

Transport

NbPlaces

Jour

Groupe

Activite

Animateur

plage

marche

20

27-07-2010

Jaune

surf

Brice

stade

velo

10

26-07-2010

Vert

tir a l'arc

Guillaume

Question 2.1 (1 point)

Donnez toutes les clefs candidates de la relation

Rponse : Les dpendances fonctionnelles donnent :

6/ 9

ColoniesVacances.

INF 159 : Bases de donnes





Session 2, Anne 2010/2011

C1 = {Lieu, Jour}
C2 = {Animateur, Jour}
C3 = {Groupe, Jour}

Question 2.2 (1 point)


pourquoi la relation

Mme si l'on suppose qu'il n'y a aucun doublon dans

ColoniesVacances

ColoniesVacances,

justiez

n'est pas en troisime forme normale.

Rponse : Une seule des explications suivantes est susante (liste non exhaustive).
Non 2NF : La clef

{Lieu, Jour}

contient

Non 3NF : La clef

{Lieu, Jour}

et

{Transport} {NbPlaces}.

Non 3NF : La clef

{Lieu, Jour}

et

{Animateur} {Activite}.

Question 2.3 (2 points)

{Lieu}

qui dtermine

{Transport}.

Appliquez un algorithme (ou une technique) de normalisation pour obtenir une d-

composition, sans perte d'information, de la relation

ColoniesVacances

en un ensemble de relations au moins

en troisime forme normale. Vous n'crirez sur la copie que les nouvelles relations et les dpendances fonctionnelles qui sont la base des projections eectues.

Rponse : Dcomposition en BCNF :


1.
2.
3.

4.

Transports (Transport, NbPlaces) qui provient de {Transport} {NbPlaces} (BCNF)


Lieux (Lieu, Transport) qui provient de {Lieu} {Transport} (BCNF)
Animateurs (Animateur, Activite) qui provient de {Animateur} {Activite} (BCNF)
dpendance {Groupe, Activite} {Animateur} devient une contrainte inter relations.
Planning (Lieu, Jour, Groupe, Animateur) (BCNF)

mais la

Dcomposition en 3NF :
1.
2.
3.

Transports (Transport, NbPlaces) qui provient de {Transport} {NbPlaces} (BCNF)


Lieux (Lieu, Transport) qui provient de {Lieu} {Transport} (BCNF)
Planning (Lieu, Jour, Groupe, Animateur) qui provient de {Lieu, Jour} {Groupe, Animateur}
(BCNF)

4.

TypesColoniesVacances (Groupe, Activite, Animateur) qui provient de {Groupe, Activite}


{Animateur} et qui contient {Animateur} {Activite}. (3NF et non BCNF)

Question 2.4 (3 points)

Aprs avoir prcis si votre dcomposition est en BCNF ou bien seulement en 3NF,

rpondez aux questions qui vous concernent.

Votre dcomposition est en BCNF

1. Indiquez la dpendance fonctionnelle que vous avez perdue.


2. En supposant que cette dpendance ne soit pas crite sous forme d'une contrainte, donnez un ensemble
de requtes d'insertion pour vos relations, qui viole cette dpendance fonctionnelle.

Votre dcomposition est seulement en 3NF

1. Indiquez le problme de redondance qui subsiste.


2. Donnez un ensemble de requtes d'insertion pour vos relations, suivi d'une requte de mise jour
qui ncessite que le SGBD modie ventuellement plusieurs tuples, du fait de la redondance.

Rponse :
Dcomposition en BCNF
1.

{Groupe, Activite} {Animateur}.

2. Les insertions suivantes sont possibles :

INSERT
INSERT
INSERT
INSERT

INTO
INTO
INTO
INTO

A n i m a t e u r s VALUES ( go1 ,
A n i m a t e u r s VALUES ( go2 ,
P l a n n i n g VALUES ( l i e u 1 ,
P l a n n i n g VALUES ( l i e u 1 ,

Votre dcomposition est seulement en 3NF


1. L'information

(Animateur, Activite)

act1 ) ;
act1 ) ;
' 01 01 2011 ' , r ou ge , go1 ) ;
' 02 01 2011 ' , r ou ge , go2 ) ;

:
est duplique.

2. La mise jour suivante modie plusieurs tuples.

7/ 9

INF 159 : Bases de donnes

Session 2, Anne 2010/2011

INSERT INTO T y p e s C o l o n i e s V a c a n c e s VALUES ( r ou ge , a c t 1 , go1 ) ;


INSERT INTO T y p e s C o l o n i e s V a c a n c e s VALUES ( v e r t , a c t 1 , go1 ) ;
UPDATE T y p e s C o l o n i e s V a c a n c e s SET ( A c t i v i t e = a c t 2 ) WHERE A n i m a t e u r

= go1 ;

Exercice 3 (Le risque NULL (3 points))


Dans la documentation anglaise PostGreSQL 8.4, on trouve :
To check whether a value is or is not null, use the constructs :
 expression IS NULL
 expression IS NOT NULL
Do not write expression = NULL because NULL is not "equal to" NULL. (The null value represents an unknown value, and it is not known whether two unknown values are equal.) This behavior
conforms to the SQL standard.

Tip : Some applications might expect that expression = NULL returns true if expression evaluates
to the null value. It is highly recommended that these applications be modied to comply with the
SQL standard. However, if that cannot be done the

transform_null_equals

conguration variable

is available. If it is enabled, PostgreSQL will convert x = NULL clauses to x IS NULL.


Ordinary comparison operators yield null (signifying "unknown"), not true or false, when either
input is null. For example, 7 = NULL yields null.
Dans la documentation franaise PostGreSQL 8.4, on trouve :
Pour vrier si une valeur est NULL ou non, on utilise les constructions
 expression IS NULL
 expression IS NOT NULL
On ne peut pas crire expression = NULL parce que NULL n'est pas  gal  NULL. (La valeur
NULL reprsente une valeur inconnue et il est impossible de dire si deux valeurs inconnues sont
gales.) Ce comportement est conforme au standard SQL.

Astuce : Il se peut que des applications s'attendent voir expression = NULL value vrai
(true) si expression s'value comme la valeur NULL. Il est chaudement recommand que ces applications soient modies pour se conformer au standard SQL. Nanmoins, si cela n'est pas possible,
le paramtre de conguration

transform_null_equals

peut tre utilis. S'il est activ, PostgreSQL

convertit les clauses x = NULL en x IS NULL.


L'oprateur standard de comparaison renvoie NULL (ce qui signie  inconnu ) si l'une des entres
est NULL, ni true ni false, c'est--dire 7 = NULL renvoie NULL.
Soit la relation

TableNull

rsultat des commandes suivantes :

CREATE SCHEMA P r o b l e m e N u l l ;
SET s e a r c h _ p a t h TO P r o b l e m e N u l l , p u b l i c ;
CREATE TABLE P r o b l e m e N u l l . T a b l e N u l l (

);

T y p a g e d e s a t t r i b u t s
I d s e r i a l NOT NULL ,
A t t t e x t DEFAULT NULL ,
C l e f s c a n d i d a t e s
PRIMARY KEY ( i d )

INSERT INTO
INSERT INTO

serial

ProblemeNull . TableNull
ProblemeNull . TableNull

sequence

d' entier

1,

2,

3,

. . .

VALUES(DEFAULT, 'A ' ) ;


VALUES(DEFAULT, DEFAULT ) ;

Pour toutes les questions, on considre que le paramtre de conguration

transform_null_equals

n'est pas

activ.

Question 3.1 (3 points)


tourne

vrai

SELECT
FROM
WHERE

ou

faux,

Donnez le rsultat des requtes suivantes, ou

Predicat

est une expression qui re-

en crivant OUI ou NON suivant si le tuple est dans la rponse.

ProblemeNull . TableNull
Predicat ;

Rponse :

8/ 9

INF 159 : Bases de donnes

Session 2, Anne 2010/2011

Id

Att

Att IS NULL

Att IS NOT NULL

NOT (Att IS NULL)

Non

Oui

Oui

NULL

Oui

Non

Non

Id

Att

Att = NULL

Att != NULL

NOT (Att = NULL)

Non

Non

Non

NULL

Non

Non

Non

9/ 9