Corrigé du contrôle pour les EI 05/06

Institut National des Télécommunications

Contrôle des connaissances

Bases de données

Code : BD21

Date : 08/11/2005

Durée : 1h30

Coordonnateur : C. Lecocq et S. Tata

Documents autorisés: ceux distribués en cours

 

____________________________________________________

Avertissements

1/ Lisez attentivement le sujet.

2/ Les questions sont indépendantes les unes des autres.

3/ Essayez d'être clair et précis dans vos réponses.

4/ Soignez la présentation, dans la mesure du possible.

5/ Barème indicatif

Question 1 : 5 points (Q1 = 5
pts)

Question 2 : 4 points (Q2.1 = 2
pts, Q2.2 = 2 pts)

Question 3 : 5,5 points (Q3.1 = 1,5 pts, Q3.2 = 2 pts, Q3.3 = 2 pts)

Question 4 : 4 points (Q4.1 = 2 pts, Q4.2 = 2 pts)

Question 5 : 1,5 point (Q5.1 = 1pt,
Q5.2 = 0,5pt)


Une ludothèque souhaite organiser les jeux proposés aux
enfants en fonction de leur but pédagogique et des compétences développées.
Afin de proposer des activités adéquates aux enfants clients de cette
ludothèque, le schéma de base de données suivant est défini :

FamilleJeux (nomFamille, butPedagogique)

Jeux (nomJeux, prix,
description, ageMini, ageMaxi, nomFamilleJeux)

Accessoire (nomJeux,
nomAccessoire,
prix)

Compétence (nomCompetence,
description, ageMiniAdapte, ageMaxiAdapte)

Developper (nomJeux, nomCompetence)

Les clés sont soulignées et les clés étrangères sont en
gras.

La sémantique des diverses relations est la suivante :

FamilleJeux (nomFamille, butPedagogique) : une
famille de jeux est identifiée par son nom « nomFamille ».
Les seules valeurs possibles de nomFamille
sont : « jeux de société », « loisirs créatifs »,
« jeux d’imitation ». Le but pédagogique « butPedagogique » de cette famille est associé.

Jeux (nomJeux, prix, description, ageMini, ageMaxi, nomFamilleJeux) :
un jeux est identifié par son nom « nomJeux ».
Il est décrit par son prix « prix »,
une description textuelle « description »,
un age minimum « ageMini »,
un age maximum « ageMaxi »
et le nom de la famille de jeux auquel il appartient « nomFamilleJeux »; clé étrangère
sur la relation « FamilleJeux ».

Accessoire (nomJeux, nomAccessoire,
prix) : un accessoire est identifié par son nom « nomAccessoire » et le nom du jeux auquel il doit
être associé « nomJeux ». Il
possède un prix « prix ». « nomJeux » est une clé étrangère
sur la relation « Jeux ».

Compétence (nomCompetence, description,
ageMiniAdapte, ageMaxiAdapte) : une compétence est identifiée par son nom « nomCompétence » (« motricité
fine », « stratégie », « socialisation » par exemple).
Une compétence est décrite par un attribut « description »,
un âge minimum « ageMiniAdapte »
avant lequel cette compétence ne peut pas être développée, un âge maximum « ageMaxiAdapte » après lequel
cette compétence est acquise et n’a plus à être développée.

Developper (nomJeux, nomCompetence) : le jeux
de nom « nomJeux »
développe la compétence de nom « nomCompetence ».
« nomJeux » est une clé étrangère sur la relation « Jeux ». « nomCompetence » est une clé étrangère sur la relation « Competence ».

Question 1

