Déclencheurs -- Base Bibliothèque

La base Bibliotheque

Tous les exercices sont à réaliser et à tester sur la base biblio_votrenom que vous avez déjà créée. Les exercices suivants sont sous la forme de règle de gestion. La plupart de ces règles doivent être réalisés par un déclencheur, mais certaines peuvent n'être qu'une contrainte de table. Dans ce cas, vous devrez modifier la table. Il est important que vous testiez chacune de vos réponses.

Si vous avez un doute sur une syntaxe SQL, n'oubliez pas la commande \h. Par exemple :


biblio# \h alter table
Un adhérent ne peut pas emprunter plus de trois livres.
On ne peut pas emprunter un livre qui est déjà emprunté.
Lorsqu'un livre est rendu au retour d'un prêt, alors l'emprunt qui vient de se terminer doit être enregistré dans histoemprunt. La seule exception est le cas où la date d'emprunt est également la date du retour.
Un adhérent ne peut pas emprunter s'il a une dette, ou s'il a un livre en retard (la durée du prêt est de trois semaines).
Lorsqu'un adhérent rend un livre, il aura une amende de deux euros par semaine de retard (le cas échéant).
Lorsqu'un livre est supprimé de la base (et des rayons), dans l'historique des emprunts (histoemprunt), on remplace sa référence par null.
On ne peut rien supprimer dans histoemprunt, sauf les enregistrements dont date la date d'emprunt est la même que la date du retour ou bien les enregistrements dont la référence du livre est null.
Pour savoir plus rapidement si un livre est emprunté, on décide d'ajouter un champ booléen sorti dans la table livre. Ajoutez ce champ, avec comme valeur par défaut false.
Proposez des solutions pour que le champ sorti soit toujours à jour.
On décide maintenant d'ajouter un champ reserve_adh (qui est une clé étrangère pour adherent) dans la table livre. Ajoutez ce champ. Ils permettra d'indiquer si un livre est réservé par un adhérent.
Maintenant on ne peut pas emprunter un livre s'il est déjà réservé, à moins que l'emprunteur ne soit celui qui a fait la réservation. Dans ce cas, le champ reserve_adh doit être remis à null lors de l'emprunt.