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

Institut National des Télécommunications

Contrôle des connaissances

Bases de données

Code : BD21

Date : 05/11/2004

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 : 6 points (Q3.1 = 2
pts, Q3.2 = 2 pts, Q3.3 = 2 pts)

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

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


Un établissement public organise régulièrement des consultations
de son personnel (élections de représentant, enquêtes). Afin de faciliter la
gestion de ces consultations, cet établissement souhaite proposer un système de
vote électronique ; il a donc défini le schéma de bases de données suivant
:

Votants (noVotant, nomVotant,
email)

SessionsDeVote (nomSession,
dateSession, heureDébut, heureFin, typeDeVote, question, idAssesseur)

ListeElectorale (noVotant,
nomSession
, aVoté)

ChoixDeVote (nomSession,
choix)

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

La sémantique des diverses relations est la suivante :

Votants (noVotant, nomVotant, email) : un votant
est identifié par son numéro « noVotant ».
Il possède un nom et une adresse électronique « email ».

SessionsDeVote (nomSession, dateSession, heureDebut,
heureFin, typeDeVote, question, idAssesseur) : une session de vote
est identifiée par un nom : « nomSession ».
Elle a lieu à une date (« dateSession »)
pendant des heures prédéfinies (entre « heureDébut »
et « heureFin »). Les
consultations sont d’un certain type « typeDeVote »
qui peut prendre les valeurs « Election », « Consultation »,
« Referendum » par exemple. Nous supposerons qu’une consultation ne
contient qu’une et une seule question dont le libellé est mémorisé dans
« question ». Un assesseur (« idAssesseur »,
clé étrangère sur la relation Votants), nommé parmi la liste des votants, est
garant du bon déroulement de cette consultation.

ListeElectorale (noVotant, nomSession, aVoté) :
pour chaque session de vote, une « liste électorale » est définie.
Elle permet de connaître la liste des personnes dans la liste des votants
effectivement autorisées à voter pour cette session de vote. Elle contient une
liste de votants (« noVotant »,
clé étrangère sur la relation Votants) ayant le droit de vote pour une session
de vote (« nomSession », clé
étrangère sur la relation SessionsDeVote). La valeur par défaut de « aVoté » est 0 (le votant a le droit
de voter mais n’a pas encore exercé ce droit). Lorsque le votant a
effectivement voté, « aVoté »
prend la valeur 1. Remarque : la somme des « aVoté » permet d’obtenir le nombre de votants ayant
effectivement voté.

ChoixDeVote (nomSession, choix) : une
session de vote correspond à une seule question posée. Les réponses à cette
question sont prédéfinies et en nombre limité (comme dans un QCM par exemple).
Un choix possible à une question de vote est identifié par le libellé de ce
choix (« choix ») et la
session de vote de la question à laquelle il répond (« nomSession », clé étrangère sur la
relation SessionsDeVote).

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, et
d'autre part
en SQL.

(Q2.1) Quelles sont les sessions
de vote (nom de session et date de session de vote) ayant eu lieu en 2003 ?

Remarque : vous supposerez
que les opérateurs de comparaison classiques sont applicables aux types date.
Il est donc possible d’écrire :

dateSession > ‘01/01/2003’

SELECT nomSession, dateSession

FROM SessionsDeVote

WHERE dateSession
>= ‘01/01/2003’ AND dateSession <= ‘31/12/2003’

 

(Q2.2) Quelles sont les sessions
de vote (nom de session) de type « Election » pour lesquelles le
votant numéro 1234 a voté en 2003 ?

SELECT nomSession

FROM SessionsDeVote
S, ListeElectorale L

WHERE S.nomSession =
L.nomSession

AND typeDeVote =
‘Election’ AND aVote = 1

Question 3

Exprimer les 3 questions suivantes en SQL :

(Q3.1) Quel est le taux de
participation (nombre de votes / nombre de votants) aux consultations de type
« Election » ?

Rappel : les valeurs possibles
de « aVoté » sont 0 (votant
n’ayant pas voté) et 1 (votant ayant voté).

SELECT SUM(aVote)/COUNT(*)
                                    // == AVG(aVote)

FROM ListeElectorale

WHERE typeDeVote =’Election’

(Q3.2) Donner pour chaque session
de vote le nom de la session de vote, la date de cette session, le nombre de
votants, le taux de participation (moyenne des valeurs de « aVoté ») uniquement si le nombre de
votants est supérieur à 500.

SELECT nomSession, dateSession,
COUNT(*), AVG(aVote)

FROM ListeElectorale

GROUP BY nomSession,
dateSession

HAVING COUNT(*)
>= 500

(Q3.3) Quelle est la
consultation (nom de Session) ayant recueilli le nombre de votes maximum ?

SELECT nomSession

FROM ListeElectorale

GROUP BY nomSession

HAVING SUM(aVote)
>=   Select Max (SUM(aVote))

                                                                FROM
ListeElectorale

                                                                GROUP
BY nomSession

Question 4

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

(Q4.1) Quels sont les
votants (numéro de votant, nom du
votant
) qui ont voté pour toutes les sessions de vote ?

SELECT noVotant, nomVotant

FROM ListeElectorale
L, Votants V

WHERE L.noVotant = V.noVotant

GROUP BY noVotant, nomVotant

HAVING SUM(aVote) =     SELECT
COUNT(*)

                                                FROM
SessionsDeVote

(Q4.2) Quels sont les sessions
de vote (nom de session) qui ne possèdent ni le choix de réponse
« oui », ni le choix de réponse « non » à leur
question ?

SELECT nomSession

FROM SessionsDeVote

MINUS

(

SELECT nomSession

FROM ChoixDeVote

WHERE choix = ‘oui’

UNION

SELECT nomSession

FROM ChoixDeVote

WHERE choix = ‘non’

)

Question 5

Répondez au QCM suivant. Entourez les bonnes réponses.
Plusieurs propositions peuvent être vraies. Toutes les questions s’inscrivent
dans le cadre du TP3-4 (partie application web).

Q5.1) Un serveur Web :

1)

peut traduire des requêtes HTTP
en requêtes SQL et vice-versa

2)

peut traduire le résultat d’une requête SQL en document
HTML

3)

est un processus qui tourne sur une plate-forme et qui
attend des requêtes HTTP

Réponse correcte : 3

 

Q5.2) Un client Web :

1)

envoie des requêtes SQL

2)

envoie des requêtes HTTP

3)

interprète graphiquement des documents HTML

4)

interagit directement avec un
SGBD

Réponses correctes : 2 et
3