Université de M’sila Année Universitaire : 2009/2010 Faculté des sciences de l’

Université de M’sila Année Universitaire : 2009/2010 Faculté des sciences de l’ingénieur 30 Mai 2010 durée : 1h et 30 Spécialité : Master1 Module : BDDA Corrigé-type Questions de cours ( 5 pts) : consultez le support de cours. Exercice 1 :base de données temporelles( 5pts): 1- Donner le nom, prénom et adresse des employés qui dirigent actuellement un projet qui est actif et dont la fin du projet arrive avant le 31 décembre 2010. select nom, prénom, adresse from Employé e, Dirige d, Projet p where e.#employé = d.#employé and d.#projet = p.#projet and p.fromDate <= sysdate and sysdate < p.toDate and p.toDate < 31-12-2010; 2- Donner les numéros des projets localisés à M’sila tels que tous les employés qui y ont travaillé pendant l'année 2006 le faisaient à 100%. select p.#projet from Projet p where p.localisation = 'Msila’ and not exists ( select * from Travaille t where p.#projet = t.#projet and t.fromDate => 1/1/2006 and 1/1/2007 > t.toDate and t.pourcentage <> 100 ); 3- Donner le numéro des projets dans lesquels chaque employé qui y a travaillé n'a jamais diminué son pourcentage. select #projet from Projet P where not exists ( select * from Travaille T1, Travaille T2 where T1.#employé= T2.#employé and T1.#projet = P.#projet and T2.#projet = P.#projet and T1.toDate < T2.fromDate and T1.pourcentage > T2.pourcentage ) Exercice 2 :base de données Active( 5pts): 1- vérifier que le labo d’un projet existe bien. CREATE TRIGGER verification AFTER INSERT OR UPDATE OF numlabo ON Labo-projet FOR EACH ROW WHEN (new.numlabo is not null) DECLARE num integer; BEGIN num:=0; SELECT numlabo INTO num FROM laboratoire WHERE numlabo=:new.numlabo; IF (num=0) THEN raise_application_error(-20501, 'N° de labo inexistant'); END IF; END; 2- un doctorant doit travailler dans un projet dirigé par son encadreur. CREATE TRIGGER doct-project AFTER INSERT OR UPDATE OF projet ON doctorant FOR EACH ROW WHEN (new.numprojet is not null) DECLARE num integer; BEGIN num:=0; SELECT numprof INTO num FROM projet WHERE numprojet=:new.numprojet; IF num= 0 then raise_application_error(-20501, ‘ce projet n’existe pas’) ELSE IF (num<>:new.numprof) THEN raise_application_error(-20501, ‘ce doctorant doit travailler dans le meme projet de son encadreur’); END IF; ENDIF; END; 3- La somme des coûts des projets d’un labo ne dépasse pas le budget de ce dernier. CREATE TRIGGER budget BEFORE INSERT OR UPDATE OF projet ON labo-projet FOR EACH ROW WHEN (new.numprojet is not null) DECLARE Somme, lbudget float; BEGIN SELECT sum (P.cout * LP.pourcentage) INTO somme FROM projet P , labo-projet LP WHERE P.numprojet= LP.numprojet and P.numprojet=: new.numprojet and LP.numlabo=:new.labo; SELECT budget into lbudget FROM laboratoire L where L. numlabo= :new.numlabo; IF somme> lbudget then raise_application_error(-20501, ‘le budget est dépassé’); END IF; END; Exercice3 : Base de données Objet ( 5pts) : 1-Donner le schéma de classes ODMG correspond au schéma relationnel ci-dessus Class Professeur Extent Les professeurs Key numprof { Attribute numprof : Int ; Attribute noms : String ; Relationship encadrer : List doctorant Inverse doctorant.encadreur ; Relationship diriger : List projet Inverse projet.directeur ; Relationship participer : laboratoire Inverse laboratoire.membre ; Relationship chef : laboratoire Inverse laboratoire.superviseur ; } } Class doctorant Extent Lesdoctorants Key NumEt { Attribute NumEt: Int ; Attribute Nom : String ; Relationship encadreur : professeursInverse Professeur.encadrer ; Relationship participant : projet Inverse projet.membredoc ; } Class laboratoire Extent Les laboratoires Key numlabo { Attribute numlabo : Int ; Attribute nomlabo : String ; Attribute budget : float ; Relationship membre : List professeur Inverse professeur.participer ; Relationship superviseur : professeur Inverse professeur.chef ; Relationship realiser : List labo-projet Inverse labo-projet .labo ; } Class projet Extent Lesprojets Key numprojet { Attribute numprojet : Int ; Attribute titre : String ; Attribute coût : float ; Relationship participe : List labo-projet Inverse l labo-projet .prj ; Relationship membredoc : professeur Inverse doctorant.participant ; Relationship directeur : professeur Inverse professeur.diriger ; } Class labo-projet Extent Lesprojets-labs { Attribute pourcentage : INT ; Relationship labo : laboratoire Inverse labo.realiser ; Relationship prj : projet Inverse projet.participe ;} 2.a-Donnez les titres de projets réalisés par le laboratoire ‘XXX’. SELECT LP.Prj.titre FROM LP in LesProjets-Labs Where LP.Labo.nomlabo=’XXX’; 2.b-Donnez les professeurs qui ne supervisent que les projets réalisés 100 % par son laboratoire . b.1- SELECT P.directeur FROM P in Projet WHERE for all x in P.Participe: X.pourcentage = 100 and X.labo=P.directeur.labo; ou b.2-SELECT P.directeur FROM P in Projet WHERE not exist ( select X from X in lesprojets-abs where X.prj=p and X.labo<> P.directeur.labo); uploads/Ingenierie_Lourd/ corrigetype.pdf

  • 23
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager