Pour commencer
On démarre avec l'environnement de PostgreSQL
On reprend (presque) la base bibliothèque que vous connaissez déjà.
Vous allez devoir créer votre propre base à partir des fichier
bibliotheque.sql et mis insert-bibliotheque.sql
à disposition. Récupérez ce ficher et
enregistrez-le chez vous.
Connectez-vous à la base biblio. Votre première action doit être de modifier votre mot de passe sous postgresql. Vous vous déconnecterez immédiatement pour tester votre nouvelle connexion.
vous@infoXXX$ psql -h slinux2 biblio
password :
biblio=# alter user votre_nom password 'votre-nouveau-mot-de-passe';
biblio=# \q
Reconnectez-vous. Testez les commandes suivantes pour vous familiariser avec l'environnement de postgresql.
vous@infoXXX$ psql -h slinux2 biblio
biblio=# \dt
biblio=# \d livre
biblio=# \h
biblio=# \h select
biblio=# \h create function
Création de la base de données
Créez une nouvelle base qui portera le nom de
biblio_votrenom, puis connectez vous sur cette nouvelle
base, et enfin chargez le fichier de création et de peuplement des
tables :
biblio# create database biblio_votrenom;
CREATE DATABASE
biblio=# \c biblio_votrenom
Vous êtes maintenant connecté à la base de données « biblio_votrenom ».
biblio_votrenom=#\i 'bibliotheque.sql'
psql:biblio2.sql:5: INFO: CREATE TABLE créera des séquences implicites ...
psql:biblio2.sql:5: INFO: CREATE TABLE / PRIMARY KEY créera un index ...
...
INSERT 0 1
biblio_votrenom=#
Écrire des fonctions...
Ça y est, vous êtes prêts à travailler. Pour les exercices suivants,
vous devrez choisir d'écrire des fonctions soit en SQL, soit en
PL/SQL. Vous devrez toujours tester vos fonctions (donc écrire une
requête appelant votre fonction et vérifier son résultat).
Vous devrez travailler en créant vos fonctions dans un fichier mesFctsBiblio.sql
que éditerez à côté (à l'aide de votre éditeur préféré, gedit par exemple) que vous
re-chargerez à chaque nouvelle fonction dans votre base.
Écrire une fonction nbre_exemplaires qui retourne le nombre de
livres associés à une oeuvre.
Écrire une fonction est_emprunte qui retourne un booléen
suivant qu'un livre est actuellement emprunté ou non (attention, il
n'y a pas d'attribut sorti dans votre base, contrairement à
la base du tp de la semaine dernière).
Écrire une fonction les_livres_presents qui retourne les livres
actuellement présents sur les rayons de la bibliothèque.
Écrire une fonction nbre_emprunts qui retourne le nombre de
livres empruntés associés à une même oeuvre.
Écrire une fonction les_plus_empruntes qui retourne les n oeuvres
les plus empruntées. En cas d'égalité, on rangera les oeuvres par
ordre alphabétique sur leur titre.
Écrire une fonction infos_oeuvres qui, pour une oeuvre donnée,
retourne une chaîne de caractères qui contient des informations sur
cette oeuvre. Si l'oeuvre est écrite par une seule personne, alors la
chaîne retournée devra être Titre : Le titre de l'oeuvre -
Auteur : Le nom de l'auteur; si l'oeuvre a été écrite par
plusieurs personnes, alors la chaîne retournée sera Titre : Le
titre de l'oeuvre - Auteurs : Le nom du premier auteur et
al.. Appelez cette fonction sur toutes les oeuvres de la base.
Vous devez maintenant modifier votre base et ajouter un
champ empruntable de type booléen à la table
livre. Ce champ devra prendre la valeur True par
défaut. Ce champ permettra d'exclure du prêt un exemplaire de chaque
oeuvre bien représentée dans la bibliothèque.
Écrire une fonction sort_du_pret qui, pour une oeuvre donnée,
positionne à False ce champ empruntable si l'oeuvre
possède au moins trois exemplaires dans la base, et il en existe au
moins un qui n'est pas emprunté actuellement. Dans ce cas, c'est
l'exemplaire de l'oeuvre non emprunté avec le plus petit identifiant
dont on bascule le champ empruntable à faux. Appelez cette
fonction pour que ce travail soit effectué sur tous les livres de la
base.
Comment faire pour que cette fonction puisse être régulièrement
appelée sans provoquer l'exclusion du prêt de plusieurs livres pour
une même oeuvre ? Modifiez votre fonction.