La bibliothèque d’un département de mathématiques a été équipée d’une base de données qui gère tous les aspects de la bibliothèque. Malheureusement, pour des raisons de compatibilité avec le système antérieur de gestion, basé sur des fiches papier, et du fait de l’incompétence de celui qui a réalisé cette base, la conception de cette base de données n’est pas satisfaisante.

Votre mission, si vous l’acceptez, sera d’analyser les déficiences de cette base et d’identifier les besoins, puis de proposer un nouveau modèle, et de l’implémenter dans une base postgreSQL.

Ce message s’autodétruira dans cinq secondes…​

Description du catalogue

Dans la version papier, une fiche était rédigée et mise dans un fichier pour tout nouveau livre. Un même livre pouvait apparaitre en plusieurs exemplaires ; dans ce cas, chaque exemplaire avait un numéro d’inventaire séparé, et tous les numéros d’inventaire étaient écrits sur la fiche corresxpondant à ce livre.

Un exemplaire avait un numéro de cote, qui indiquait à quel endroit de la bibliothèque on pouvait le trouver.

Par ailleurs, en mathématiques, on dispose d’une classification par thèmes, dites classification AMS (ainsi 14 signfie "géométrie algébrique"). Lors de l’entrée d’un nouveau livre, le responsable de la bibliothèque note les différents champs AMS dont relève le livre, ainsi que différents mots-clés

Pour essayer de reproduire ce schéma, l’informaticien peu compétent a utilisé un schéma constitué d’une unique page:

CREATE TABLE catalogue (
  auteur text,
  titre text,
  collection text,
  numcoll int DEFAULT NULL,
  editeur text,
  date int DEFAULT NULL,
  isbn varchar(20) DEFAULT NULL,
  ams text,
  cle text,
  cote varchar(15) DEFAULT NULL,
  inventaire text,
  type varchar(10) DEFAULT NULL,
  lang varchar(4) DEFAULT NULL,
  lango varchar(4) DEFAULT NULL,
  numfiche int NOT NULL DEFAULT 0,
  PRIMARY KEY (numfiche)
);

Les données de cette table catalogue ont été extraites de la base de données grâce à l’utilitaire mysqldump. On trouvera le code créant la table et le code d' insertion des données. Ces deux codes ont été légèrement adaptés du résultat sorti par mysqldump et son directement utilisables dans une base de données PostgreSQL.

Vous pouvez tester le résultat dans la base de données bibli sur le postgresql de data.

Fonctionnalités souhaitées pour la base

On veut différentes fonctionnalités :

  • consulter le catalogue

  • gérer les emprunts, qui sont réalisés uniquement par des utilisateurs enregistrés

  • permettre à un utilisateur d’émettre une réservation sur un livre

  • connaître à tout moment

    • le statut d’un livre (emprunt, réservation)

    • les emprunts en cours pour un utilisateur et ses réservations

    • l’historique des utilisateurs qui ont emprunté un livre donné,

    • l’historique des emprunts d’un utilisateur donné

  • avoir des mécanismes internes à la base de données pour garantir la cohérence de toutes ces informations.

A vous de jouer

  • Décrire les insuffisances du modèle de catalogue actuel

  • proposer un nouveau modèle de catalogue, basé sans doute sur un système de plusieurs tables

  • définir un schéma de base adapté aux exigences de la gestion des utilisateurs

Après l’analyse de la base de données, voici un script de création des tables basés sur les notes que vous avez prises (généré automatiquement par pgmodeler, puis légèrement modifié).

  • Une fois cette base de données crée sur postgres, essayer d’importer les données depuis l’ancien catalogue vers la nouvelle structure

  • créer des triggers pour gérer correctement les emprunts.