Compte rendu d activité Fiche n 1 Alexandre K. (http://ploufix.free.fr) Nature de l activité Création d une base de connaissances avec PostgreSQL Contexte : Le responsable technique souhaite la mise en place d une base de connaissances afin de pouvoir rassembler de manière centralisée certaines données techniques. De cette manière, les informations recueillies doivent être retrouvées plus facilement. En effet, il est indispensable de mettre en place une solution organisée qui contienne les données et dispose de différents modes de recherches. Objectif : Réaliser et assurer la maintenance de la base de données et de son interface. C21 C24 C25 C35 C37 Compétences mises en œuvre pour la réalisation de cette activité. Installer et configurer un micro-ordinateur Installer et configurer un système de gestion de base de données Installer un applicatif Actualiser une solution informatique Administrer et maintenir une base de données Matériels : Un poste Un serveur (Environnement virtualisé avec VMWare) Durée : 45 mn. Conditions de réalisation Logiciels : Un serveur Web (Apache) Un SGBD (PostgreSQL) Un navigateur web Autres contraintes et difficultés : La recherche par mots-clés est complexe et nécessite des outils plus efficaces que le langage SQL (LIKE) afin d obtenir des résultats pertinents. Description et déroulement de l activité Situation initiale : Les informations techniques concernant les différentes interventions sont enregistrées sous format papier ou format numérique sur le poste de chaque technicien. Situation finale : Les informations sont stockées sur la base de données et sont accessibles par un site web. Chaque technicien peut ajouter, modifier, supprimer certaines informations selon ses droits.
Déroulement de l activité par étapes Présentation de la base de données : La base de connaissances doit posséder un système de recherche multicritère : catégorie, utilisateur et mots-clés. L interface doit également posséder un système d identification pour gérer les accès. Seuls les propriétaires des fiches ou les utilisateurs avec des droits d administration peuvent modifier ou supprimer une fiche. Il est possible de lier des fichiers aux fiches, et toute modification sur une fiche fait l objet d un enregistrement précisant la date et l objet de la modification. Les fiches figurent obligatoirement dans une catégorie. Les catégories peuvent contenir des sous-catégories et la recherche sur une catégorie doit inclure les entrées des sous-catégories. Modèle conceptuel de données : Modèle logique de données : fiches (fiche_id, fiche_sujet, fiche_date, fiche_contenu, #cat_id, #user_id); utilisateurs (user_id, user_login, user_mdp, user_nom, user_prenom, user_mail, user_statut); categories (cat_id, cat_nom, cat_rang, cat_parent); fichiers (fichier_id, fichier_location, fichier_type, fichier_libelle, fichier_regexp, #fiche_id); revisions (modif_id, modif_date, modif_historique, #fiche_id); Création de la base : CREATE DATABASE base_connaissances WITH ENCODING='UTF8'; Création des rôles et des utilisateurs : CREATE ROLE Gestionnaires; CREATE ROLE Utilisateurs; Les utilisateurs vont hériter des droits des groupes.
CREATE USER Administrateur ENCRYPTED PASSWORD 'operations' IN ROLE Gestionnaires; CREATE USER DUPONT ENCRYPTED PASSWORD 'pti1' IN ROLE Utilisateurs; Création de l espace de stockage pour les tables : Définition de deux espaces : Fiches et Gestion CREATE TABLESPACE Fiches LOCATION E'E:\\Fiches'; GRANT CREATE ON TABLESPACE Fiches TO public; CREATE TABLESPACE Gestion LOCATION E'E:\\Gestion'; GRANT CREATE ON TABLESPACE Gestion TO public; Création des tables Requête SQL pour la création de la table fichiers qui va gérer la relation entre les fiches et des fichiers. On ajoute directement les clés primaires et étrangères en fonction du modèle logique de données. CREATE TABLE fichiers ( fichier_id serial NOT NULL, fichier_type varchar(10), fichier_libelle varchar(30), fichier_location varchar(100), fichier_regexp varchar(100), fiche_id integer, PRIMARY KEY (fichier_id), FOREIGN KEY (fiche_id) REFERENCES fiches(fiche_id) ON DELETE CASCADE ) TABLESPACE Gestion; On précise l espace de stockage et une contrainte ON DELETE CASCADE sur la clé étrangère fiche_id pour supprimer automatiquement les entrées en relation avec cette clé lors de la suppression d une fiche Suppression d une fiche avec la mise en œuvre de «ON DELETE CASCADE». DELETE FROM fiches WHERE fiche_id = 1 ; La suppression de cette fiche implique la suppression de toutes les entrées en relation avec la fiche possédant l identifiant fiche_id = 1 sur les tables fichiers et révisions. Requête SQL pour insérer des catégories: Le champ cat_id est auto incrémenté c est-à-dire qu il ne reste plus qu à préciser le nom de la catégorie, son rang et sa catégorie parente dans le cas d une sous catégorie. INSERT INTO categories (cat_nom, cat_rang, cat_parent) VALUES ('Microsoft', 1, NULL); INSERT INTO categories (cat_nom, cat_rang, cat_parent) VALUES ('Windows XP', 2, 7);
Attribution des droits sur les tables pour les rôles. GRANT ALL ON fiches, categories, utilisateurs, revisions, fichiers TO GROUP Administrateurs ; GRANT ALL ON fiches,fichiers,revisions, utilisateurs TO GROUP Gestionnaires ; GRANT SELECT ON utilisateurs, categories TO GROUP Gestionnaires ; GRANT SELECT ON fiches, fichiers, revisions, categories, utilisateurs TO GROUP Utilisateurs ; Pour que les utilisateurs puissent faire appel à la requête SEQUENCE qui permet d incrémenter les champs de type SERIAL, il faut leur accorder les droits d exécuter cette requête sur les séquences correspondantes. GRANT ALL ON categories_cat_id_seq, fiches_fiche_id_seq, fichiers_fichier_id_seq, utilisateurs_user_id_seq, revisions_modif_id_seq TO GROUP Administrateurs,Gestionnaires ; En se connectant avec le compte «utilisateur», le bon fonctionnement des droits peut être vérifié. Requête de recherche de données. La requête suivante permet une recherche utilisant l ensemble des critères simultanément : Recherche par mots-clés (port ET rdp OU relai ET messagerie) Recherche par catégorie (Microsoft) Recherche par auteur de la fiche (DUPONT) SELECT cat_nom, fiche_date, fiche_sujet, utilisateurs.user_nom, utilisateurs.user_prenom, fiche_contenu FROM categories, fiches, utilisateurs WHERE (SELECT cat_id FROM categories WHERE cat_nom = 'Microsoft') IN (cat_parent, categories.cat_id) AND utilisateurs.user_nom = 'DUPONT' AND categories.cat_id = fiches.cat_id AND fiches.user_id = utilisateurs.user_id AND to_tsvector('french', fiche_sujet fiche_contenu) @@ to_tsquery ('french','port & rdp relai & messagerie') ORDER BY fiches.fiche_id DESC LIMIT 10 OFFSET 0; Résultat après exécution de cette requête sous pgadmin III : Les catégories «Windows Server» et «Windows XP» sont des sous-catégories de «Microsoft» On constate que l on obtient uniquement les données créées par l utilisateur recherché dans la catégorie voulue et dont les mots clés figurent dans le sujet ou le contenu. La recherche par mots-clés est assurée par l outil «tsearch2» de PostgreSQL qui se base sur l utilisation d un dictionnaire et d une liste de mots d exclusion. Il est également possible de classer les résultats selon un score de pertinence afin de présenter à l utilisateur les résultats qui vont au mieux correspondre à sa recherche dans le cas d un tri avec la clause ORDER BY sur le score généré par «tsearch2».
Sauvegarde et restauration L outil pg_dump all permet d extraire les données d une base vers un fichier. pg_dumpall.exe > F:\backup\sauvegarde.sql c -i -U postgres Pour lancer cette commande en tâche planifiée, il faut fournir la configuration pour l adresse, le port, le nom de la base, le nom du compte et son mot de passe dans %APPDATA%\postgresql\pgpass.conf Pour restaurer cette base, il suffit d exécuter le script de sauvegarde. La base est ensuite à nouveau entièrement fonctionnelle. \i C:/sauvegarde.sql On restaure la sauvegarde Création de vues pour faciliter les requêtes Afin d éviter de devoir taper de longues requêtes, il est utile de créer des vues sur des requêtes courantes. CREATE OR REPLACE VIEW "ConsulterBase" AS SELECT cat_nom as Catégorie, utilisateurs.user_nom as Auteur, fiche_date as Date, fiche_sujet as Sujet, fiche_contenu as Description FROM categories, fiches, utilisateurs WHERE categories.cat_id = fiches.cat_id AND fiches.user_id = utilisateurs.user_id ORDER BY fiches.fiche_id DESC; Ainsi, on peut dorénavant exécuter cette requête à la place de celle présentée ci-dessus. SELECT * FROM "ConsulterBase"; Utilisation depuis l interface web avec PHP Pour que les informations de la base de données puissent être consultées sans pour autant devoir connaître le langage SQL, il est plus convivial et plus rapide d utiliser une interface. Voici une copie d écran partielle de l interface web après l exécution d une recherche : Analyse des résultats obtenus. Objectif Atteint : La base de données est fonctionnelle. Les contraintes sur les tables permettent de maintenir la cohérence des données et d effectuer ainsi des requêtes performantes afin d obtenir rapidement les informations. Bilan : L utilisation d une base SQL sur PostgreSQL répond parfaitement au cahier des charges de cette application. De plus, cette solution est sous licence BSD et distribuée gratuitement. Enfin, sa disponibilité sur bon nombre de plates formes, dont Windows et GNU/Linux, permet un large choix de systèmes concernant son intégration avec d autres applications (Apache, PHP).