Vous êtes sur la page 1sur 6

Examen Base de donnée Avancée

Membre de équipe:
Seydina Issa Laye Diagne
Latyr Omar Diedhiou
Mouhamed Koné

Voici un extrait du schéma de base de


données:
• Etudiant(eid:integer, enom:string, age:integer, niveau:string, section:string)
• Cours(cnom:string, heure_cours:time, salle: string, #pid:integer)
• Inscription(#eid:integer, #cnom:string)
• Professeur(pid:integer, pnom:string, #depid:integer)

I-Les Triggers
1) Chaque Cours a un effectif maximum de 30 étudiants.

CREATE TRIGGER effectif_verification


BEFORE INSERT ON Cours FOR EACH ROW
DECLARE effectif_actuel NUMBER
BEGIN
effectif_actuel=SELECT COUNT(*)FROM Inscription
WHERE cnom=NEW.cnom
IF effectif_actuel>=30 THEN
RAISE_APPLICATION_ERROR(-20001, 'Effectif maximum atteint
pour ce cours.');
ENDIF

END
2) Seuls les enseignants du département avec depid = 33 enseignent
plus de trois cours.

CREATE TRIGGER verif_enseignant


BEFORE INSERT ON Professeur FOR EACH ROW
DECLARE nombre_cours NUMBER
BEGIN
nombre_cours=SELECT COUNT(*)FROM Professeur
WHERE pid=:NEW.pid AND depid !=33
IF nombre_cours>3 THEN
RAISE_APPLICATION_ERROR(-20002, 'Ce professeur ne peut
donner plus de 3 cours ');
ENDIF

END

3) Chaque étudiant doit être inscrit au cours "informatique théorique".

CREATE TRIGGER inscrire_infoTheorique


AFTER INSERT Inscription ON FOR EACH ROW
BEGIN
INSERT INTO Inscription(eid, cnom) VALUES (:NEW.eid,'informatique
théorique '

END

4) Aucun département ne peut avoir plus de 10 enseignants.

CREATE TRIGGER nombre_ens


BEFORE INSERT ON Professeur FOR EACH ROW
DECLARE nombre_professeur NUMBER
BEGIN
nombre_professeur=SELECT COUNT(*)FROM Professeur
WHERE depid=NEW.depid
IF nombre_professeur>=10 THEN
RAISE_APPLICATION_ERROR(-20004, 'Le departement donné est
complet ');
ENDIF

END
5) Le nombre d'élèves inscrits dans la section base de données doit être
supérieur au nombre d'élèves dans la section Mathématiques.

CREATE TRIGGER verif_etudiant_inscrit


AFTER INSERT ON Inscription
FOR EACH ROW
DECLARE
nbr_inscrit_BD NUMBER;
nbr_inscrit_math NUMBER;
BEGIN

nbr_inscrit_BD=SELECT COUNT(*)
FROM Inscription I
JOIN Etudiant E ON I.eid = E.eid
WHERE E.section = 'Base de données';

nbr_inscrit_math= SELECT COUNT(*)


FROM Inscription I
JOIN Etudiant E ON I.eid = E.eid
WHERE E.section = 'Mathématiques';

IF nbr_inscrit_BD<= nbr_inscrit_math THEN


RAISE_APPLICATION_ERROR(-20007, 'Le nombre d'élèves inscrits
dans la section "Base de données" doit être supérieur au nombre d'élèves
dans la section "Mathématiques".');
END IF;
END;

6 )Le nombre d'inscription aux cours enseignés par les enseignants du


département avec depid = 33 est supérieur au nombre d'inscriptions dans la
section mathématique.

CREATE TRIGGER verif_proff_math_BD


AFTER INSERT ON Inscription
FOR EACH ROW
DECLARE
nbr_33 NUMBER;
nbr_math NUMBER;
BEGIN

nbr_33=SELECT COUNT(*)
FROM Inscription I
JOIN Professeur P ON I.cnom = P.cnom
WHERE P.depid = 33;

nbr_math=SELECT COUNT(*)
FROM Inscription I
JOIN Etudiant E ON I.eid = E.eid
WHERE E.section = 'Mathématiques';

IF nbr_33 <= nbr_math THEN


RAISE_APPLICATION_ERROR(-20008, 'Le nombre d''inscriptions aux
cours du département 33 doit être supérieur au nombre d''inscriptions dans la
section mathématique.');
END IF;
END;

7)Les professeurs de différents départements ne peuvent pas enseigner dans


la même salle

CREATE TRIGGER verifier_class


BEFORE INSERT ON Professeur
FOR EACH ROW
DECLARE
class NUMBER;
BEGIN

class=SELECT COUNT(*)
FROM Professeur P
JOIN Cours C ON P.pid = C.pid
WHERE C.salle = :NEW.salle AND P.depid != :NEW.depid;

IF class > 0 THEN


RAISE_APPLICATION_ERROR(-20009,'Les professeurs de différents départements
ne peuvent pas enseigner dans la même salle.');
END IF;
END;

II-NO SQL
a. Créer une nouvelle base de données nommée info et vérifiez qu'elle est
sélectionnée.
use info
b. Créer une nouvelle collection nommée produits et y insérer le document suivant:
db.produits.insertOne({
'nom':'Accer',
'fabricant':'Acer',
'prix': 650000,
'ultrabook':true
)}

c.Ajout d’autres documents:


db.produits.insertMany([{
'nom':'Lenovo ideapad',
'fabricant': 'Lenovo',
'prix':400000,
'ultrabook':true

},
{
'nom':'Macbook Air',
'fabricant':'Apple',
'prix':300000,
'ultrabook':false
},
{
'nom':'Thinkpad X230 ',
'fabricant':'Lenovo',
'prix':530000,
'ultrabook':false
}])

d.Récupérer tous les produit


db.produits.find()

e. Récupérer le premier produit.


db.produits.findOne()

f. Trouver l’id du Thinkpad X230 et faire la requête pour récupérer ce produit avec
son id.
db.produits.find({nom:'ThinkpadX230'})

g. θRécupérer les produits dont le prix est supérieur à 13723 DA.


db.produits.find({prix: {$gt:13723}})
h. Récupérer le premier produit ayant le champ ultrabook à true.
db.produits.findOne({ultrabook:'true'})

i.On affiche ici les produits dans l’ordre croissant de leur prix
db.produits.find().sort({ prix: 1 })

j. Récupérer le premier produit dont le nom contient Macbook


db.produits.findOne({nom:'Macbook'})

k. Mise à jour d’un document dans une collection Dans cet exemple on modifié le
prix de produit de nom Macbook Air.
db.produits.updateOne({nom:'Macbook Air',{$set:{prix:70000})

l. Supprimer les deux produits dont le fabricant est Apple


db.produits.deleteMany({marque:'Apple'})

Vous aimerez peut-être aussi