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);