Différences entre versions de « PMB »

De Cliss XXI
Sauter à la navigation Sauter à la recherche
 
Ligne 1 : Ligne 1 :
 
== Présentation ==
 
== Présentation ==
  
== Modélisation de la base de données ==
+
PMB est un outil de gestion de bibliothèque très complet. Il est disponible à l'adresse suivante : [http://www.sigb.net/index_logiciel.php PMB]
 +
 
 +
== Modélisation des données ==
 
(pour la description des tables, ne figurent que les champs 'nécessaires')
 
(pour la description des tables, ne figurent que les champs 'nécessaires')
  
Ligne 7 : Ligne 9 :
  
 
Pour créer une notice, il faut dans un premier temps collecter les informations nécessaires telles que les auteurs, les éditeurs, ...
 
Pour créer une notice, il faut dans un premier temps collecter les informations nécessaires telles que les auteurs, les éditeurs, ...
*table des auteurs : authors(author_id,author_type,author_name,author_rejete)
+
*table des auteurs : '''authors'''(author_id, author_type, author_name, author_rejete)
 
**''author_rejete est en fait le prénom de l'auteur''
 
**''author_rejete est en fait le prénom de l'auteur''
  
*table des éditeurs : publishers(ed_id,ed_name)
+
*table des éditeurs : '''publishers'''(ed_id, ed_name)
  
*table des collections : collections(collection_id,collection_name,collection_parent,collection_issn)
+
*table des collections : '''collections'''(collection_id, collection_name, collection_parent, collection_issn)
 
**''collection_parent est l'indice de l'éditeur''
 
**''collection_parent est l'indice de l'éditeur''
  
 
*pour les catégories, trois tables entre en jeu :
 
*pour les catégories, trois tables entre en jeu :
**table qui gère les catégories et sous-catégories : noeuds(id_noeud,num_parent,num_renvoi_voir,visible,num_thesaurus)
+
**table qui gère les catégories et sous-catégories : '''noeuds'''(id_noeud, num_parent, num_renvoi_voir, visible, num_thesaurus)
 
***''visible spécifie si cette catégorie doit être affichée''
 
***''visible spécifie si cette catégorie doit être affichée''
**table qui contient les noms des catégories : categories(num_noeud,langue,libelle_categorie)
+
**table qui contient les noms des catégories : '''categories'''(num_noeud, langue, libelle_categorie)
 
***''langue est la langue de la catégorie (fr_FR pour français)''
 
***''langue est la langue de la catégorie (fr_FR pour français)''
**table qui fait le lien entre une notice et une catégorie : num_categories(notcateg_notices,num_noeud)
+
**table qui fait le lien entre une notice et une catégorie : '''num_categories'''(notcateg_notices, num_noeud)
 
***''notcateg_notices est l'id de la catégorie''
 
***''notcateg_notices est l'id de la catégorie''
 
***''num_noeud est l'id du noeud''
 
***''num_noeud est l'id du noeud''
Ligne 26 : Ligne 28 :
  
 
Pour ne pas perdre d'informations lors d'une migration, il peut être utile de créer des champs personnalisés pour les notices. Ces champs personnalisés sont définis à l'aide de trois tables :
 
Pour ne pas perdre d'informations lors d'une migration, il peut être utile de créer des champs personnalisés pour les notices. Ces champs personnalisés sont définis à l'aide de trois tables :
*table de définitions des nouveaux champs (nom, type, ...) : notices_custom(idchamp,name,titre,type,datatype,option,multiple,obligatoire,ordre)
+
*table de définitions des nouveaux champs (nom, type, ...) : '''notices_custom'''(idchamp, name, titre, type, datatype, option, multiple, obligatoire, ordre)
 
**''type spécifie si c'est un champ texte (text) ou une liste de selection(list)''
 
**''type spécifie si c'est un champ texte (text) ou une liste de selection(list)''
 
**''datatype est le type de donnée (par exemple small_text)''
 
**''datatype est le type de donnée (par exemple small_text)''
Ligne 32 : Ligne 34 :
 
**''multiple spécifie qu'une liste est multiple''
 
**''multiple spécifie qu'une liste est multiple''
 
**''ordre indique dans quel ordre doivent être affichés les champs''
 
