Vous êtes sur la page 1sur 9

DOCD0

Base de Donnes et FOAD

Synthse de la cration dun exemple de BDD relationnelle Introduction


Ltude de cas que jai dveloppe est une simple base qui permet d'indexer des documents des cours et de crer ses propres indexes norms et uniques la manire dun code ISBN par exemple. Ce qui permet de lier des contenus des thmatiques de cours pour faire quelques recherches classiques en base documentaire (auteur, anne, pertinence), mais aussi pour optimiser la gestion de projets, et sorganiser dans son travail afin de gagner du temps (le comble cest que jen ai manqu pour cet exercice...). J'ai eu cette ide en indexant les ressources que les enseignants nous donnent dans leurs cours dans mon Del.ici.ous (http://www.delicious.com/maudbourgeois) sur lequel je me suis base pour le contenu utiliser. Jaurai aussi aim dvelopper un modle permettant de taguer les documents avec 4 ou 5 mots cls choisir librement, un peu selon le principe de la folksonomie que je trouve trs intressant en termes de cration de classification collaborative, dcentralise et spontanne. Jaurai pu crer une table TAGS et lier un ID_TAG lID_DOC de la table DOCS puis crer un sous formulaire pour que les utilisateurs puissent saisir des tags en mme temps quils rentrent un doc via le formulaire F_DOCS. Cependant je nai pas eu le temps daller aussi loin dans limplmentation de cette rflexion. Mais ce sont des amliorations que je garde pour plus tard ! Pour linstant tout ce que mon modle cest de taguer les documents par grands domaines dappartenances. Commenons par ce que jai donc pu faire ! Jai utilis BASE le logiciel gratuit de l'diteur OpenOffice qui ma permis de construire cette base de donnes et de l'exploiter en y insrant des donnes grce aux formulaires, en y modifiant et supprimant des donnes directement en ditant les tables, et enfin en l'interrogeant grce aux requtes. J'ai d'abord imagin un modle de BDD sur papier avant de le concevoir (cf. schma ci- aprs), puis jai cr mes tables, et ai dfini le cur de la BDD en tablissant l'intgrit rfrentielle qui rgit les relations entre les champs des diffrentes tables. Enfin j'ai cr des requtes pour exploiter les donnes contenues dans la base. Jai rappris tre patiente lors de cet exercice car chaque chose doit vraiment tre pense en amont si lon veut obtenir un rsultat probant. Par exemple jai pens des champs ajouter mes tables (plusieurs champs auteurs dans ma table DOCS) lorsque jutilisais les formulaires de saisie de donnes. Or une fois que la table est cre on peut ajouter des champs postriori mais a ne fait pas trs propre la fin. Autre petit dtail qui a son importance cest de bien penser au nombre de caractres quadmets un champs et de toujours bien vrifier que lon a pass un champ en saisie obligatoire avant de dfinir la cl primaire et denregistrer sa table. Enfin jai eu des petits soucis dintgrit aussi car certains de mes cls primaires navaient pas le mme format... Bref chaque champ a son utilit et il faut le prvoir car tout doit tre fait dans lordre ! Maud Bourgeois 1 DOCD0

DOCD0 Base de Donnes et FOAD

Besoin

A travers la cration de ce modle je voulais optimiser ma gestion des projets de ce master les ressources bibliographiques lire en priorit. Pour ce faire jai donc pens ma base de faon pouvoir remonter les informations suivantes : Tous les cours obligatoires par semestre ; Et tous les documents qui sy rapportaient (pour tablir un 1er sous ensemble de documents lire en priorit) ; Classer les documents par typologie et les trier par date pour en dduire une pertinence (le contenu dune page Web sera plus vite obsolte que le contenu dune thse ou dun rapport de recherche, donc sur ce type de doc lanne nest pas aussi pertinente) ; Chercher un document par auteur(s) et vrifier si le professeur du cours est aussi lauteur du document (si oui alors je le lirai en priorit) ; Identifier les documents dont le contenu est transverse sil est associ plusieurs cours (ce document me servira plusieurs fois donc vaut potentiellement la peine dtre lu !) ; Et enfin accessoirement la fin de lanne compter combien il y a eu de livrables rendre !

Ralisation
Modlisation
Voici la reprsentation logique de ma base de donnes relationnelle, les entits- associations sont reprsents l'aide de blocs pour les tables et de flches pour les liens sur lesquels la cardinalit est indique. On voit bien que les champs TYPE et DOMAINE de la table DOCS sont des cls trangres lies respectivement aux cls primaires TYPOLOGIE et ID_DOMAINE des tables TYPOLOGIE et DOMAINES. De mme le champ PROFESSEUR de la table COURS est une cl trangre lie la cl primaire NOM de la table PROFESSEURS. Enfin les deux cls primaires ID_DOC et ID_COURS des tables DOCS et COURS sont galement lies aux cls primaires de la table INDEXER. Tous ces liens expriment une cardinalit allant de 1 vers linfini, ce qui veut dire par exemple qu un nom correspond un et un seul professeur et que ce dernier peut tre en charge de plusieurs cours. De mme un document ne peut avoir quun seul type mais un type peut tre attribu plusieurs documents, etc. Maud Bourgeois 2 DOCD0

DOCD0 Base de Donnes et FOAD

La table indexer quant elle nous sert de jointure, et dindex car en rassemblant les deux cls ID_DOC et ID_COURS elle nous permet de former un identifiant unique pour chaque document. Un document peut tre utilis dans plusieurs cours mais cest le contexte du cours dans lequel il est utilis qui le rend unique. Par exemple notre identifiant ici peut prendre la valeur : 0DOCD0.

Cration des tables et des formulaires


Jai donc cr 5 tables pour modliser les relations Un document typ et appartenant un domaine est indx un cours ralis par des professeurs. Puis jai cr 5 formulaires de saisie correspondants afin de pouvoir alimenter cette base en contenu. Table DOCS Jai choisi de typer le champ ID_DOC en INTEGER qui sincrmente automatiquement pour que chaque document saisi en base soit automatiquement identifi par un chiffre unique. Cest donc devenu la cl primaire par dfaut. Maud Bourgeois 3 DOCD0

DOCD0 Base de Donnes et FOAD

ANNEE est en SMALLINT car je voulais un format numrique et pas un format DATE. Une anne se compose de 4 chiffre correspond la restriction de 5 chiffres de ce format. Jai galement essay le format VARCHAR_IGNORECASE pour le champ SOURCE pour faciliter les recherches par dun doc par sa source mais il aurait t beaucoup plus utile de lappliquer aux champs AUTEUR 1 et AUTEUR 2 (je le mets dans mon catalogue des demandes dvolutions...). Le champ COPYRIGHT est au format BOOLEAN (oui/non) et se traduit par une case cocher dans le formulaire. Le champ LANGUE admet la valeur FR par dfaut, ceci vite de le saisir chaque foi sachant que notre corpus se composera quasi exclusivement de documents rdigs en franais. Enfin le champ ISBN est au format INTEGER, donc de longueur 10, ce qui est parfait car cest un identifiant norm de 10 chiffres. Les champs non obligatoires car malheureusement pas toujours disponibles sont : ANNEE (mme si trs caractrisant), INSTITUTION, PAYS, COPYRIGHT, ISBN. Table COURS Rien de particulier sur cette table, part que la cl primaire est au format texte VARCHAR car lidentifiant des cours est compos de chiffres et de lettres et ne pouvait pas avoir un format numrique. Jai veill ce que les champs MATIERE et PROFESSEUR admettre des chaines de caractres dune longueur de 200 et non 50.

Maud Bourgeois

DOCD0

DOCD0 Base de Donnes et FOAD

Table INDEXER La table qui me sert relier les identifiants entre eux et qui nous permet didentifier sans quivoque un document mais surtout de le lier au contexte cours . Jai fait attention ce que les formats des cls primaires soient identiques ceux des cls primaires des autres tables, savoir respectivement INTEGER et VARCHAR pour ID_DOC et ID_COURS. Le champ %PERTINENCE symbolise le degr de pertinence du document par rapport au cours auquel il appartient, dit autrement, son degr de pertinence par rapport au sujet.

Tables TYPOLOGIE, DOMAINES et PROFESSEURS Ces trois tables secondaires me servent donc surtout de stocker de linformation ct des tables primaires la fois pour allger mes tables mais aussi pour fournir lutilisateur des listes de choix normes, comme avec les typologies de document dans la table TYPOLOGIE. Chaque entre est unique, chaque type est unique et sauto dfini, pas besoin dID_TYPE par exemple.

Maud Bourgeois

DOCD0

DOCD0 Base de Donnes et FOAD

Dans la table DOMAINES jai cre des ID_DOMAINES pour fournir des acronymes lutilisateur et faciliter la saisie de donnes dans les tables. Par exemple Formation Ouverte Distance donne FOAD.

Enfin la table PROFESSEUR me permet la fois de collecter des informations utiles sur les professeurs, comme leur email par exemple, mais aussi de attacher un cours de faon unique travers leur nom. Jai fait ce choix postriori sachant quaucun professeur navait dhomonyme dans le master. Cependant cest bien connu le nom ne suffit pas identifer une personne de faon unique mais ce nest pas le but de ce modle. Lidentification unique de ce modle porte sur les documents.

Jai essay en vain de dfinir un exemple de valeur pour le champ email, dans lequel je voulais montrer quil fallait un arobase (@). Laide de Open Office nest pas trs intuitive parfois...

Formulaires
Jai cr 5 formulaires de saisie mais choisi de nen montrer que deux ici qui rsument les fonctionnalits que jai utilises.

Les champs qui sont relis entre eux par des cls primaires ou secondaires sont ajouts au formulaire de la table principale hbergeant le lien sous forme de liste droulante. Par exemple ici en face dID_DOC de la table INDEXER on a la liste droulante affichant toutes les valeurs que prennent ID_DOC dans la table DOCS que lon a alimente via un autre formulaire DOCS. Maud Bourgeois 6 DOCD0

DOCD0 Base de Donnes et FOAD

Exploitation
Lide ici a t de crer en langage SQL une requte par besoin exprim plus haut : Tous les cours obligatoires par semestre donne la requte 0_COURS_2_OBL : SELECT "MATIERE" AS "LIBELE", "SEMESTRE" AS "SEMESTRE", "OBLIGATOIRE" AS "OBLIGATOIRE" FROM "COURS" WHERE "SEMESTRE" = 2 AND "OBLIGATOIRE" = 1 ORDER BY "LIBELE" ASC Et tous les documents qui sy rapportaient (pour tablir un 1er sous ensemble de documents lire en priorit) donne la requte imbrique 2_DOC_LIRE_SEM2 ; SELECT "DOCS"."TITRE", "COURS"."MATIERE", "COURS"."SEMESTRE", "COURS"."OBLIGATOIRE" FROM "INDEXER", "DOCS", "COURS" WHERE "INDEXER"."ID_DOC" = "DOCS"."ID_DOC" AND "INDEXER"."ID_COURS" = "COURS"."ID_COURS" AND "COURS"."SEMESTRE" = 2 AND "COURS"."OBLIGATOIRE" = 1 Maud Bourgeois 7 DOCD0

DOCD0 Base de Donnes et FOAD

Classer les documents par typologie et les trier par date pour en dduire une pertinence (le contenu dune page Web sera plus vite obsolte que le contenu dune thse ou dun rapport de recherche, donc sur ce type de doc lanne nest pas aussi pertinente) donne la requte 1_DOC_WEB_09+; SELECT "ID_DOC" AS "ID_DOC", "TITRE" AS "TITRE", "TYPE" AS "TYPE", "ANNEE" AS "ANNEE" FROM "DOCS" WHERE "TYPE" LIKE 'Pages WWW' AND "ANNEE" >= 2009 ORDER BY "TITRE" ASC, "ANNEE" DESC ou encore chercher tous les documents qui sont des rapports de recherche et dont la pertinence par rapport au cours est suprieure ou gale 90% en affichant la date et le cours associ donne la requte 3_DOC_RECH_%90_COURS SELECT "DOCS"."TITRE", "DOCS"."TYPE", "DOCS"."ANNEE", "INDEXER"."%PERTINENCE", "COURS"."PROFESSEUR", "COURS"."MATIERE" FROM "INDEXER", "DOCS", "COURS" WHERE "INDEXER"."ID_DOC" = "DOCS"."ID_DOC" AND "INDEXER"."ID_COURS" = "COURS"."ID_COURS" AND "DOCS"."TYPE" LIKE 'Rapports de recherche' AND "INDEXER"."%PERTINENCE" >= 90 ORDER BY "DOCS"."ANNEE" DESC Chercher un document par auteur(s) et vrifier si le professeur du cours est aussi lauteur du document (si oui alors je le lirai en priorit) donne la requte 4_DOC_AUTEUR?_COURS; SELECT "DOCS"."TITRE", "DOCS"."AUTEUR 1", "DOCS"."AUTEUR 2", "COURS"."MATIERE", "COURS"."PROFESSEUR" FROM "INDEXER", "DOCS", "COURS" WHERE "INDEXER"."ID_DOC" = "DOCS"."ID_DOC" AND "INDEXER"."ID_COURS" = "COURS"."ID_COURS" AND ( "DOCS"."AUTEUR 1" = ? OR "DOCS"."AUTEUR 2" = ? ) Identifier les documents dont le contenu est transverse sil est associ plusieurs cours (ce document me servira plusieurs fois donc vaut potentiellement la peine dtre lu !) donne la requte 7_1DOC_nCOURS_% ; SELECT "DOCS"."TITRE", "COURS"."MATIERE", "INDEXER"."%PERTINENCE" FROM "INDEXER", "DOCS", "COURS" WHERE "INDEXER"."ID_DOC" = "DOCS"."ID_DOC" AND "INDEXER"."ID_COURS" = "COURS"."ID_COURS" AND "INDEXER"."ID_DOC" IN ( SELECT "INDEXER"."ID_DOC" FROM "INDEXER" GROUP BY "INDEXER"."ID_DOC" HAVING COUNT( "INDEXER"."ID_DOC" ) > 1 ) Pour faire cette requte je me suis vite retrouve bloque et ai donc cherch sur Internet dans des forums la requte qui va bien , e, ayant pris son bien sr de rflchir ce qui allait me permettre disoler mes champs, savoir, la fait quils sont en doublon dans la table INDEXER. Jai donc trouv un exemple de requte SQL ladresse ci-dessous en tapant afficher les doublons dune table dans Google. http://www.webmaster-hub.com/topic/25351-afficher-les-doublons/

Maud Bourgeois

DOCD0

DOCD0 Base de Donnes et FOAD

Une fois la syntaxe trouve, jai test et ai avanc par itrations successives. Jai dabord remplac dans la requte trouve sur Internet les noms de tables et de champs par ceux de mon modle pour essayer dafficher les doublons de la table INDEXER avec la requte 5_ID_DOC_DOUBLON que je gre dans lditeur SQL: SELECT * FROM "INDEXER" WHERE "ID_DOC" IN ( SELECT "ID_DOC" FROM "INDEXER" GROUP BY "ID_DOC" HAVING COUNT( "ID_DOC" ) > 1 ) Puis une fois que jai test cette premire requte et que a marche je sauve la requte et la modifie en repartant du mode Ebauche. Jajoute les autres champs des autres tables COURS et DOCS pour avoir le nom du cours et du professeur en charge avec la requte 6_1DOC_nCOURS_% : SELECT "INDEXER".*, "DOCS"."TITRE", "COURS"."MATIERE", "INDEXER"."%PERTINENCE" FROM "INDEXER", "DOCS", "COURS" WHERE "INDEXER"."ID_DOC" = "DOCS"."ID_DOC" AND "INDEXER"."ID_COURS" = "COURS"."ID_COURS" AND "INDEXER"."ID_DOC" IN ( SELECT "INDEXER"."ID_DOC" FROM "INDEXER" GROUP BY "INDEXER"."ID_DOC" HAVING COUNT( "INDEXER"."ID_DOC" ) > 1 ) Et enfin je choisi de rendre invisible les identifiants ID_DOC et ID_COURS, tout en faisant attention rajouter aussi le champ %PERTINENCE. SELECT "DOCS"."TITRE", "COURS"."MATIERE", "INDEXER"."%PERTINENCE" FROM "INDEXER", "DOCS", "COURS" WHERE "INDEXER"."ID_DOC" = "DOCS"."ID_DOC" AND "INDEXER"."ID_COURS" = "COURS"."ID_COURS" AND "INDEXER"."ID_DOC" IN ( SELECT "INDEXER"."ID_DOC" FROM "INDEXER" GROUP BY "INDEXER"."ID_DOC" HAVING COUNT( "INDEXER"."ID_DOC" ) > 1 ) Ca nous donne :

Maud Bourgeois

DOCD0