Gestion de bibliothèques

[30 min]

Soit la base relationnelle suivante permettant de gérer des bibliothèques.

1
Livre (#LivreID, Titre, NomEditeur=>Editeur) avec Titre clé
2
Livre_Auteur (#LivreID=>Livre, #NomAuteur)
3
Editeur (#NomEditeur, Adresse, Telephone)
4
Livre_Exemplaires (#LivreID=>Livre, #BiblioID=>Bibliotheque, NbExemplaires)
5
Bibliotheque (#BiblioID, Nom, Adresse) avec Nom clé
6
Livre_Emprunte (#LivreID=>livre, #BiblioID=>Bibliotheque, #NumCard=>Emprunteur, DateEmprunt, DateRetour)
7
Emprunteur (#NumCard, Nom, Adresse, Téléphone)

Question

Écrivez en algèbre relationnelle la requête permettant de renvoyer le nombre d'exemplaires du livre intitulé "Les cinq disciplines" qui est détenu par la bibliothèque qui a comme nom "Paris".

Solution

1
R1=restriction(livre,titre="les cinq disciplines")
2
R2=jointure(R1,Livre_ Exemplaires, R1.LivreID=Livre_ Exemplaires.livreID)
3
R3=jointure(R2,biblioteque, R2.biblioID=biblioteque.biblioID)
4
R4=restriction(R3.nom="paris")
5
R5=Projection(R4,NbExemplaires)

Question

Écrivez en en algèbre relationnelle la requête permettant de renvoyer pour chaque livre écrit par "Douglas Kennedy" le nombre d'exemplaires détenus par la bibliothèque "Paris"

Solution

1
R1=jointure(Livre_Auteur,Livre_ Exemplaires, Livre_Auteur.LivreID=Livre_ Exemplaires.livreID)
2
R2=jointure(R1,biblioteque, R1.biblioID=biblioteque.biblioID)
3
R3=restriction(R2,R2.nom="paris" and R2.NomAuteur="Douglas Kennedy")
4
R4=Projection(R4,NbExemplaires)

Question

Écrivez en SQL la requête qui permet de renvoyer le titre du livre, le nom de l'emprunteur, et l'adresse de l'emprunteur pour chaque livre qui est prêté par la bibliothèque "Paris" et dont la date de retour est aujourd'hui.

Indice

Utiliser une fonction today() pour renvoyer la date du jour (par exemple, le 15 mai 2013, today()='2013/05/14').

Solution

1
SELECT L.titre, E.nom, E.adresse
2
FROM livre l, Livre_Emprunte LE, Emprenteur E, Biblioteque B
3
WHERE l.LivreID=LE.LivreID
4
AND LE.biblioID=B.biblioID 
5
AND LE.NumCard=E.NumCard 
6
AND LE.DateRetour=today() 
7
AND B.nom="Paris"

Question

Écrivez en SQL la requête qui permet de récupérer les noms de tous les emprunteurs qui ont rendu leurs livres empruntés.

Solution

Deux hypothèses sont acceptées :

  1. Soit on considère que DateRetour est la date ou l'emprunteur doit rendre le livre

  2. Soit on considère que l'emprunteur qui a rendu le livre est celui qui n'a pas de valeur

1
SELECT E.nom
2
FROM Emprunteur E,Livre_Emprunte LE
3
WHERE LE.NumCard=E.NumCard 
4
AND LE.DateRetour < today();
1
SELECT Nom
2
FROM Emprunteur
3
WHERE NumCard NOT IN
4
(SELECT NumCard FROM Livre_Emprunte)

Question

Écrivez en SQL la requête permettant de récupérer les noms, adresses et nombre de livres empruntés pour chaque emprunteur qui a emprunté plus que 5 livres.

Solution

1
SELECT E.Nom, E.Adresse, count(le.livreID)
2
FROM Livre_Emprunte LE, Emprunteur E
3
WHERE LE.NumCard=E.NumCard
4
GROUP BY E.Nom, E.Adresse
5
HAVING COUNT(LE.livreID) > 5