**''ordre indique dans quel ordre doivent être affichés les champs''
*table contenant les options des listes déroulantes définies dans la table précédente : notices_custom_list(notices_custom_champ, notice_custom_list_value, notice_custom_list_lib,ordre)
+
*table contenant les options des listes déroulantes définies dans la table précédente : '''notices_custom_list'''(notices_custom_champ, notice_custom_list_value, notice_custom_list_lib,ordre)
*table contenant les valeurs des nouveaux champs : notices_custom_values(notices_custom_champ,notices_custom_origine,notice_custom_small_text,..[text,integer,float].)
+
*table contenant les valeurs des nouveaux champs : '''notices_custom_values'''(notices_custom_champ, notices_custom_origine, notice_custom_small_text, ..[text,integer,float].)
  
  
Pour stocker les informations des notices, on utilise la table : notices(notice_id,typdoc,tit1,tit4,ed1_id,coll_id,year,code,npages,size,prix)
+
Pour stocker les informations des notices, on utilise la table : '''notices'''(notice_id, typdoc, tit1, tit4, ed1_id, coll_id, year, code, npages, size, prix)
 
*''typdoc indique le type du document(document papier = 70)''
 
*''typdoc indique le type du document(document papier = 70)''
 
*''tit1 indique le titre principal''
 
*''tit1 indique le titre principal''
Ligne 46 : Ligne 48 :
  
 
En plus de cette table, on utilise :
 
En plus de cette table, on utilise :
*table contenant des index des notices pour la recherche : notices_global_index(num_notice,no_index,infos_global,index_infos_global)
+
*table contenant des index des notices pour la recherche : '''notices_global_index'''(num_notice, no_index, infos_global, index_infos_global)
*tables contenant la langue des notices : notices_langues(num_notice,type_langue,code_langue)
+
*tables contenant la langue des notices : '''notices_langues'''(num_notice, type_langue, code_langue)
  
  
Ligne 53 : Ligne 55 :
  
 
Une fois qu'une notice a été créée, il faut lui adjoindre les exemplaires correspondants. Pour cela, on a besoin d'informations telles que la localisation de l'exemplaire (ex: bibliothèque), la section (ex: adulte, enfant, archive), le statut (ex: empruntable, non-empruntable), le type de l'exemplaire (ex: livre). Pour stocker ces informations, on utilise les tables suivantes :
 
Une fois qu'une notice a été créée, il faut lui adjoindre les exemplaires correspondants. Pour cela, on a besoin d'informations telles que la localisation de l'exemplaire (ex: bibliothèque), la section (ex: adulte, enfant, archive), le statut (ex: empruntable, non-empruntable), le type de l'exemplaire (ex: livre). Pour stocker ces informations, on utilise les tables suivantes :
*pour la localisation : docs_location(idlocation,location_libelle,locdoc_owner,location_visible_opac)
+
*pour la localisation : '''docs_location'''(idlocation,location_libelle,locdoc_owner,location_visible_opac)
 
**''locdoc_owner est le propriétaire (mettre 0 pour pas de propriétaire)''
 
**''locdoc_owner est le propriétaire (mettre 0 pour pas de propriétaire)''
 
**''location_visible_opac indique si la locationdoit apparaitre dans l'opac''
 
**''location_visible_opac indique si la locationdoit apparaitre dans l'opac''
  
*pour la section : docs_section(idsection,section_libelle,sdoc_owner,section_visible_opac)
+
*pour la section : '''docs_section'''(idsection, section_libelle, sdoc_owner, section_visible_opac)
 
**''sdoc_owner est le propriétaire (mettre 0 pour pas de propriétaire)''
 
**''sdoc_owner est le propriétaire (mettre 0 pour pas de propriétaire)''
 
**''section_visible_opac indique si la section doit être visible dans l'opac''
 
**''section_visible_opac indique si la section doit être visible dans l'opac''
  
*pour effectuer la liaison entre la section et la localisation : docsloc_section(num_section,num_location)
+
*pour effectuer la liaison entre la section et la localisation : '''docsloc_section'''(num_section, num_location)
  
*pour le statut : docs_statut(idstatut,statut_libelle,pret_flag,statusdoc_owner)
+
*pour le statut : '''docs_statut'''(idstatut, statut_libelle, pret_flag, statusdoc_owner)
 
**''pret_flag indique si le document est empruntable (1 ou 0)''
 
**''pret_flag indique si le document est empruntable (1 ou 0)''
 
**''statusdoc_owner est le propriétaire (mettre 0 pour pas de propriétaire)''
 
**''statusdoc_owner est le propriétaire (mettre 0 pour pas de propriétaire)''
  
*pour le type : docs_type(idtyp_doc,tdoc_libelle,duree_pret,duree_resa,tdoc_owner,tarif_pret)
+
*pour le type : '''docs_type'''(idtyp_doc, tdoc_libelle, duree_pret, duree_resa, tdoc_owner, tarif_pret)
  
  
  