En vous aidant des règles de passage d'une modélisation
Entité/association à une modélisation relationnelle "à l'envers",
proposer un schéma Entité/Association équivalent à ce schéma relationnel. Ce
schéma devra comporter la description des entités (avec leurs propriétés), des
entités faibles (s'il y a lieu), des associations (avec leurs propriétés) ainsi
que les cardinalités minimum et maximum des associations binaires.

Question 2

Exprimer chacune des 2 questions suivantes, d'une part
en algèbre relationnelle (sous la forme d'un arbre algébrique ou
sous forme textuelle), et d'autre part en SQL.

(Q2.1) Quels sont les jeux
(nom de jeux et prix) qui coûtent moins de 20 Euro ?

SELECT nomJeux, prix

FROM Jeux

WHERE prix < 20

 

(Q2.2) Quels sont les noms
des jeux et les noms des accessoires de jeux qui développent la compétence
« motricité fine » ? La compétence développée par un accessoire
est la même que celle du jeux auquel il est rattaché.

SELECT nomJeux

FROM Developper
D

WHERE
D.nomCompetence =’motricité fine’

UNION

SELECT nomAccessoire

FROM Developper
D, Accessoire A

WHERE D.nomJeux
= A.nomJeux

AND
D.nomCompetence =’motricité fine’

Question 3

Exprimer les 3 questions suivantes en SQL :

(Q3.1) Pour chaque famille
de jeux, donner le nom de la famille, le nombre de jeux appartenant à cette
famille et le prix moyen des jeux de cette famille.

SELECT nomFamilleJeux,
COUNT(*) , AVG (prix)

FROM Jeux J

GROUP BY
nomFamilleJeux

(Q3.2) Donner le nom des jeux
et leur prix chacun des accessoires est plus cher que le jeux lui-même (le
minimum du prix des accessoires est supérieur au prix du jeux).

SELECT nomJeux, prix

FROM Jeux J

WHERE prix <=
ALL

                (SELECT
prix

                FROM
Accessoire A

                WHERE A.nomJeux =
J. nomJeux)

2ème solution

SELECT  nomJeux, prix

FROM Jeux J

WHERE prix <=

                (SELECT
MIN(prix)

                FROM
Accessoire A

                WHERE
A.nomJeux = J. nomJeux)

(Q3.3) Quel est le jeux
développant le maximum de compétences ?

SELECT nomJeux

FROM Developper
D

GROUP BY nomJeux

HAVING COUNT(*)
>=

                SELECT
MAX(COUNT(*))

                FROM
Developper

                GROUP
BY nomJeux)

Question 4

Exprimer les 2 questions suivantes en algèbre relationnelle ou
en SQL :

(Q4.1) Quels sont les jeux
(nom de jeux) développant toutes les compétences ?

SELECT nomJeux

FROM Developper

GROUP BY nomJeux

HAVING COUNT(*)
= select COUNT(*) FROM Competence

(Q4.2) Quels sont les jeux
(nom de jeux et description) qui ne sont pas de la famille « jeux
d’imitation » ?

SELECT nomJeux, description

FROM Jeux

Minus

SELECT nomJeux, description

FROM Jeux

WHERE nomFamilleJeux=’jeux
d’imitation’

2ème solution

SELECT DISTINCT nomJeux,
description

FROM Jeux

WHERE nomFamilleJeux<>’jeux
d’imitation’

 

Question 5

(Q5.1) Ecrire l’ordre de création
de la relation « FamilleJeux » en SQL. Cette création doit contenir
la définition des contraintes d’intégrité (contrainte de clé, clé étrangère,
contraintes de domaine …).

Vous considérerez pour cela que
l’attribut « nomFamille » est une chaîne de 16 caractères et que
dont les valeurs possibles sont 
: « jeux de société »,
« loisirs créatifs », « jeux d’imitation ». L’attribut « butPedagogique » est une chaîne de 30 caractères.

CREATE TABLE FamilleJeux (

nomFamille
CHAR(16) PRIMARY KEY CHECK (nomFamille IN (‘jeux de société’,’loisirs
créatifs’,’jeux d’imitation’)),

butPedagogique
CHAR(30)) ;

(Q5.2) Que doit faire le
formulaire suivant ?

<html>

<body>

<hr>

<form name="titi"
action="http://www-inf.int-evry.fr/cgi-bin/mowi_sql.cgi"
method="POST">

<input type="hidden" name="uid"
value="titi/titi@TANNA">

<input type="hidden"
name="mode" value="NOR">

<input type="hidden"
name="table" value="JEUX">

<input type="hidden"
name="sqlstatement" value="Select nomJeux, COUNT(*) From Jeux J,
accessoire A where J.nomJeux= A.nomJeux group by nomJeux">

<input type="button" value="GO!"
onClick="titi.submit();">

</form>

</body>

</html>

Interrogation du nombre d’accessoire par jeux. Le compte
interrogé est sur l’instance de base de données TANNA. Le login est titi et le
mot de passe titi.