Exercice championnat bda Théorie des graphes

Théorie des graphes : Exercice championnat bda

Télécharger PDF

Exercice 0 : Championnat de Football

Université Cadi Ayyad

Faculté Polydisciplinaire de Safi

Filière SMIA

2019−2020 : Base de données avancées

1. Séquence pour la table équipe

Créer une séquence seqeq pour générer automatiquement les identifiants des équipes.

2. Procédure ajoutEquipe

Écrire une procédure ajoutEquipe permettant d'insérer les équipes suivantes :

  • Numéro 1 : FPS
  • Numéro 2 : EST
  • Numéro 3 : ENSA
  • Numéro 4 : ISTIA

3. Procédure ajoutMatch

Écrire une procédure pour ajouter un match à la table MATCH, en mettant à jour les statistiques des équipes (buts marqués, buts encaissés, matchs gagnés, nuls, perdus) et leurs points.

Exemple de données à insérer :

  • Équipe 1 (FPS) vs Équipe 2 (EST) : Score 1-2, Journée 1
  • Équipe 3 (ENSA) vs Équipe 4 (ISTIA) : Score 3-4, Journée 1
  • Équipe 2 (EST) vs Équipe 4 (ISTIA) : Score 2-2, Journée 2
  • Équipe 1 (FPS) vs Équipe 3 (ENSA) : Score 1-3, Journée 2
  • Équipe 2 (EST) vs Équipe 3 (ENSA) : Score 2-3, Journée 3
  • Équipe 1 (FPS) vs Équipe 4 (ISTIA) : Score 0-0, Journée 3

4. Procédure affichageClassement

Écrire une procédure qui affiche le classement des équipes selon :

  • Nombre de points (3 pour une victoire, 1 pour un nul, 0 pour une défaite)
  • Goal average (buts marqués / buts encaissés)
  • Nombre de buts marqués

5. Fonction classement

Écrire une fonction classement prenant en paramètre un identifiant d'équipe et retournant sa position dans le classement.

6. Déclencheur pour l'ajout d'un match

Refaire l'exercice en utilisant un déclencheur (TRIGGER) pour automatiser la mise à jour des statistiques des équipes lors de l'ajout d'un match.

Exercice 1 : Forum de Discussion

1. Séquences pour les tables

Créer trois séquences :

  • sequti pour les identifiants des utilisateurs
  • seqmes pour les identifiants des messages
  • seqsal pour les identifiants des salles

2. Procédure ajoutUtilisateur

Écrire une procédure pour ajouter un nouvel utilisateur avec les champs : nom, mail, date_inscription, nb_action.

3. Ajout d'utilisateurs

Utiliser la procédure ajoutUtilisateur pour insérer des utilisateurs fictifs (exemples : "Jean Dupont", "jdupont@example.com", etc.).

4. Procédure ajoutSalle

Écrire une procédure pour ajouter une nouvelle salle avec les champs : theme, id_mod, nb_thread.

5. Ajout de salles

Utiliser la procédure ajoutSalle pour créer des salles fictives (exemples : "Informatique", "Gestion", etc.).

6. Procédure posterMessage

Écrire une procédure pour poster un message avec les champs : id_parent, id_auteur, date_envoi, id_salle, corps, etat.

Mettre à jour automatiquement l'identifiant du modérateur si le message est le plus récent dans la salle.

7. Déclencheur pour nb_action

Créer un déclencheur (TRIGGER) qui incrémente automatiquement nb_action pour l'auteur d'un message lors de son insertion.

8. Procédure cloreSujet

Écrire une procédure pour clore un sujet, générant une erreur si l'utilisateur n'est pas modérateur de la salle.

9. Procédure bloquerReponse

Écrire une procédure pour empêcher toute réponse à un sujet déjà clos.

10. Affichage de l'arborescence des messages

Créer une procédure pour afficher la structure hiérarchique des messages (parents et fils).

11. Protection contre la suppression des messages avec réponses

Implémenter une solution (déclencheur ou contrainte) pour empêcher la suppression d'un message ayant des réponses.

Exercice 2 : Gestion de Stock

1. Déclencheur pour ACommander

Créer un déclencheur (TRIGGER) qui insère une ligne dans ACommander lorsque la quantité en stock (qte_enstock) d'un produit tombe en dessous du seuil minimum (qteminimum).

2. Déclencheur pour Commande et LigneCommande

Créer un déclencheur (TRIGGER) qui met à jour automatiquement :

  • Le montant total de la commande (montantCommande) lors de l'ajout ou modification d'une ligne de commande
  • La quantité en stock (qte_enstock) du produit correspondant

Exercice 3 : Commandes de Produits

1. Traitement des commandes clients

Écrire un programme PL/SQL pour gérer les commandes clients :

  • Si QteC > QteStock, alors Etat = "en attente"
  • Si QteCQteStock, alors Etat = "envoyée" et diminuer QteStock de QteC

2. Lancement des commandes fournisseurs

Écrire un programme PL/SQL pour lancer les commandes chez les fournisseurs pour les produits à réapprovisionner, en utilisant un curseur paramétré pour trouver le meilleur prix.

