Documente Academic
Documente Profesional
Documente Cultură
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
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.
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
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
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
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
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
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