8710 sujets

Développement web côté serveur, CMS

Bonjour à tous,

Je compte créer une base de données regroupant des informations sur tous les sujets, tous les thèmes possibles (agriculture, économie, chimie, sport, politique, ...).

Je suppose avoir donc besoin de créer dans une table, tous les mots clés d'une façon hiérarchisée (ex: "politique" regroupe "Parlement" et "Parlement" regroupe "député").
Avec peut-être certains mots-clés indépendants (par exemple les pays qui peuvent se rattacher à un peu n'importe quel autre mot-clé).
C'est à dire que j'aurai pour un mot-clé: son ID, son nom et sa référence.

Ensuite je suppose avoir besoin de créer une table pour les infos, avec au moins pour chaque info : son Id, son contenu texte et sa référence mot-clé.

Ma question est : comment mettre en place mon système de référencement de mots clés puis d'infos.

Merci
Basiquement je pense que tu as deux modèles: ou bien tu définis que chaque mot-clé ne peut avoir qu'un seul et unique parent, auquel cas tu vas obtenir une structure arborescente, ou bien tu enlèves cette contrainte et tu auras un graphe.

Pour les structures arborescentes, deux façons de s'organiser: table auto-référente, ou bien notation intervalaire; chacune a des avantage et des inconvénients, il faut choisir en fonction de ce que tu vas manipuler et rechercher le plus souvent; je te laisse te renseigner.

Pour les graphes, pas vraiment de technique spéciale, il faut à mon avis une table répertoriant les sommets et une autre les arêtes.

Ensuite, pour relier les infos aux mots-clés ça dépend de nouveau de ce que tu veux: une info est liée à exactement un mot-clé ou plus ? si exactement un mot-clé, alors c'est une bête clé étrangère; sinon c'est une table de liaison classique qu'il faut.


Pour en savoir plus sur ces sujets, je t'invite à rechercher un cours sur les bases de données relationnelles.
Salut Quentin, merci beaucoup pour ta réponse, ça a l'air très intéressant!

Je pense que c'est la BDD orientée graphe qui m'intéresse car mes mots clés sont hiérarchisés, et en fonction du niveau du mot clé, celui-ci peut avoir au-dessus le lui plusieurs mots clés.

Un exemple:
j'ai une info avec comme mots clés Sarkozy et Google.
Si je fais une recherche avec les mots clés "politique" je trouverai en résultat cette info, de même que si je fais une recherche avec comme mot clé "UMP". Et si je fais une recherche avec "politique" et "internet" je trouverai aussi cette info.

Le système que j'ai commencé à mettre en place avant de demander de l'aide est que je détermine combien "d'étages" je vais avoir dans ma hiérarchie, puis je crée pour chaque mot clé une ref sous la forme "Ax.By.Cz.D... avec x, y et z étant des nombres entiers et A B C D chaque étage.
Ex mot clé Sarkozy: A3.B10.C8.D2.E3.F8
mot clé Google: A4.B8.C4.D3.E7.F45
mot clé politique: A3.B10.
mot clé UMP: A3.B10.C8.D2.E3
mot clé internet: A4.B8

Ce système fonctionne lorsque pour une info les ref de chaque mot clé associé sont enregistrées à la suite dans une même colonne de la table "info" puis quand on fait une recherche on utilise la fonction preg_match.

Après il est difficile de construire la hiérarchie, la pyramide, et pour une recherche à plusieurs mots clé ça se complexifie un peu mais ça reste faisable je pense. Mais ça m'a l'air assez brouillon .

Chaque info peut donc être reliée à plusieurs mots clés.
Je vais aller me renseigner sur les bases de données relationnelles et le reste avec plaisir, merci!
Au final pour moi c'est peut-être plus une structure arborescente qu'il me faut en fait non ?
Administrateur
Bonjour et bienvenue, Smiley smile

dans un arbre, un noeud n'a qu'un seul parent et 0, 1 ou N enfants : c'est la grosse différence avec un graphe (orienté) où un noeud "A" a plein de "parents" (de noeuds ayant pour destination ce noeud "A" i.e. reliés par des flèches aboutissant à "A") tout comme 0 à N enfants (de noeuds reliés par une flèche partant du noeud "A")

Dans ce que tu décris, une catégorie peut dépendre de/appartenir à plusieurs sur-catégories
Modifié par Felipe (24 Oct 2014 - 17:38)
a écrit :
Ce système fonctionne lorsque pour une info les ref de chaque mot clé associé sont enregistrées à la suite dans une même colonne de la table "info" puis quand on fait une recherche on utilise la fonction preg_match.

Après il est difficile de construire la hiérarchie, la pyramide, et pour une recherche à plusieurs mots clé ça se complexifie un peu mais ça reste faisable je pense. Mais ça m'a l'air assez brouillon .


Pour le moment, tu n'as l'air de rechercher que des préfixes. Fondamentalement il n'y a pas de grosse différence avec la description de chemins dans une arborescence. Mais si tu pars vers les graphes, tu vas rapidement te rendre compte que ça devient d'un coup beaucoup plus complexe.

Quoi qu'il en soit, rechercher des bouts de chaînes à coup de regex, ça va un moment mais c'est pas très performant. Le serveur risque de ne pas trop apprécier quand tu auras des milliers de catégories et que la relation entre elles sera devenue plus floue.

Je ne t'apprends probablement rien de nouveau en te disant que gérer un graphe est énormément plus compliqué qu'un arbre. En fait, dès qu'on autorise plusieurs parents, ça devient vite le bordel.

Pour les arbres, avec la méthode de représentation intervalaire, on a somme toute des requêtes assez simples et surtout performantes lorsqu'il s'agit de chercher les fils d'une catégorie ou ses ancêtres jusqu'à la racine. Pour les graphes, on n'a pas d'autre choix que de faire de la récursion... et les SGBDR ne sont pas spécialement conçus pour faire ça efficacement.

ET en plus, gare aux cycles ! Ca paraît con quand on a un petit graphe et qu'on en a une bonne vue d'ensemble, mais ça arrive plus vite qu'on ne le pense.
Merci beaucoup, si j'ai bien compris la représentation intervallaire a l'air d'être la méthode la plus adaptée à mon projet!

Mes données doivent être organisées de façon hiérarchique, je pense qu'on est d'accord là-dessus, non? D'après toi Felipe, ce serait un graphe ?
Tous mes mots clés sont organisés en arborescence et c'est avec les infos que je crée des liens entre certains mots clés... c'est compliqué ^^.

D'ailleurs je compte m'inspirer grandement des catégories de wikipédia.

Bref en attendant j'ai un long cours sur les représentations intervalaires, je vais aller me pencher dessus.

Merci encore, vous m'avez déjà bien fait avancer Smiley biggrin
Je me suis renseigné sur la représentation intervallaire, c'est super intéressant, merci.

Hélas je crois bien que ça ne va pas être assez, car je dois avoir la possibilité, en plus d'avoir les mots clés (nœuds ou feuilles) associés à leur parents, grand-parent etc, d'associer un pays à certains mots clés, et avoir une arborescence pour les pays.

Par exemple pour "UMP", en plus d'avoir les parents "politique", "parti politique", "droite", je dois avoir le mot clé "France".

Si je fais une recherche "politique" "europe" je dois trouver les infos avec le mot clé "Angela Merkel" ou "Nicolas Sarkozy" ou "Silvio Berlusconi", chacun étant relié à un pays d'europe.

Des conseils pour remédiez à ça en conservant MySQL ? Dois-je mettre tout de suite à Java et Neo4j ?