Cyber-Café - Université Paris 1 Panthéon

Transcription

Cyber-Café - Université Paris 1 Panthéon
Université Paris 1 – Panthéon Sorbonne
UFR 06
Informatique – Base des données
Cyber-Café
Un cyber-café parisien met à la disposition de leurs clients une série de 5 salles équipées des
différentes machines. Chaque client inscrit au cyber-café peut utiliser une de ces machines ou
utiliser le réseau sans-fil avec son propre ordinateur portable. Par ailleurs, le cyber café propose à
ses clients un service de « forum de discussion », à travers duquel les clients peuvent s’abonner aux
forums de leur choix et y contribuer avec des messages. La base de données ci-dessous regroupe
les informations concernant les clients du cyber-café ainsi que celles relatives aux forums et aux
machines dont dispose le cyber-café. Chaque table a un préfixe qui lui est propre et qui identifie ses
attributs (U pour la table clients, F pour forum, I pour inscription, MS pour la table messages, MC
pour la table machines et US pour la table usages). La table inscription indique les abonnements des
clients aux forums, tandis que la table messages indique les messages envoyés par les clients à ces
forums. La table usage indique l’usage des machines installées au cyber-café par les utilisateurs
enregistrés.
Base des données :
•
•
•
•
•
•
CLIENTS (UID, Unom, Uprenom, Umail, Uorganisation, Ugenre, Uage)
FORUM (FID, Fnom, Fsujet, Fdatecreation)
INSCRIPTION (UID, FID, Idateinscription)
MESSAGES (MSID, UID, FID, MSdatemessage, MSheuremessage, MStitre, MStexte)
MACHINES (MCIP, MCnom, MCsalle)
USAGE (MCIP, UID, USdatausage, USheuredebut, USheurefin)
Type des données :
UID : integer
Ugenre : char (‘f’ ou ‘m’)
Unom : varchar
Uage : integer
Umail : varchar
Uorganisation : varchar
FID : integer
Fnom : varchar
Fsujet : varchar
Fdatecreation : date
MSID : integer
MSheuremessage : time
MStitre : varchar
MStexte : varchr
MSdatemessage : date
MCIP : varchar
MCnom : varchar
MCsalle : integer
USdateusage : date
USheurefin : time
USheuredebut : time
Idateinscription : date
Université Paris 1 – Panthéon Sorbonne
UFR 06
Informatique – Base des données
On vous demande de répondre aux questions suivantes en utilisant le langage
algébrique et SQL :
1. Indiquer les noms des clients ayant envoyé un message à chaque forum auquel ils sont
abonnés.
2. Indiquer le sujet des forums créés depuis 2008 qui ont des messages de tous leurs clients
inscrits (clients abonnés au forum).
3. Indiquer les machines (IP, nom et salle) qui n’ont pas été utilisées ni en janvier 2009, ni en
mars 2009.
4. Indiquer la moyenne d’heures d’usage des machines de la salle 200.
5. Indiquer les codes clients (UID) de ceux qui ont envoyé des messages uniquement aux
forums dont le sujet est « foot » ou dont le sujet est « rugby ».
6. Indiquer les sujets et le nombre des messages des forums comptant plus de messages que la
moyenne.
7. Indiquer les machines et les salles qui ont été utilisé le 02/05/09 mais pas le 03/05/09.
8. Indiquer combien de clients de sexe féminin de 25 ans ou plus ont utilisé une des machines
situées au cyber-café.
9. Indiquer le nom des clients inscrits à tous les forums créés depuis 2008.
10. Indiquer les clients (nom, prénom, age…) inscrits aux forums dont le sujet est « sport » mais
qui ne sont pas inscrits aux forums dont le sujet est « foot ».
11. Indiquer les sujets des forums qui ne contiennent aucun message ni en 2008, ni en 2009.
12. Indiquer les codes clients (UID) et le nombre des messages des tous les clients qui ont
envoyé aux forums plus de messages que la moyenne.
13. Indiquer les noms des clients qui ont utilisé les machines de la salle 200 le samedi
02/05/2009 ainsi que les adresses IP (MCIP) des machines utilisées.
14. Indiquer le nom et le prénom du client le plus âgé parmi les clients inscrits au cyber-café.
15. Indiquer le client qui a utilisé le plus les machines du cyber-café.
Université Paris 1 – Panthéon Sorbonne
UFR 06
Informatique – Base des données
Correction
1. Indiquer les noms des clients ayant envoyé un message à chaque forum auquel ils sont
abonnés.
Langage algébrique :
SQL :
÷
Unom,
UID, FID
UID, FID
Inscription
UID
Clients Messages
SELECT c.Unom
FROM clients c
WHERE NOT EXITS
(SELECT *
FROM inscription i
WHERE i.UID=c.UID
and NOT EXITS
(SELECT *
FROM message m
WHERE m.UID=i.UID and
m.FID=i.FID and
m.UID=c.UID)) ;
2. Indiquer le sujet des forums créés depuis 2008 qui ont des messages de tous leurs clients
inscrits (clients abonnés au forum).
Langage algébrique :
SQL :
÷
Fsujet,
UID, FID
FID
Messages
Fdatecreation
>=
01/01/2008
Forum
UID, FID
Inscription
SELECT f.fsujet
FROM forum f
WHERE f.Fdatecreation>=#01/01/2008# and
NOT EXITS
(SELECT *
FROM inscription i
WHERE i.FID=f.FID
and NOT EXITS
(SELECT *
FROM message m
WHERE m.UID=i.UID and
m.FID=i.FID and
m.FID=f.FID)) ;
Université Paris 1 – Panthéon Sorbonne
UFR 06
Informatique – Base des données
3. Indiquer les machines (IP, nom et salle) qui n’ont pas été utilisées ni en janvier 2009, ni en
mars 2009.
Langage algébrique :
Machine
MCIP
∪
MCIP
Machines
MCIP
USdateusage
≥ 01/01/2009 ∧
USdateusage
≤ 31/01/2009
Usage
MCIP
USdateusage
≥ 01/03/2009 ∧
USdateusage
≤ 31/03/2009
Usage
SQL :
SELECT m.*
FROM machine m
WHERE m.MCIP NOT IN
(SELECT u.MCIP
FROM usage u
WHERE (u.USdateusage BETWEEN #01/01/2009# AND #31/01/2009#) OR
(u.USdateusage BETWEEN #01/03/2009# AND #31/03/2009#) );
4. Indiquer la moyenne d’heures d’usage des machines de la salle 200.
Langage algébrique : Impossible de réaliser cette requête en langage algébrique en raison de
l’usage de l’agrégat « avg », qui n’a pas d’équivalent dans ce langage.
SQL :
SELECT AVG(u.heurefin-u.heuredebut)
FROM usage u, machine m
WHERE m.salle=200 and m.ip=u.ip;
Université Paris 1 – Panthéon Sorbonne
UFR 06
Informatique – Base des données
5. Indiquer les codes clients (UID) de ceux qui ont envoyé des messages uniquement aux
forums dont le sujet est « foot » ou dont le sujet est « rugby ».
Langage algébrique :
∪
-
-
UID
UID
FID
FID
Messages
Fsujet=foot
Forum
UID
UID
FID
FID
Messages
Fsujet≠foot
Forum
Messages
Fsujet=rugby
Forum
SQL :
( SELECT m.UID
FROM message m, forum f
WHERE m.FID=f.FID and f.Fsujet="foot" and m.UID NOT IN
( SELECT m2.UID
FROM message m2, forum f2
WHERE m2.FID=f2.FID and f2.Fsujet<>"foot") )
UNION
( SELECT m.UID
FROM message m, forum f
WHERE m.FID=f.FID and f.Fsujet="rugby" and m.UID NOT IN
( SELECT m2.UID
FROM message m2, forum f2
WHERE m2.FID=f2.FID and f2.Fsujet<>"rugby") ) ;
Messages
Fsujet≠rugby
Forum
Université Paris 1 – Panthéon Sorbonne
UFR 06
Informatique – Base des données
6. Indiquer les sujets et le nombre des messages des forums comptant plus de messages que
la moyenne.
Langage algébrique : Impossible de réaliser cette requête en langage algébrique en raison de
l’usage des agrégats « count » et « avg », qui n’ont pas d’équivalent dans ce langage.
SQL :
SELECT F.sujet, count(m.mid) AS NBMSG
FROM Messages AS m, forum AS f
WHERE m.fid=f.fid
GROUP BY f.sujet
HAVING count(m.mid) > ( SELECT AVG(m2.fid) FROM Messages m2 );
7. Indiquer les machines et les salles qui ont été utilisé le 02/05/09 mais pas le 03/05/09.
Langage algébrique :
SQL :
MCIP
MCIP
USdateusage
= 02/05/09
Usage
Machine
MCIP
SELECT m.*
FROM machine m, usage u
WHERE m.MCIP=u.MCIP and
u.USdateusage=#02/05/2009# and
m.MCIP NOT IN
(SELECT u2.MCIP
FROM usage u2
WHERE u2.USdateusage=#03/05/2009#) ;
USdateusage
= 03/05/09
Usage
8. Indiquer combien de clients de sexe féminin de 25 ans ou plus ont utilisé une des machines
situées au cyber-café.
Langage algébrique : Impossible de réaliser cette requête en langage algébrique en raison de
l’usage de l’agrégat « count », qui n’a pas d’équivalent dans ce langage.
SQL :
Université Paris 1 – Panthéon Sorbonne
UFR 06
Informatique – Base des données
SELECT count(*)
FROM clients c, usage u
WHERE c.Ugenre=’F’ and c.Uage>=25 and u.UID=c.UID ;
9. Indiquer le nom des clients inscrits à tous les forums créés depuis 2008.
Langage algébrique :
SQL :
Unom
UID
÷
UID, FID
Inscription
Clients
FID
SELECT c.Unom
FROM clients c
WHERE NOT EXITS
(SELECT *
FROM forum f
WHERE f.Fdatecreation>=#01/01/2008#
and NOT EXITS
(SELECT *
FROM inscription i
WHERE i.UID=c.UID and i.FID=f.FID)) ;
Fdatecreation
>=
01/01/2008
Forum
10. Indiquer les clients (nom, prénom, age…) inscrits aux forums dont le sujet est « sport »
mais qui ne sont pas inscrits aux forums dont le sujet est « foot ».
SQL :
SELECT c.*
FROM clients c, forum f, inscription i
WHERE c.UID=i.UID and f.FID=i.FID and f.Fsujet="sport" and c.UID NOT IN
(SELECT i2.UID
FROM forum f2, inscription i2
WHERE f2.FID=i2.FID and f2.Fsujet="foot")
Université Paris 1 – Panthéon Sorbonne
UFR 06
Informatique – Base des données
ou encore (réponse alternative)
(SELECT c.*
FROM clients c, forum f, inscription i
WHERE c.UID=i.UID and f.FID=i.FID and f.Fsujet="sport")
EXCEPT
(SELECT c.*
FROM clients c, forum f, inscription i
WHERE c.UID=i.UID and f.FID=i.FID and f.Fsujet="foot") ;
Langage algébrique :
Clients
UID
UID
UID
FID
FID
Fsujet =
"sport"
Fsujet
= "foot"
Inscription
Forum
Forum
11. Indiquer les sujets des forums qui ne contiennent aucun message ni en 2008, ni en 2009.
SQL :
SELECT f.Fsujet
FROM forum f
WHERE f.FID NOT IN
(SELECT f1.FID
FROM forum f1, message m1, message m2
WHERE f1.FID=m1.FID and
m1.MSdatemessage BETWEEN #01/01/2008# AND #31/12/2008#
f1.FID=m2.FID and
m2.MSdatemessage BETWEEN #01/01/2009# AND #31/12/2009#) ;
Université Paris 1 – Panthéon Sorbonne
UFR 06
Informatique – Base des données
Langage algébrique :
Fsujet
Forum
FID
∩
-
FID
Forum
FID
FID
MSdatemessage
≥ 01/01/2008 ∧
MSdatemessage
≤ 31/12/2008
Message
FID
MSdatemessage
≥ 01/01/2009 ∧
MSdatemessage
≤ 31/12/2009
Forum
Message
12. Indiquer les codes clients (UID) et le nombre des messages des tous les clients qui ont
envoyé aux forums plus de messages que la moyenne.
Langage algébrique : Impossible de réaliser cette requête en langage algébrique en raison de
l’usage des agrégats « count » et « avg », pour lesquels il n’y a pas d’équivalent dans ce
langage.
SQL :
SELECT c.UID, count(m.MSID)
FROM clients c, messages m
WHERE m.UID=c.UID
GROUP BY c.UID
HAVING count(m.MSID) > (SELECT AVG(m2.UD) FROM messages m2);
Université Paris 1 – Panthéon Sorbonne
UFR 06
Informatique – Base des données
13. Indiquer les noms des clients qui ont utilisé les machines de la salle 200 le samedi
02/05/2009 ainsi que les adresses IP (MCIP) des machines utilisées.
Langage algébrique :
SQL :
SELECT c.*
FROM clients c, machine m, usage u
WHERE c.UID=u.UID and m.MCIP=u.MCIP and
m.salle=200 and u.USdateusage=#02/05/2009# ;
Unom, MCIP
UID
Clients
MCIP
USdateusage
= 02/05/2009
Usage
MCsalle
=200
Machine
14. Indiquer le nom et le prénom du client le plus âgé parmi les clients inscrits au cyber-café.
Langage algébrique :
SQL :
SELECT c.Unom
FROM clients c
WHERE c.Uage = (SELECT MAX(Uage)
FROM clients) ;
Unom
UID
-
Clients
UID
UID1
Clients
Uage1
< Uage2
Clients1
Clients2
Université Paris 1 – Panthéon Sorbonne
UFR 06
Informatique – Base des données
15. Indiquer le client qui a utilisé le plus les machines du cyber-café.
Langage algébrique : Impossible de réaliser cette requête en langage algébrique en raison de
l’usage des agrégats « count » et « sum », pour lesquels il n’y a pas d’équivalent dans ce
langage.
SQL :
SELECT c.nom, SUM(u.heurefin-u.heuredebut)
FROM clients c, usage u
WHERE c.UID=u.UID
GROUP BY c.nom
HAVING SUM(u.heurefin-u.heuredebut) >= (SELECT MAX(u2.heurefin-u2.heuredebut)
FROM clients c2, usage u2
WHERE c2.UID=u2.UID);