Exercice championnat bda Théorie des graphes

Théorie des graphes : Exercice championnat bda

Télécharger PDF

UNIVERSITE CADI AYYAD

Facult ́e PolyDisciplinaire de Safi

Fili`ere SMIA

2019−2020Base de donn ́ees Avanc ́ees

TDs / TPs : BDA

Exercice 0

Championnat

Les ́etablissements universitaires ( EST, FPS, ENSA et ISTIA) organisent un championnat

de football. Chaque ́etablissement peut constituer une ́equipe, qu’il soit ́etudiant ou personnel.

Toutes les ́equipes se rencontrent deux fois sur l’ann ́ee (match aller et match retour, Ce

championnat s’inspire du championnat du Maroc (botola) de football : pour chaque ́equipe,

on va compter le nombre de buts marqu ́es, le nombre de buts encaiss ́es le nombre de match

gagn ́e, le nombre de match nul, le nombre de match perdu. On va aussi associer `a chaque ́equipe des points attribu ́es de la fa ̧con suivante : Lorsqu’une ́equipe gagne un match, elle

re ̧coit 3 points, lorsqu’elle fait match nul, elle re ̧coit 1 point, et bien sˆur une d ́efaite ne rapporte

aucun point :

equipe(#ideq,nom,pt,mg,mp,mn,j,be,bm)

match( ideq1#,ideq2#

,score1,score2,datematch)

1. ́

Ecrire une s ́equence seqeq pour la table equipe.

2. ́

Ecrire une proc ́edure ajoutEquipe et ajouter les ́equipes suivantes :

Num ́eroNom ́equipe1FPS 2EST3ENSA 4ISTIA

3. ́

Ecrire une proc ́edure qui permet d’ajouter un match `a la table MATCH. Cette proc ́edure

ins`ere une ligne dans MATCH et modifie aussi la table EQUIPE car elle met `a jour les

diff ́erentes colonnes qui permettront de r ́ealiser le classement. ́

Equipe 1 ́

Equipe 2Score 1Score 2Journ ́ee12101 3431113222 4223241003 23523

4. Ecrire une proc ́edure qui affiche `a chaque instant le classement des ́equipes. Le classe-

ment se fait par ordre du :

•nombre de points,

•goal average (i.e. nombre de buts marqu ́es ? nombre de buts encaiss ́es) si deux ́equipes ont le mˆeme nombre de points,

•nombre de buts marqu ́es si deux ́equipes ont le mˆeme nombre de points et le mˆeme

goal average.

5. ́

Ecrire une fonction classement qui prend en param`etre une r ́ef ́erence d’ ́equipe et qui

renvoie le classement de l’ ́equipe.

Mardi 10 mars 20201A. Bendarag

UNIVERSITE CADI AYYAD

Facult ́e PolyDisciplinaire de Safi

Fili`ere SMIA

2019−2020Base de donn ́ees Avanc ́ees

6. Refaire le probl`eme `a partir de l’exercice , en utilisant un d ́eclencheur au niveau de la

proc ́edure qui ajoute un match.

Exercice 1

Forum de discussion

On souhaite r ́ealiser une base de donn ́ees pour stocker un forum de discussion sur internet.

Les utilisateurs du forum devront ˆetre inscrits, la base de donn ́ee contiendra donc un profil

de l’utilisateur (nom, mail, date d’inscription, nombre de participation au forum). Le forum

sera divis ́e en diff ́erentes salles de discussion, chaque salle aura une th ́ematique et un de ses

utilisateurs jouera le rˆole de mod ́erateur. Un mod ́erateur sera automatiquement nomm ́e dans

une salle lorsqu’il sera l’utilisateur ayant post ́e le plus de message dans cette salle. Dans

chaque salle de discussion, les utilisateurs pourront cr ́eer de nouveaux sujets ou r ́epondre `a

des messages existants. Un message aura un auteur, une date de r ́edaction et du texte. Les

discussions auront une structure arborescentes : un message pourra avoir un unique parent

et de multiple fils. Un sujet pourra ˆetre ouvert ou clˆot (dans ce cas on ne pourra plus poster).

Consid ́erons le MLD suivant :

utilisateur(#idutil,nom,mail,inscription,nbaction) salle(#idsal,theme,idmod#,nbthread)

message(#idmsg,idparent#,idauteur#,date

envoi,idsal#,corps, etat)

1. Cr ́eer 3 s ́equences sequti, seqmes et seqsal qui incrementent respectivement les identifi-

ants des tables utilisateurs, message et salle.

2. Cr ́eez une proc ́edure permettant d’ajouter un nouvel utilisateur du forum.

3. Cr ́eer quelques utilisateurs `a l aide cette proc ́edure.

4. Cr ́eez une proc ́edure permettant d’ajouter une nouvelle salle.

5. Cr ́eer quelques salles `a l aide cette proc ́edure.

6. Cr ́eer une proc ́edure qui permet de poster un message. Elle doit mettre `a jour automa-

tiquement (si besoin) l’identifiant du mod ́erateur dans la salle o`u le message en cours a ́et ́e post ́e. (refaire le travail avec un trigger)

7. On souhaite compter le nombre d’interventions d’un utilisateur sur le forum. Cr ́eez un

trigger qui se d ́eclenche lors de l’insertion d’un message et incr ́emente automatiquement

l’attribut nb

action de l’auteur du message.

8. Cr ́eez une proc ́edure qui permet de clore un sujet. La proc ́edure doit g ́en ́erer une erreur

si l’utilisateur n’est pas mod ́erateur de la salle.

9. Cr ́eez une proc ́edure qui permet d’empˆecher toute r ́eponse `a un sujet clˆot.

10. On souhaite afficher l’arborescence des messages et de leurs r ́eponses, cr ́eer une proc ́edure

qui permet cela.

11. Comment empˆecher la suppression des messages ayant des r ́eponses ? Impl ́ementez la

solution et testez l`a.

Mardi 10 mars 20202A. Bendarag

UNIVERSITE CADI AYYAD

Facult ́e PolyDisciplinaire de Safi

Fili`ere SMIA

2019−2020Base de donn ́ees Avanc ́ees

Exercice 2

Base de donn ́ees relative `a une gestion de stock

Soit le sch ́ema relationnel suivant :

Produit (#noProduit, qte

enstock , qteminimum , qteacommander)

ACommander ( noProduit , qte)

Commande (#noCommande , dateComm , montantCommande)

LigneCommande (noCommand#, noProduit#, qte , prixunitaire)

1. Cr ́eer un d ́eclencheur qui ins ́erera automatiquement une ligne dans la table ACommander

lorsque la quantit ́e en stock tombe en dessous de la quantit ́e minimum.

2. Cr ́eer un d ́eclencheur qui lors d’un ajout ou d’une modification d’une ligne de commande

met `a jour automatiquement le montant de la commande et la quantit ́e en stock du

produit correspondant.

Exercice 3

Base de donn ́ees relative `a des commandes

Soit le sch ́ema relationnel suivant :

PRODUIT(#NP,Libelle,QteStock,SeuilReap,QteReap)

COMMANDE(NCLI#,NP#

,QteC,Etat,DateC)

FOURNISSEUR(#NF,NomF,Adresse)

CDEFOUR(NF#,NP#

,DateC,QteC)

DISPO(NP#, NF#, PU)

1. Traiter dans un programme PL/SQL les commandes des clients :

•si QteC>QteStock alors Etat=’en attente’

•si QteC<= QteStock alors Etat=’envoy ́e’ (attention il faut diminuer la QteC de

la QteStock

2. Lancer les commandes chez les fournisseurs pour les produit `a r ́eapprovisionner (chercher

le meilleur prix). Traiter le cas ou aucun fournisseur ne peut proposer le produit. Utiliser

un curseur param ́etr ́e.

Exercice 4

Elections

La FPS organise des ́elections pour ́elire le BDE. Ces ́elections se passent en deux temps.

Dans un premier temps , tous les ́etudiants de toutes les fili`eres votent pour ́elire le pr ́esident du

BDE. Dans un second temps, les ́etudiants de chaque fili`ere votent pour ́elire 3 repr ́esentants.

Pour cela le tp sera divis ́e en deux parties :

•Premi`ere partie :

Consid ́erons le MLD suivant :

Fili`ere(#idfil,nomfil)

Electeurs(#idelec,nom,pnom,ddn,nvot,nvoix,cand,idfil#)

Questions :

1. Cr ́eer deux s ́equences pour les fili`eres et pour les ́electeurs.

2. Cr ́eer une proc ́edure pour ajouter les fili`eres

3. Cr ́eer une proc ́edure pour inscrire les ́electeurs.

Mardi 10 mars 20203A. Bendarag

UNIVERSITE CADI AYYAD

Facult ́e PolyDisciplinaire de Safi

Fili`ere SMIA

2019−2020Base de donn ́ees Avanc ́ees

4. Cr ́eer une proc ́edure pour permettre `a des ́electeurs de devenir candidat

5. Cr ́eer une proc ́edure pour permettre aux ́electeurs de voter

6. Cr ́eer une proc ́edure r ́esultat qui affiche le gagnant de l’ ́election.

•Seconde partie :

Consid ́erons le MLD suivant :

Electeurs(#idelec,nom,pnom,ddn,nvot,nvoix,cand)

Questions :

1. Cr ́eer une s ́equence pour les ́electeurs.

2. Cr ́eer une proc ́edure pour inscrire les ́electeurs.

3. Cr ́eer une proc ́edure pour permettre `a des ́electeurs de devenir candidat

4. Cr ́eer une proc ́edure pour permettre aux ́electeurs de voter.

5. Cr ́eer une proc ́edure r ́esultat qui affiche les trois gagnants de l’ ́election.

Exercice 5

Biblioth`eque

personne(#numpers,nompers,prenompers)

adherent(#numpers#,mailadherent,daterenouvellement)

ouvrage(#numouvrage,numauteur#,titreouvrage)

exemplaire(#numouvrage#,#numexemplaire,empruntable)

emprunter(#numadherent#,(#numouvrage,#numexemplaire)#,#dateemprunt

,dateretour)

Nous comptons impl ́ementer les contraintes suivantes :

1. Un exemplaire non empruntable ne peut pas ˆetre emprunt ́e.

2. Un exemplaire ne peut pas ˆetre en possession de deux adh ́erents `a la fois.

3. Un adh ́erent ne peut pas ˆetre en possession de deux exemplaires diff ́erents d’un mˆeme

ouvrage.

4. Un adh ́erent ne peut pas emprunter si son abonnement n’est pas `a jour.

5. Un adh ́erent ne peut pas ˆetre en possession de plus de cinq livres.

6. Une mˆeme personne ne peut pas ˆetre `a la fois catalogu ́ee comme auteur et adh ́erent.

7. Un adh ́erent ne peut pas ˆetre en possession de plus de cinq ouvrages (vous ajouterez

pour ce faire dans la table adherent un champ contenant le nombre d’exmplaire en

circulation, vous le maintiendrez `a jour avec des triggers).

8. Un mˆeme exemplaire ne peut pas ˆetre en possession de deux adh ́erents `a la fois (vous

ajouterez pour ce faire dans la table exemplaire un champ contenant le num ́ero de

l’adh ́erent en possession de cet exemplaire, vous le maintiendrez `a jour avec des triggers).

Mardi 10 mars 20204A. Bendarag

UNIVERSITE CADI AYYAD

Facult ́e PolyDisciplinaire de Safi

Fili`ere SMIA

2019−2020Base de donn ́ees Avanc ́ees

Exercice 6

Arbre g ́en ́ealogique

La table PERSONNE, le champ pere contient le num ́ero du p`ere de la personne, le champ

mere contient le num ́ero de la m`ere de la personne.

personne(#numpers, nom, prenom, pere#, mere#)

1. ́

Ecrire une fonction demi-fr`eres prenant deux num ́eros de personnes en param`etre et

retournant vrai si et seulement si ces deux personnes ont un parent en commun.

2. ́

Ecrire une fonction cousins germains prenant deux num ́eros de personnes en param`etre

et retournant vrai si et seulement si ces deux deux individus sont cousins germains.

3. ́

Ecrire une proc ́edure r ́ecursive affichant le nom de la personne dont le num ́ero est pass ́e

en param`etre et se rappelant r ́ecursivement sur le p`ere de cette personne. Faites de

sorte `a ne pas utiliser d’exceptions.

4. ́

Ecrire une proc ́edure r ́ecursive affichant les noms des ascendants de sexe masculin de la

personne dont le num ́ero est pass ́e en param`etre.

5. ́

Ecrire une fonction r ́ecursive prenant deux num ́eros de personne A et B et retournant

vrai si A est un ascendant de B.

6. ́

Ecrire une fonction prenant en param`etre deux num ́eros de personne A et B et retour-

nant, si l’un est un ascendant de l’autre, le nombre de g ́en ́erations les s ́eparant, ?1 si

l’un n’est pas un ascendant de l’autre.

7. ́

Ecrire une requˆete retournant le(s) couples(s) personnes s ́epar ́ees par le plus de g ́en ́erations.

Mardi 10 mars 20205A. Bendarag