Gérer le cas où aucun fournisseur ne peut proposer le produit.

Exercice 4 : Élections du BDE

Première Partie : Élection du Président du BDE

Considérer le schéma relationnel :

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

1. Séquences pour Filiere et Electeurs

Créer deux séquences : une pour les identifiants des filières et une pour les identifiants des électeurs.

2. Procédure ajoutFiliere

Écrire une procédure pour ajouter une nouvelle filière avec les champs nomfil.

3. Procédure inscrireElecteur

Écrire une procédure pour inscrire un nouvel électeur avec les champs nom, pnom, ddn, idfil.

4. Procédure devenirCandidat

Écrire une procédure pour permettre à un électeur de devenir candidat.

5. Procédure voterPresident

Écrire une procédure pour permettre à un électeur de voter pour le président du BDE.

6. Procédure resultatPresident

Écrire une procédure pour afficher le gagnant de l'élection du président du BDE.

Seconde Partie : Élection des Représentants

Considérer le schéma relationnel :

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

1. Séquence pour Electeurs

Créer une séquence pour générer automatiquement les identifiants des électeurs.

2. Procédure inscrireElecteur

Écrire une procédure pour inscrire un nouvel électeur avec les champs nom, pnom, ddn.

3. Procédure devenirCandidat

Écrire une procédure pour permettre à un électeur de devenir candidat.

4. Procédure voterRepresentants

Écrire une procédure pour permettre à un électeur de voter pour 3 représentants de sa filière.

5. Procédure resultatRepresentants

Écrire une procédure pour afficher les trois gagnants de l'élection des représentants par filière.

Exercice 5 : Bibliothèque

Contraintes à implémenter

Les tables suivantes sont définies :

  • personne(#numpers, nompers, prenompers)
  • adherent(#numpers#, mailadherent, daterenouvellement, nb_exemplaires)
  • ouvrage(#numouvrage, numauteur#, titreouvrage)
  • exemplaire(#numouvrage#, #numexemplaire, empruntable, num_adherent)
  • emprunter(#numadherent#, (#numouvrage#, #numexemplaire#), dateemprunt, dateretour)

1. Ajout d'un champ nb_exemplaires dans adherent

Ajouter un champ nb_exemplaires pour compter le nombre d'exemplaires en circulation.

2. Ajout d'un champ num_adherent dans exemplaire

Ajouter un champ num_adherent pour identifier l'adhérent en possession de l'exemplaire.

3. Déclencheurs pour les contraintes

Créer des déclencheurs (TRIGGER) pour maintenir à jour les champs nb_exemplaires et num_adherent selon les règles suivantes :

  • Un exemplaire non empruntable ne peut pas être emprunté.
  • Un exemplaire ne peut pas être en possession de deux adhérents à la fois.
  • Un adhérent ne peut pas être en possession de deux exemplaires différents d'un même ouvrage.
  • Un adhérent ne peut pas emprunter si son abonnement n'est pas à jour.
  • Un adhérent ne peut pas être en possession de plus de cinq livres.
  • Une même personne ne peut pas être à la fois auteur et adhérent.
  • Un adhérent ne peut pas être en possession de plus de cinq ouvrages.

Exercice 6 : Arbre Généalogique

1. Fonction demi-frères

Écrire une fonction demi_freres prenant deux numéros de personnes et retournant TRUE si elles ont un parent commun.

2. Fonction cousins germains

Écrire une fonction cousins_germains prenant deux numéros de personnes et retournant TRUE si elles sont cousins germains.

3. Procédure récursive affichageAscendants

Écrire une procédure récursive affichant le nom d'une personne et de ses ascendants masculins.

4. Procédure récursive affichageAncestresMasculins

Écrire une procédure récursive affichant uniquement les ascendants masculins d'une personne.

5. Fonction récursive ascendantDirect

Écrire une fonction récursive prenant deux numéros de personnes A et B et retournant TRUE si A est un ascendant direct de B.

6. Fonction récursive nombreGenerations

Écrire une fonction récursive retournant le nombre de générations entre deux personnes si l'une est un ascendant de l'autre, ou -1 sinon.

7. Requête couplesMaxGenerations

Écrire une requête retournant les couples de personnes séparés par le plus grand nombre de générations.

FAQ

Qu'est-ce qu'une séquence en SQL ?

Une séquence est un objet de base de données qui génère automatiquement des valeurs numériques uniques, souvent utilisé pour assigner des identifiants primaires.

Comment fonctionne un déclencheur (TRIGGER) ?

Un déclencheur est un programme stocké qui s'exécute automatiquement en réponse à une action sur une table, comme une insertion, une mise à jour ou une suppression.

Quelle est la différence entre une procédure et une fonction en PL/SQL ?

Une procédure exécute une série d'instructions sans retourner de valeur, tandis qu'une fonction retourne une valeur et peut être utilisée dans une expression ou une requête.

Cela peut vous intéresser :

Partagez vos remarques, questions , propositions d'amélioration ou d'autres cours à ajouter dans notre site

Enregistrer un commentaire (0)
Plus récente Plus ancienne