Pour stocker l'exemplaire lui-même, on utilise la table : exemplaires(expl_id, expl_cb, expl_notice, expl_typdoc, expl_section, expl_statut, expl_location, expl_date_depot, expl_date_retour, expl_prix, expl_owner)
+
Pour stocker l'exemplaire lui-même, on utilise la table : '''exemplaires'''(expl_id, expl_cb, expl_notice, expl_typdoc, expl_section, expl_statut, expl_location, expl_date_depot, expl_date_retour, expl_prix, expl_owner)
 
*''expl_cb est le code de l'exemplaire (il doit être unique)''
 
*''expl_cb est le code de l'exemplaire (il doit être unique)''
 
*''expl_notice est l'indice de la notice rattachée à l'exemplaire''
 
*''expl_notice est l'indice de la notice rattachée à l'exemplaire''
Ligne 78 : Ligne 80 :
 
*''expl_location est l'indice de la localisation''
 
*''expl_location est l'indice de la localisation''
 
*''expl_owner est le propriétaire de l'exemplaire (mettre 0 pour pas de propriétaire)''
 
*''expl_owner est le propriétaire de l'exemplaire (mettre 0 pour pas de propriétaire)''
 +
 +
 +
 +
'''Remarques'''
 +
 +
Lors d'une migration, mieux vaut entrer les localisations, sections, statuts, types directement dans le backoffice. Il faut faire de même avec les champs personnalisés. On évite ainsi les problème de gestion de type et de compatibilité.
 +
 +
Tous les index peuvent être créés autamatiquement après la migration en utilisant les outils de maintenance de la base de données disponibles dans le backoffice.
 +
 +
Il faut veiller que la table des catégories 'categories' contiennent (num_noeud=2,libelle='~termes non classés') et (num_noeud=3,libelle='~termes orphelins') et que la table noeuds contiennent (id_noeud=1, autorité='TOP', num_parent=0, num_renvoi_voir=0, visible=0 num_thesaurus=1(=> à modifier en fonction)), (id_noeud=2, autorite='NONCLASSES' num_parent=1, num_renvoi_voir=0, visible=0, num_thesaurus=1(=> à modifier en fonction)), et (id_noeud=3, autorite='ORPHELINS', num_parent=1, num_renvoi_voir=0, visible=0, num_thesaurus=1(=>à modifier en fonction)).
 +
 +
Si après une migration, les recherches ne fonctionnent plus, utilisez les outils de maintenance de la base de données pour regénérer les index.
 +
 +
Pour écrire des scripts de migration de notice, on peut s'inspirer du code de PMB lui-même :
 +
*pour les notices : pmb/notices/update_notice.inc.php
 +
*pour les exemplaires : fonction 'import' de pmb/classes/expl.class.php

Version du 22 mai 2007 à 17:32

Présentation

PMB est un outil de gestion de bibliothèque très complet. Il est disponible à l'adresse suivante : PMB

Modélisation des données

(pour la description des tables, ne figurent que les champs 'nécessaires')

Les notices

Pour créer une notice, il faut dans un premier temps collecter les informations nécessaires telles que les auteurs, les éditeurs, ...

  • table des auteurs : authors(author_id, author_type, author_name, author_rejete)
    • author_rejete est en fait le prénom de l'auteur
  • table des éditeurs : publishers(ed_id, ed_name)
  • table des collections : collections(collection_id, collection_name, collection_parent, collection_issn)
    • collection_parent est l'indice de l'éditeur
  • pour les catégories, trois tables entre en jeu :
    • table qui gère les catégories et sous-catégories : noeuds(id_noeud, num_parent, num_renvoi_voir, visible, num_thesaurus)
      • visible spécifie si cette catégorie doit être affichée
    • table qui contient les noms des catégories : categories(num_noeud, langue, libelle_categorie)
      • langue est la langue de la catégorie (fr_FR pour français)
    • table qui fait le lien entre une notice et une catégorie : num_categories(notcateg_notices, num_noeud)
      • notcateg_notices est l'id de la catégorie
      • num_noeud est l'id du noeud


Pour ne pas perdre d'informations lors d'une migration, il peut être utile de créer des champs personnalisés pour les notices. Ces champs personnalisés sont définis à l'aide de trois tables :

  • table de définitions des nouveaux champs (nom, type, ...) : notices_custom(idchamp, name, titre, type, datatype, option, multiple, obligatoire, ordre)
    • type spécifie si c'est un champ texte (text) ou une liste de selection(list)
    • datatype est le type de donnée (par exemple small_text)
    • option est une liste spécifiant les options des champs (ex la taille)
    • multiple spécifie qu'une liste est multiple
    • ordre indique dans quel ordre doivent être affichés les champs
  • table contenant les options des listes déroulantes définies dans la table précédente : notices_custom_list(notices_custom_champ, notice_custom_list_value, notice_custom_list_lib,ordre)
  • table contenant les valeurs des nouveaux champs : notices_custom_values(notices_custom_champ, notices_custom_origine, notice_custom_small_text, ..[text,integer,float].)


Pour stocker les informations des notices, on utilise la table : notices(notice_id, typdoc, tit1, tit4, ed1_id, coll_id, year, code, npages, size, prix)

  • typdoc indique le type du document(document papier = 70)
  • tit1 indique le titre principal
  • tit4 indique le sous-titre
  • ed1_id est l'id de l'éditeur
  • coll_id est l'id de la collection
  • year est l'année de parution


En plus de cette table, on utilise :

  • table contenant des index des notices pour la recherche : notices_global_index(num_notice, no_index, infos_global, index_infos_global)
  • tables contenant la langue des notices : notices_langues(num_notice, type_langue, code_langue)


Les exemplaires

Une fois qu'une notice a été créée, il faut lui adjoindre les exemplaires correspondants. Pour cela, on a besoin d'informations telles que la localisation de l'exemplaire (ex: bibliothèque), la section (ex: adulte, enfant, archive), le statut (ex: empruntable, non-empruntable), le type de l'exemplaire (ex: livre). Pour stocker ces informations, on utilise les tables suivantes :

  • pour la localisation : docs_location(idlocation,location_libelle,locdoc_owner,location_visible_opac)
    • locdoc_owner est le propriétaire (mettre 0 pour pas de propriétaire)
    • location_visible_opac indique si la locationdoit apparaitre dans l'opac
  • pour la section : docs_section(idsection, section_libelle, sdoc_owner, section_visible_opac)
    • sdoc_owner est le propriétaire (mettre 0 pour pas de propriétaire)
    • section_visible_opac indique si la section doit être visible dans l'opac
  • pour effectuer la liaison entre la section et la localisation : docsloc_section(num_section, num_location)
  • pour le statut : docs_statut(idstatut, statut_libelle, pret_flag, statusdoc_owner)
    • pret_flag indique si le document est empruntable (1 ou 0)
    • statusdoc_owner est le propriétaire (mettre 0 pour pas de propriétaire)
  • pour le type : docs_type(idtyp_doc, tdoc_libelle, duree_pret, duree_resa, tdoc_owner, tarif_pret)


Pour stocker l'exemplaire lui-même, on utilise la table : exemplaires(expl_id, expl_cb, expl_notice, expl_typdoc, expl_section, expl_statut, expl_location, expl_date_depot, expl_date_retour, expl_prix, expl_owner)

  • expl_cb est le code de l'exemplaire (il doit être unique)
  • expl_notice est l'indice de la notice rattachée à l'exemplaire
  • expl_typdoc est l'indice du type de document
  • expl_section est l'indice de la section
  • expl_location est l'indice de la localisation
  • expl_owner est le propriétaire de l'exemplaire (mettre 0 pour pas de propriétaire)


Remarques

Lors d'une migration, mieux vaut entrer les localisations, sections, statuts, types directement dans le backoffice. Il faut faire de même avec les champs personnalisés. On évite ainsi les problème de gestion de type et de compatibilité.

Tous les index peuvent être créés autamatiquement après la migration en utilisant les outils de maintenance de la base de données disponibles dans le backoffice.

Il faut veiller que la table des catégories 'categories' contiennent (num_noeud=2,libelle='~termes non classés') et (num_noeud=3,libelle='~termes orphelins') et que la table noeuds contiennent (id_noeud=1, autorité='TOP', num_parent=0, num_renvoi_voir=0, visible=0 num_thesaurus=1(=> à modifier en fonction)), (id_noeud=2, autorite='NONCLASSES' num_parent=1, num_renvoi_voir=0, visible=0, num_thesaurus=1(=> à modifier en fonction)), et (id_noeud=3, autorite='ORPHELINS', num_parent=1, num_renvoi_voir=0, visible=0, num_thesaurus=1(=>à modifier en fonction)).

Si après une migration, les recherches ne fonctionnent plus, utilisez les outils de maintenance de la base de données pour regénérer les index.

Pour écrire des scripts de migration de notice, on peut s'inspirer du code de PMB lui-même :

  • pour les notices : pmb/notices/update_notice.inc.php
  • pour les exemplaires : fonction 'import' de pmb/classes/expl.class.php