Réalisation d'un forum

Rechercher

Réalisation d'un forum

Par ZikoNFS  -  12 reponses  -  Le 23/12/2008 23:09  -  Editer  - 

Salut,

Je veux réaliser un forum. Dans le forum il y aura plusieurs catégories. Il y aura une table qui contient les messages du forum.

Est ce que c'est préférable d'utiliser une seule table pour tous les messages du forum ou faire une table pour chaque catégorie? Ou est-ce que c'est pareil ? Sinon proposez-moi une meilleure facon de le concevoir.

Merci

 

Réponses apportées à cette discussion

Par saturn1  -  Le 24/12/2008 04:07  -  Haut de page  - 

Lol tu t'y prend mal.

Moi je te conseilles de faire les tables suivantes :

-f_cat

-f_forum

-f_msg

-f_sujet

-f_lecture

 

Voilà sa c'est du lourd mekton ;)

Compatible PDO/POO^^

 

Bonne chance!

 
Par Emacs  -  Le 24/12/2008 09:30  -  Haut de page  - 

Quel rapport avec la compatibilité POO / PDO ?

 
Par Cyrano  -  Le 24/12/2008 10:00  -  Haut de page  - 

Saturn1, ta réponse risque fort de ne pas aider vraiment ZikoNFS...

ZikoNFS, pose-toi la question suivantes : quelles sont les données que tu vas devoir manipuler ? Ces données sont liées entre elles : de quelle manière ? Ainsi, un message est rattaché à d'autres données : un utilisateur, une catégorie, un sujet, un autre message (pour une réponse par exemple.)

Cette structure te permet de définir ce qu'on appelle des cardinalités. Par exemple, une catégorie de forum peut comporter de 0 à n messages, mais un message n'appartient qu'à une et une seule catégorie de forum. Un forum comporendra 0 à n catégories, mais une catégorie n'appartiendra qu'à un et un seul forum.

Tu dois également distinguer les entités de leurs propriétés. «message» par exemple sera une entité, alors que «auteur_nom» est une propriété de «message» : les entités deviendront alors des tables, les propriétés en seront les colonnes respectives.

Un piège classique aussi dans la construction d'un forum consiste à faire une distinction entre un message et les réponses : c'est une erreur parce qu'une réponse est également un message. Mais dans ce cas, on doit réaliser qu'il y a une relation entre «message» et ... «message» qu'on peut formuler de la manière suivante : un message reçoit comme réponse 0 à n messages et à l'inverse un message répond à 1 et un seul message. Tu auras donc ta ton entité «message» une propriété «repond_a» qui correspondra à l'identifiant du message d'origine.

Je ne sais pas si tu saisis globalement ce principe, mais si c'est le cas, alors pousse ta réflexion dans ce sens pour avancer. Construire un forum est une excellente école d'apprentissage par laquelle je suis moi-même passé il y a déjà pas mal de temps.

 
Par ZikoNFS  -  Le 25/12/2008 01:49  -  Haut de page  - 

Merci beaucoup Cyrano

Voici mes entités :

Categorie

 

  • Id
  • Nom
  • Sous_cat_de

 

Sujet

 

  • Id
  • Titre
  • DateAjout
  • IdMembre
  • IdCategorie

 

Message

 

  • Id
  • Contenu
  • DateAjout
  • IdMembre
  • IdSujet
  • Repond_a

Message a une relation avec Message ( Repond_a )

Si Repond_a est égale à 0 donc c'est la question

Categorie a une relation avec Categorie ( Sous_cat_de )

Si Sous_cat_de est égale à 0 donc c'est la racine

 
Par ZikoNFS  -  Le 25/12/2008 01:50  -  Haut de page  - 

Salut.

Je ne suis qu'un collégien alors soyez patient si je comprends pas vite.

Merci

 
Par Cyrano  -  Le 26/12/2008 14:51  -  Haut de page  - 

Salut,

je suis absent de chez moi et je te fais une réponse express.

Fais une petite recherche sur Internet pour trouver un outil de modélisation : il y a MySQL Workbench ou encore DBDesignerFork qui devrait t'aider : ça sert à créer des modélisations graphiques qui t'aideront beaucoup à comprendre les relations entre tes entités. Partant de tes premières conclusions, tu devrais pouvoir construire un graphique plus efficace encore.

Je reviendrai à mon retour de congé, bon courage ;)

 
Par Cyrano  -  Le 29/12/2008 11:12  -  Haut de page  - 

Salut,

bon, après quelques jours de repos pratiquement sans ordinateur, me revoici.

Tu as défini trois entité, Categorie, Sujet et Message, mais à mon sens Sujet n'a pas sa place et est en réalité une propriété de Message. Par contre, il te manque une entité qui est quand même très importante : Membre.

 

Voici ce que ça donnerait comme modèle, je te laisse assimiler ça.

