Correction Examen BD s1 19 - 20

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 4

Examen

Module : Bases de Données

Classes : DSI 2.1, RSI 2.1 Documents autorisés : NON

Date : Janvier/2020 Nb de pages : 2

On est dans le cadre de l’école et on se propose d’étudier la base de données de la bibliothèque.


Dans cette base on enregistre des livres (table livre), des abonnées qui sont des étudiants et des
enseignants (table abonnee). Ces abonnées peuvent emprunter des livres et doivent les retourner aussi à
des dates données.

Le schéma relationnel de la base est donné par :

abonnee (num_abonnee, nom, prenom, email , type_abonnee)

livre (cote, titre, nb_livre_total, nb_livre_disponible)

emprunter (#num_abonnee, #cote, date_emprunt, date_retour)

NB : Dans la relation abonnee le champ type_abonnee détermine si l’abonné est un étudiant ou un


enseignant.

Dans la relation livre, pour chaque livre on a un nombre d’exemplaire (le champ nb_livre_total) après
chaque opération d’emprunt ce nombre sera diminué de 1 pour indiquer le nombre d’exemplaire encore
disponibles dans la bibliothèque (le champ nb_livre_disponible), lorsqu’un livre est retourné (on saisit la
date retour relative à l’opération d’emprunt dans la table emprunter) le nombre d’exemplaire encore
disponibles sera augmenté de 1.

Le nombre de livres empruntés en une même période pour un étudiant est de 2.

Le nombre de livres empruntés en une même période pour un enseignant est de 5.

La durée de d’emprunt d’un livre pour un enseignant est de 7 jours.

La durée de d’emprunt d’un livre pour un étudiant est de 3 jours.

La valeur de la date système sous oracle est : sysdate.

Les champs soulignés présentent des clés primaires et ceux précédés par un # présentent des clés
étrangères.
Travail à faire
Partie I
1. Créer les tables (abonnee, livre, emprunter). (3Pts)
create table abonnee
(
num_abonnee number(5),
nom varchar2(30),
prenom varchar2(30),
email varchar2(30),
type_abonnee varchar2(30),
constraint pk_abonnee primary key (num_abonnee),
constraint ch_abonnee_type check (type_abonnee in('etudiant','enseignant'))
);

create table livre


(
cote varchar2(10),
titre varchar2(100),
nb_livre_total number(2),
nb_livre_disponible number(2),
constraint pk_livre primary key (cote)
);

create table emprunter


(
num_abonnee number(5),
cote varchar2(10),
date_emprunt date,
date_retour date,
constraint pk_emprunter primary key (num_abonnee,cote,date_emprunt),
constraint fk_emprunter_abonnee foreign key (num_abonnee) references abonnee (num_abonnee),
constraint fk_emprunter_livre foreign key (cote) references livre (cote)
);

2. Ajouter l’attribut tel à la table abonnee (type varchar(6)). (1Pt)


alter table abonnee add tel varchar2(6);
3. Modifier l’attribut tel (type varchar(8)). (1Pt)
alter table abonnee modify tel varchar2(8);

4. Incrémenter le nb_livre_total de 2 pour tous les livres. (1Pt)


update livre set nb_livre_total = nb_livre_total + 2;

5. Incrémenter le nb_livre_total de 4 pour le livre de cote ‘C_433’. (1Pt)


update livre set nb_livre_total = nb_livre_total + 4 where cote = ‘C_433’ ;

6. Supprimer tous les emprunts effectués en 2018 (date_ retour en 2018). (1Pt)
Delete from emprunter where date_ retour >= ‘01/01/2018’ and date_ retour <= ‘31/12/2018’ ;
Ou bien
Delete from emprunter where date_ retour between ‘01/01/2018’ and ‘31/12/2018’;

7. Supprimer tous les emprunts achevés (date_ retour non vide). (0,5Pt)
Delete from emprunter where date_ retour is not NULL ;

8. Supprimer l’attribut tel de la table abonnee. (1Pt)


Alter table abonnee drop column tel ;

9. Supprimer toutes les tables. (0,5Pt)


Drop table emprunter ;
Drop table abonnee ;
Drop table livre ;

Partie II
1. Afficher le nom, le prénom des abonnées qui ont emprunté le livre dont le cote est ‘C_433’ plus que
dix fois (2Pts).
Select nom, prenom
From abonnee a, emprunter e
Where a.num_abonnee = e.num_abonnee
And cote = ‘C_433’
Group by a.num_abonnee, nom, prenom
Having count(*) > 10;
2. Afficher les cotes des livres qui ont été empruntés plus que dix fois par l’abonné numéro 146 (2Pts).
Select cote
From emprunter e
Where num_abonnee = 146
Group by cote
Having count(*) > 10;

3. Afficher nom et le prénom des abonnées (étudiants) qui ont effectué des retards (2Pts).
Select nom, prenom
From abonnee a, emprunter e
Where a.num_abonnee = e.num_abonnee
And type_abonnee = 'etudiant'
And date_retour is NULL
And sysdate > date_emprunt +3 ;

4. Afficher nom et prénom des abonnées (enseignants) qui ont effectué des retards (2Pts).
Select nom, prenom
From abonnee a, emprunter e
Where a.num_abonnee = e.num_abonnee
And type_abonnee = 'enseignant'
And date_retour is NULL
And sysdate > date_emprunt +7 ;

5. Afficher nom et prénom des abonnées (enseignants) qui ont emprunté tous les livres (2Pts).
Select nom, prenom
From abonnee a, emprunter e
Where a.num_abonnee = e.num_abonnee
And type_abonnee = 'enseignant'
Group by a.num_abonnee , nom, prenom
Having count(distinct cote) = (select count(*) from livre);

NB : Un abonné est en retard si la date du jour (sysdate) est supérieure à la date d’emprunt plus la durée
d’emprunt et le champ date retour est encore vide (NULL).

Bon Travail

You might also like