+---------------------------------+
| categorie                       |
+--------------+-------------+----+
|cat_id        | INT         | PK |
|cat_parent_id | INT         | FK |
|cat_nom       | VARCHAR(64) |    |
+--------------+------------------+
+---------------------------------+
|message                          |
+--------------+-------------+----+
|msg_id        | INT         | PK |
|msg_parent_id | INT         | FK |
|mbr_id        | INT         | FK |
|msg_dateajout | DATETIME    |    |
|msg_contenu   | TEXT(1024)  |    |
+--------------+-------------+----+
+---------------------------------+
|membres                          |
+--------------+-------------+----+
|mbr_id        | INT         | PK |
|mbr_nom       | VARCHAR(64) |    |
|mbr_prenom    | VARCHAR(64) |    |
|mbr_pseudo    | VARCHAR(64) |    |
|mdr_motdepasse| VARCHAR(64) |    |
|mbr_courriel  | VARCHAR(128)|    |
+--------------+-------------+----+

Note bien au passage que toutes les propriétés sont préfixées : ça permet de retracer très rapidement de quelle table vient quelle colonne, en particulier les clés étrangères.

 

 
Par ZikoNFS  -  Le 29/12/2008 19:39  -  Haut de page  - 

Merci Cyrano

Il n'y a aucune relation entre l'entité Categorie et Message.

L'entité Message doit contenir aussi :

  • msg_titre pour le titre du sujet si c'est ce message qui est la question.

  • cat_id pour classifier le sujet dans une catégorie si c'est ce message qui est la question.

P.S. : Quelle est la taille idéale pour un Pseudo, Mot de Passe, Email, Titre ? Je fais toujours Varchar(255). Est-ce que ça prend beaucoup de mémoire ?

 
Par Cyrano  -  Le 29/12/2008 21:40  -  Haut de page  - 

Salut,

premier point : tu as effectivement raison, il n'y a pas de lien entre le message et la catégorie : tu peux en déduire une chose : soit il manque une table, c'est surtout une question de terminologie en réalité, si on a divers forums répartis par catégorie, alors il manque la table forum entre message et catégorie, soit on utilise le terme de catégorie pour définir un des forums, alors il manque la clé étrangère dans message pour cibler la catégorie correspondante. Et dans le cas de l'exemple, c'est la formule que j'ai proposée, ce qui explique le cat_parent_id qui permet d'avoir des catégories et des sous-catégories dans une même table. DOnc il manque bien le cat_id dans message.

Pour le titre, tu as également raison, donc il convient d'ajouter cette propriété à notre entité message.

Pour les tailles, mettre un varchar de 255 pour un mot de passe est exagéré, un mot de passe faisant en général entre 8 et 12 caractères, 32 si tu le haches avec md5() et un peu plus avec sha1(). Donc avec 64 comme je l'ai indiqué est suffisant. email, je mets en général 128 même si le plus souvent, 64 serait suffisant aussi. Pour le reste, c'est une question de logique. Ce n'est pas un gros problème de mémoire, c'est de l'espace de stockage et un type varchar prend la taille de la valeur, pas la taille indiquée : si la valeur fait 12 caractères, alors ça prendra l'espace de 12 caractères même si tu as un type varchar(255). Ce serait différent si tu utilisais un type char(255) qui prendrait alors effectivement l'espace de 255 caractères même si la valeur elle-même n'en occupe que 12. Et l'espace de stockage vu la taille des espaces web et des disques durs actuels n'est pas un problème vraiment majeur, surtout pour un simple forum.

Et c'est pour toutes ces raisons que je suggérais l'utilisation d'un outil comme MySQL-WorkBench ou DBDesigner pour modéliser : une image vaut mille mots et on voit immédiatement ce genre de détails dans un modèle graphique, et en créant la relation entre deux tables, les clés étrangères sont automatiquement insérées par l'outil. ;)

 
Par ZikoNFS  -  Le 30/12/2008 18:14  -  Haut de page  - 

Merci encore Cyrano.

Connaissez-vous des tutoriels ou cours sur la conception de bases de données ?

Pour savoir qu'est ce qu'un index, les différents types de relations (1-n; 1-1; n-n ), les méthodes(Merise,UML) etc...

Merci beaucoup.

 
Par Cyrano  -  Le 30/12/2008 18:17  -  Haut de page  - 

Oui, il existe un fort bon tuto sur developpez.com, http://sqlpro.developpez.com/cours/modelisation/merise/

 
Par Riiki  -  Le 12/01/2009 18:50  -  Haut de page  - 

Bonjour,

Moi aussi je creer un script de forum en Php sauf que je blok à un endroit.

Je blok au moment ou il faut montrer les messages non lu et ceux lu dans un sujet.

Peut être que des gens ont des idées.

Merci

 

Ajouter une réponse à la discussion

Seuls les membres connectés sont autorisés à poster dans les forums !

Identifiez-vous
Join |  ID/MDP? |